- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机键盘接口实验
实验六 键盘接口实验
一、实验目的
1、掌握Keil C51软件与Protues软件联合仿真调试的方法;
2、掌握单片机的键盘接口电路;
3、掌握单片机的键盘扫描原理;
4、掌握键盘的去抖原理及处理方法。
二、实验仪器与设备
1、微机 一台 2、Keil C51集成开发环境 3、Protues仿真软件
三、实验内容
1、用Protues设计一矩阵键盘接口电路。要求利用P1口接一4×4矩阵键盘。串行口通过一74LS164接一共阴极数码管。用线反转法编写矩阵键盘识别程序,用中断方式,并将按键的键值0-F通过串行口输出,显示在数码管上。
2、将P1口矩阵键盘改成8个独立按键,重新编写识别和显示程序。
四、实验说明
矩阵键盘识别一般包括以下内容:
⑴判别有无键按下。
⑵键盘扫描取得闭合键的行、列号。
⑶用计算法或查表发的到键值;
⑷判断闭合键是否释放,如没释放则继续等待。
⑸将闭合键的键值保存,同时转去执行该闭合键的功能。
五、实验步骤
1、用Protues设计键盘接口电路;
2、在Keil C51中编写键盘识别程序,编译通过后,与Protues联合调试;
3、按动任意键,观察键值是否能正确显示。
六、实验电路仿真图
矩阵键盘电路图见附录1。
独立按键电路图见附录2。
七、实验程序
实验程序见附录3、4。
八、实验总结
1、矩阵键盘常用的检测方法有线反转法、逐行扫描法。线反转法较简单且高效。在矩阵键盘的列线上接一与门,利用中断方式查询按键,可提高CPU的运行效率。
2、注意用线反转法扫描按键时,得到的键值不要再赋给temp,最好再设一新变量接收键值,否则再按下按键显示数字的过程中,再按按键会出现乱码。
3、学会常用与门、与非门的使用方法。
附录1:矩阵键盘实验电路图
附录2:独立按键实验电路图
附录3:矩阵键盘实验程序
#include REG51.H
char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
char code KEY_TABLE[]={0xee,0xde,0xbe,0x7e, 0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77};
char code tab1[10]={0xfe,0xde,0x9e,0x9a, 0x92,0x82,0x82,0x80,0xff};
char temp,num,i,m;
int t;
bit flag=0;
void Delay_ms(t)
{
int i;
for(;t0;t--)
for(i=0;i124;i++);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1; PT0=1; SCON=0;
EX0=1; IT0=1; EA=1;
P1=0xf0;
while(1)
{
SBUF=tab1[m];
while(TI==0); TI=0;
Delay_ms(400); //500ms
m++;
if(m==9) m=0;
}
}
void int_1() interrupt 0
{
P1=0xf0;
if(P1!=0xf0)
{
Delay_ms(10);
if(P1!=0xf0)
{
temp=P1;
P1=0x0f;
temp=temp|P1;
for(i=0;i16;i++)
{ if(temp==KEY_TABLE[i])
{ temp=i; break; }
} SBUF=LED_TAB[temp];
while(TI==0); TI=0; TR0=1; while(flag==0); flag=0;
} }
P1=0xf0;
}
void timer_0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t++;
if(t==300)
{
t=0; flag=1; TR0=0;
}
}
附录4:独立按键实验
#include REG51.H
char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf
文档评论(0)