目的:矩阵键盘显示电路,采用4*4键盘,用4位数码管显示输入的数字,依次将输入数字组合在一起显示
单片机源程序如下:
- #include <reg51.h>
- unsigned char WEI[]={0x01,0x02,0x04,0x08,0x10,0x20};
- unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- unsigned char a[4] = {0,0,0,0};
- unsigned char temp;
- unsigned char key();
- unsigned char i,n,shu;
- void delayms(unsigned int ms);
- void keyscan(void);
- void shuma(unsigned char par,unsigned char dat)
- {
- P2 = WEI[par];
- P0 = table[dat];
- }
- void main()
- {
- i = n = 0;
- while(1)
- {
- shu = key();
- if(shu !=17)
- {
- a[n] = shu;
- n++;
- if(n>3) n = 0;
- }
- shuma(i,a[i]);
- i++;
- if(i>3) i = 0;
- delayms(10);
- }
- }
- unsigned char key()
- {
- unsigned char key1;
- key1 = 17;
- P3 = 0xEf;
- if (P3 != 0xEf)
- {
- delayms(10);
- switch(P3)
- {
- case 0xE7:key1 = 0;break;
- case 0xEB:key1 = 1;break;
- case 0xED:key1 = 2;break;
- case 0xEE:key1 = 3;break;
- }
- while(P3 != 0xEf);
- }
- P3 = 0xDF;
- if (P3 != 0xDF)
- {
- delayms(10);
- switch(P3)
- {
- case 0xD7:key1 = 4;break;
- case 0xDB:key1 = 5;break;
- case 0xDD:key1 = 6;break;
- case 0xDE:key1 = 7;break;
- }
- while(P3 != 0xDF);
- }
- P3 = 0xBF;
- if (P3 != 0xBF)
- {
- delayms(10);
- switch(P3)
- {
- case 0xb7:key1 = 8;break;
- case 0xBB:key1 = 9;break;
- case 0xBD:key1 = 10;break;
- case 0xBE:key1 = 11;break;
- }
- while(P3 != 0xBF);
- }
- P3 = 0x7f;
- if (P3 != 0x7f)
- {
- delayms(10);
- switch(P3)
- {
- case 0x77:key1 = 12;break;
- case 0x7B:key1 = 13;break;
- case 0x7D:key1 = 14;break;
- case 0x7E:key1 = 15;break;
- }
- while(P3 != 0x7f);
- }
- return key1;
- }
- void delayms(unsigned int ms)
- {
- unsigned int x,y;
- for (x=ms;x>0;x--)
- for(y=120;y>0;y--);
- }
复制代码
|