我用的是郭天祥的板子,自己写了一个简易单片机,但是运算结果只显示最高位,后几位一闪而过。这是为什么?
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- uchar code wei[]={
- 0xff,0xdf,0xef,0xf7,0xfb};
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(int num)
- {
- int bai,shi,ge;
- bai=num/100%10;
- shi=num/10%10;
- ge=(num%10);
- if(num>=0&&num<=999)
- {
-
- dula=1;
- P0=table[ge];
- dula=0;
- P0=0xff;
- wela=1;
- P0=wei[1];
- wela=0;
- delayms(5);
- P0=0xff;
- if(num>=10)
- {
- dula=1;
- P0=table[shi];
- dula=0;
- P0=0xff;
- wela=1;
- P0=wei[2];
- wela=0;
- delayms(5);
- }
- if(num>=100)
- {
- dula=1;
- P0=table[bai];
- dula=0;
- P0=0xff;
- wela=1;
- P0=wei[3];
- wela=0;
- delayms(5);
- }
- }
- }
-
-
- void matrixkeyscan()
- {
- int temp,key,flag,key1,key2,x;
- P3=0xfe;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xee:key=key*10+1;break;
- case 0xde:key=key*10+2;break;
- case 0xbe:key=key*10+3;break;
- case 0x7e:key1=key;key=0;flag=1;break;
- }
- while(temp!=0xf0) //等待按键释放
- {
- temp=P3;
- temp=temp&0xf0;
- }
-
- }
- }
- if(x==0)
- display(key);
- P3=0xfd;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xed:key=key*10+4;break;
- case 0xdd:key=key*10+5;break;
- case 0xbd:key=key*10+6;break;
- case 0x7d:key1=key;key=0;flag=2;break;
-
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- display(key);
- }
- }
- if(x==0)
- display(key);
- P3=0xfb;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xeb:key=key*10+7;break;
- case 0xdb:key=key*10+8;break;
- case 0xbb:key=key*10+9;break;
- case 0x7b:key1=key;key=0;flag=3;break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
- display(key);
- }
- }
- if(x==0)
- display(key);
- P3=0xf7;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delayms(5);
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xe7:key2=0;key=0;key1=0;flag=4;x=0;break;
- case 0xd7:key=key*10+0;key2=key;break;
- case 0xb7:if(flag==1)key2=key1+key;
- if(flag==2)key2=key1-key;
- if(flag==3)key2=key1*key;
- if(flag==4)key2=key1/key;key=0;x=1;break;
- case 0x77:key1=key;key=0;flag=4;break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- }
-
- }
- if(x!=0)
- display(key2);
- }
- }
- void main()
- {
-
- while(1)
- {
- matrixkeyscan();//不停用键盘扫描程序
- }
- }
复制代码
|