数码管显示部分的原理图:http://www.51hei.com/f/51hei-5.pdf
源代码:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit wela=P2^7;
- sbit dula=P2^6;
- uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x70,0x40,0x76,0x52};
- uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar dis_smg[6];
- uchar flag,num_key,oper,j;
- uchar num1,num2,num_i;
- uchar scan(void)
- {
- static uchar i;
- uchar num,key;
- P3=0x0f;
- if(P3!=0x0f)
- {
- i++;
- if(i>=7)
- if(flag==0)
- {
- flag=1;
- key=P3|0xf0;
- P3=key;
- switch(P3)
- {
- case 0xee:num=0; break;
- case 0xde:num=1; break;
- case 0xbe:num=2; break;
- case 0x7e:num=3; break;
- case 0xed:num=4; break;
- case 0xdd:num=5; break;
- case 0xbd:num=6; break;
- case 0x7d:num=7; break;
- case 0xeb:num=8; break;
- case 0xdb:num=9; break;
- case 0xbb:num=10;break;
- case 0x7b:num=11;break;
- case 0xe7:num=12;break;
- case 0xd7:num=13;break;
- case 0xb7:num=14;break;
- case 0x77:num=15;break;
- }
- }
- }
- else {i=0;flag=0;}
- return num;
- }
- void dis_init()
- {
- dis_smg[0]=smg_du[num_i/10];
- dis_smg[1]=smg_du[num_i%10];
- dis_smg[2]=0x00;
- dis_smg[3]=smg_du[num1%10];
- dis_smg[4]=smg_du[j];
- dis_smg[5]=smg_du[num2%10];
- }
- void display()
- {
- static uchar i;
- P0=0x00;
- dula=1;
- dula=0;
- P0=smg_we[i];
- wela=1;
- wela=0;
- P0=dis_smg[i];
- dula=1;
- dula=0;
- i++;
- if(i>=6)
- i=0;
- }
- void main()
- {
- uchar num_key;
-
- while(1)
- {
- num_key=scan();
- dis_init();
- display();
- if(num_key<17)
- {
- switch(num_key)
- {
- case 10:num_i=0;oper=0;num1=0;num2=0;j=0;break;
- case 11:
- switch(oper)
- {
- case 0:num1 =num2;break;
- case 1:num_i=num1+num2;break;
- case 2:num_i=num1-num2;break;
- case 3:num_i=num1*num2;break;
- case 4:num_i=num1/num2;break;
- }break;
- case 12:oper=1;j=10;break;
- case 13:oper=2;j=11;break;
- case 14:oper=3;j=12;break;
- case 15:oper=4;j=13;break;
- default :if(num_key<10)
- {
- if(oper==0)
- num1=num_key;
- else
- num2=num_key;
- }
- break;
- }
- }
-
- }
- }
复制代码
|