以下是我写的键盘扫描及串行发送子程序,合在一起就不能用了!请各位指点下哦!
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit cp=P2^5; sbit ds=P2^4; sbit a2=P2^3; uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xe3,0x71,0x91,0xfe}; //0~9,L,F,H,.
void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay50ms(uint time) //延时大约1ms { uint x,y; for(x=time;x>0;x--) for(y=5000;y>0;y--); }
uchar scankey() //键盘扫描 { uchar temp,num; P2=0xcf; temp=P2; temp=temp&0x07; while(temp!=0x07) { delay50ms(1); temp=P2; temp=temp&0x07; while(temp!=0x07) { temp=P2; switch(temp) { case 0xcb:num=1; break; case 0xcd:num=2; break; case 0xce:num=3; break; } while(temp!=0x07) { temp=P2; temp&=0x07; } } } P2=0xef; temp=P2; temp=temp&0x07; while(temp!=0x07) { delay50ms(1); temp=P2; temp=temp&0x07; while(temp!=0x07) { temp=P2; switch(temp) { case 0xeb:num=4;break; case 0xed:num=5;break; case 0xee:num=6;break; } while(temp!=0x07) { temp=P2; temp&=0x07; } } }
P2=0xdf; temp=P2; temp=temp&0x07; while(temp!=0x07) { delay50ms(1); temp=P2; temp=temp&0x07; while(temp!=0x07) { temp=P2; switch(temp) { case 0xdb:num=7;break; case 0xdd:num=8;break; case 0xde:num=9;break;
} while(temp!=0x07) { temp=P2; temp&=0x07; } } }
P2=0xff; temp=P2; temp=temp&0x07; while(temp!=0x07) { delay50ms(1); temp=P2; temp=temp&0x07; while(temp!=0x07) { temp=P2; switch(temp) { case 0xfd:num=0;break; case 0xfe:num=11;break; } while(temp!=0x07) { temp=P2; temp&=0x07; } } } return num; }
void display(uchar num) //串行发送 { uchar a,b; a=table[num]; for(b=0;b<8;b++) { a<<=1; cp=0; ds=CY; cp=1; } b=0; }
|