中断法键盘扫描c程序.doc_第1页
中断法键盘扫描c程序.doc_第2页
中断法键盘扫描c程序.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中断法键盘扫描c程序/*程序效果:按下按键,蜂鸣器响,数码管有相应的键值显示,按下E键继电器关,按下C键继电器开。这与上一程序的功能相同,比上一程序简洁但理解相对困难些。运行平台:51hei单片机学习板*/#include /头文件#include#define uchar unsigned char /宏定义#define uint unsigned intsbit jdq=P35; /位声明,驱动继电器管脚sbit fmq=P34; /位声明,驱动蜂鸣器管脚code uchar table=0x3f,0x06,0x5b,/数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;code uchar key_tab17= /此数组为键盘编码0xed,0x7e,0x7d,0x7b, / 0,1,2,3,0xbe,0xbd,0xbb,0xde, / 4,5,6,7,0xdd,0xdb,0x77,0xb7, / 8,9,a, b,0xee,0xeb,0xd7,0xe7,0xff; / c,d,e,f,uchar l_key=0x00; /定义变量,存放键值uchar l_keyold=0xff; /作为按键放开否的凭证void readkey(); /扫描键盘,获取键值void display(uchar *lp,uchar lc); /显示子函数void delay(); /延时子函数void main() /主函数EA=1; /打开总中断EX0=1; /打开外部中断P0=0xf0; /键值高4位为高电平,低4位为低电平 while(1) display(&l_key,1); /调用显示子函数 if(l_key=14) /是否按下E键,是则关闭继电器 jdq=1; if(l_key=12) /是否按下C键,是则打开继电器 jdq=0; void key_scan() interrupt 0/外部中断0,0的优先级最高EX0=0; /在读键盘时,关闭外部中断,防止干扰带来的多次中断TMOD&=0xf1; /设置定时器为工作方式1 TH0=0x2e; /设置初值,为12毫秒,十进制值为11776TL0=0x00;ET0=1; /开启定时器中断0TR0=1; /启动定时器计数void time0() interrupt 1 /定时器0的中断函数TR0=0; /关闭定时器0readkey(); /定时12ms后产生中断,调用此函数,读取键值 void readkey() /扫描键盘子函数uchar i,j,key; /定义局部变量j=0xfe; /设定初值key=0xff;for(i=0;i4;i+) / 逐列扫描键盘 P0=j; if(P0&0xf0)!=0xf0) /有按键按下,高4位不可能全为1 key=P0; /读取P0口的值,推出循环,否则循环下次 break; j=_crol_(j,1); /此函数的功能是:左移循环if(key=0xff) /如果读取不到P0口的值,如干扰,则返回 l_keyold=0xff; P0=0xf0; / 恢复P0口的值,等待按键按下 fmq=1; EX0=1; /在返回前,打开外部中断 return;fmq=0; /有按键按下,打开蜂鸣器if(l_keyold=key) / 检查按键放开否,如果相等表明没有放开 TH0=0x2e; /设置初值 TL0=0x00; TR0=1; /继续启动定时器,检查按键放开否 return;TH0=0x2e; TL0=0;TR0=1; /启动定时器l_keyold=key; /获取键值,作为放开否的凭证for(i=0;i17;i+) /查表获得相应的16进制值存放到l_key中 if(key=key_tabi) l_key=i; break; /程序运行到此,就表明有键值存放到l_key中,主程序/就可以检测键盘值并作相应的处理void display(uchar *lp,uchar lc) /显示子函数uchar i; /定义局部变量P1=0xf8; /点亮第一个数码管P2=0; /P2口为输出值for(i=0;ilc;i+) /循环显示 P2=tablelpi; /查表获得相应的要显示的数字的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论