- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9、10讲 (第4章 键盘)
* 最后一句话是个超链接。 * 教学延伸:键盘与数码管并无直接的硬件连接,但是为什么键盘能控制数码管? 通过观察主函数,发现是用软件使二者关联起来了。所以软件是为硬件服务的,使电器能够按某种功能去工作。 * 4个独立键盘就要4个I/O脚,如果有16个键盘,就要16个I/O脚,但是单片机的I/O脚是有限的,所以用矩阵键盘,16个键只要8个I/O脚就行,节约I/O脚。 * 徐玮书P174 * §4.1 独立键盘检测(P79) 1、键盘的分类 键盘 编码键盘:计算机键盘 非编码键盘:单片机 独立键盘 行列式(矩阵键盘) 行列式(矩阵键盘) 独立键盘 自锁式小按键 弹性小按键 (按下闭合,松手自动断开) [例 4.1.1](P82) 实用:想象成校运会裁判员手上的秒表 [例 4.1.1](P82) #include reg52.h //52系列单片机头文件 #define uchar unsigned char #define uint unsigned int sbit key1=P3^4; //S2键与芯 片的接口端 sbit key2=P3^5; //S3键 sbit key3=P3^6; //S4键 sbit key4=P3^7; //S5键 sbit dula=P2^6; //申明U1锁存器的锁存端 sbit wela=P2^7; //申明U2锁存器的锁存端 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delayms(uint); uchar numt0,num; void display(uchar numdis) //显示子函数 { uchar shi,ge; //分离两个分别要显示的数 shi=numdis/10; ge=numdis%10; dula=1; P0=table[shi]; //送十位段选数据 dula=0; P0=0xff; //关闭所有显示 wela=1; P0=0xfe; //送位选数据 wela=0; delayms(5); //延时 dula=1; P0=table[ge]; //送个位段选数据 dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void delayms(uint xms) //P83 { uint i,j; for(i=xms;i0;i--) //i=xms即延时约xms毫秒 for(j=110;j0;j--); } void init() //初始化函数,P83 { TMOD=0x01;//设置定时器0为工作方式1(0000 0001) TH0=(65536-45872)/256;//装初值50ms一次中断 TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 } void keyscan() //P83 { if(key1==0) //s2键按下,接地,P3.4脚电位为0,P80图4.1.2 { delayms(10); //延时防抖 if(key1==0) //防抖之后,再次确认s2键是否按下 { num++; if(num==60) //当到60时重新归0 num=0; while(!key1); //等待按键释放, // 松手, key1=1, 则 !key1=0, 退出while语句,执行下一条语句 } } if(key2==0) //s3键按一次,数值减1,P83 { delayms(10); if(key2==0) { if(num==0) //当到0时重新归60 num=60; num--; while(!key2); } } if(key3==0) //每按下s4,数值归零,P84 { delayms(10); if(key3==0) { num=0; //清0 while(!key3);
文档评论(0)