|
1、掌握矩阵键盘工作原理和扫描方法。
2、学习逐行扫描键盘的编程方法。
3、学习按键消抖的方法。
二、实验内容1、编写程序实现2×4矩阵键盘扫描读取。
2、键盘扫描与LED显示电路配合实现按键扫描及显示输出。
依次定义S1~S8的键值为“1~8”,按下某一按键时,在LED上显示其键值。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- sbit P24 = P0^4;
- sbit P25 = P0^5;
- sbit P26 = P0^6;
- sbit P27 = P0^7;
- typedef unsigned char uchar;
- typedef unsigned int uint;
- unsigned char code led[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- 0x88,0x83,0xc6,0xa1,0x86,0x8e
- }; //共阳极数码管
- void delay(uint xms)
- {
- uint i,j;
- for(i=xms; i>0; i--)
- for(j=112; j>0; j--);
- }
- void main()
- {
- uchar temp;//第一行按键检测
- P0=0xfe;
- P2=0x00;
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(P0)
- {
- case 0xee:
- delay(1);
- P2=led[0];
- while(P0==0xee)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xee) break;
- }
- case 0xde:
- P2=led[1];
- while(P0==0xde)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xde) break;
- }
- case 0xbe:
- delay(1);
- P2=led[2];
- while(P0==0xbe)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0xbe) break;
- }
- case 0x7e:
- P2=led[3];
- while(P0==0x7e)
- {
- delay(100);
- P0=0xfe;
- if(P0!=0x7e) break;
- }
- }
- }
- }
- /////////////////////////////////////////////////////////////
- P0=0xfd; //第二行按键检测
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P0;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(P0)
- {
- case 0xed:
- delay(1);
- P2=led[4];
- while(P0==0xed)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xed) break;
- }
- case 0xdd:
- P2=led[5];
- while(P0==0xdd)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xdd) break;
- }
- case 0xbd:
- delay(1);
- P2=led[6];
- while(P0==0xbd)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0xbd) break;
- }
- case 0x7d:
- P2=led[7];
- while(P0==0x7d)
- {
- delay(100);
- P0=0xfd;
- if(P0!=0x7d) break;
- }
- }
- }
- }
- }
复制代码
所有资料51hei提供下载:
附件.zip
(68.7 KB, 下载次数: 17)
|
|