第5章-与显示器、开关、键盘接口设计-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第5章-与显示器、开关、键盘接口设计-课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 显示器 开关 键盘 接口 设计 课件
- 资源描述:
-
1、 第第5章章 单片机的开关检测、键盘输入单片机的开关检测、键盘输入 与显示的接口设计与显示的接口设计 1 单片机系统显示及开关检测、键盘输入是其基本功能。本章介绍单片机单片机系统显示及开关检测、键盘输入是其基本功能。本章介绍单片机与显示器件、开关及键盘的接口设计与软件编程。与显示器件、开关及键盘的接口设计与软件编程。5.1 单片机控制发光二极管显示单片机控制发光二极管显示 发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。大部分发光二极管大部分发光二极管工作电流工作电流15mA之间,其之间,其内阻为内阻为20100。电流越大
2、。电流越大,亮度也越高。,亮度也越高。为保证发光二极管正常工作,同时减少功耗,为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要限流电阻选择十分重要,若供电电压为若供电电压为+5V,则,则限流电阻可选限流电阻可选13k。235.1.1 5.1.1 单片机与发光二极管的连接单片机与发光二极管的连接 第第2 2章已介绍,章已介绍,P0P0口口作通用作通用I/OI/O用,由于漏极开路,需外接上拉电阻。而用,由于漏极开路,需外接上拉电阻。而P1P1P3P3口内部有口内部有30k30k左右上拉电阻左右上拉电阻。下面讨论下面讨论P1P1P3P3口口如何与如何与LEDLED发光二极管驱动连接问题。
3、发光二极管驱动连接问题。单片机并行端口单片机并行端口P1P1P3P3直接驱动发光二极管,电路见直接驱动发光二极管,电路见图图5-15-1。与与P1、P2、P3口相比,口相比,P0口每位可驱动口每位可驱动8个个LSTTL输入输入,而,而P1P3口每一口每一位驱动能力,位驱动能力,只有只有P0口一半口一半。4图图5-1 发光二极管与单片机并行口的连接发光二极管与单片机并行口的连接5 当当P0口某位为口某位为高电平高电平时,可提供时,可提供400A的的拉电流拉电流;当;当P0口某位为口某位为低电平低电平(0.45V)时,可提供)时,可提供3.2mA的的灌电流灌电流,而,而P1P3口内有口内有30k左
4、右上拉电左右上拉电阻,如高电平输出,则从阻,如高电平输出,则从P1、P2和和P3口输出的拉电流口输出的拉电流Id仅几百仅几百A,驱动能,驱动能力较弱,亮度较差,见图力较弱,亮度较差,见图5-1(a)。)。如端口引脚为低电平,能使灌电流如端口引脚为低电平,能使灌电流Id从单片机外部流入内部,则将大大从单片机外部流入内部,则将大大增加流过的灌电流值,增加流过的灌电流值,见图见图5-15-1(b b)。)。AT89S51AT89S51任一端口任一端口要想获得要想获得较大的驱较大的驱动能力动能力,要用,要用低电平输出低电平输出。如一定要高电平驱动,可在单片机与发光二极。如一定要高电平驱动,可在单片机与
5、发光二极管间加驱动电路,如管间加驱动电路,如74LS04、74LS244等。等。65.1.2 I/O5.1.2 I/O端口的编程举例端口的编程举例 对对I/OI/O端口编程控制时,要对端口编程控制时,要对I/OI/O端口特殊功能寄存器端口特殊功能寄存器声明声明,在,在C51C51的编的编译器中,这项声明译器中,这项声明包含在头文件包含在头文件reg51.hreg51.h中,编程时,可通过中,编程时,可通过预处理命令预处理命令#include#include,把这个头文件包含进去。下面通过案例介绍如何编程,把这个头文件包含进去。下面通过案例介绍如何编程对发光二极管输出控制。对发光二极管输出控制。
6、7 【例例5-1】制作流水灯,原理电路见制作流水灯,原理电路见图图5-2,8个发光二极管个发光二极管LED0LED7经限流电阻分别接至经限流电阻分别接至P1口的口的P1.0P1.7引脚上,阳极共同接高电平引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下的。编写程序来控制发光二极管由上至下的反复循环流水反复循环流水点亮点亮,每次点亮一,每次点亮一个发光二极管。个发光二极管。参考程序:参考程序:#include#include#include#include /包含包含移位函数移位函数_ _crolcrol_()_()的头文件的头文件#define#define ucharuchar u
7、nsigned char unsigned char#define#define uintuint unsigned unsigned intint void void delay(uintdelay(uint i)i)/延时函数延时函数 ucharuchar t;t;while(i-)while(i-)89图图5-2 单片机控制的流水灯单片机控制的流水灯for(t=0;t120;t+);void main()/主程序主程序P1=0 xfe;/向向P1口送出点亮数据口送出点亮数据 while(1)delay(500);/500为延时参数,可根据实际需要调整为延时参数,可根据实际需要调整P1=_
8、crol_(P1,1);/函数函数_crol_(P1,1)把把P1中的数据循环左移中的数据循环左移1位位 10程序说明:程序说明:(1 1)while(1)while(1)两种用法:两种用法:“while(1);”while(1);”:while(1)while(1)后有分号后有分号,是使程序停留在这指令上;,是使程序停留在这指令上;“while(1);”while(1);”:反复循环执行大括号内程序段,本例用法,即控反复循环执行大括号内程序段,本例用法,即控制流水灯反复循环显示。制流水灯反复循环显示。(2 2)C51C51函数库中的循环移位函数:函数库中的循环移位函数:循环移位函数包括:循环
9、移位函数包括:n 循环左移函数循环左移函数“_ _crolcrol_”_”n 循环右移函数循环右移函数“_ _crorcror_”_”。本例用循环左移本例用循环左移“_crol_(P1,1)”_crol_(P1,1)”,函数。括号第,函数。括号第1 1个参数为个参数为循环左移循环左移对象对象,即对,即对P1P1中的内容循环左移;第中的内容循环左移;第2 2个参数为个参数为左移位数左移位数,即左移,即左移1 1位。编位。编程中一定要把含有移位函数的头文件程中一定要把含有移位函数的头文件intrins.hintrins.h包含在内,例如第包含在内,例如第2 2行行“#include#include
10、”。1112在在【例例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯。基础上,编写控制发光二极管反复循环点亮的流水灯。【例例5-2】电路见电路见图图5-2,制作,制作由上至下由上至下再再由下至上由下至上反复循环点亮显示的反复循环点亮显示的流水灯,流水灯,3 3种方法种方法实现。实现。(1 1)数组的字节操作实现)数组的字节操作实现 建立建立1 1个字符型数组个字符型数组,将控制,将控制8个个LED显示的显示的8位数据作为位数据作为数组元素数组元素,依,依次送次送P1口。参考程序:口。参考程序:#include#define uchar unsigned charuchar tab=0
11、xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;/*前前8个数据为个数据为左移点亮左移点亮 数据数据,后,后8个为个为右移点亮右移点亮数据数据*/void delay()uchar i,j;for(i=0;i255;i+)for(j=0;j255;j+);void main()/主函数主函数uchar i;while(1)for(i=0;i”、“”,把送,把送P1口显示控制数据进行移位,口显示控制数据进行移位,从而实现发光二极管依次点亮。从而实现发光二极管
12、依次点亮。参考程序:参考程序:#include#define uchar unsigned char void delay()uchar i,j;for(i=0;i255;i+)for(j=0;j255;j+);void main()/主函数主函数uchar i,temp;while(1)14 temp=0 x01;/左移初值赋给左移初值赋给tempfor(i=0;i8;i+)P1=temp;/temp中的数据取反后送中的数据取反后送P1口口 delay();/延时延时 temp=temp1;/temp 中数据左移一位中数据左移一位 temp=0 x80;/赋右移初值给赋右移初值给temp f
13、or(i=0;i1;/temp 中数据右移一位中数据右移一位 15 程序说明:程序说明:注意使用移位运算符注意使用移位运算符“”、“”与使用循环左移函数与使用循环左移函数“_crol_”和循环右移函数和循环右移函数“_cror_”区别区别。左移移位运算。左移移位运算“”是将低位丢弃,高位补是将低位丢弃,高位补0。而循环左。而循环左移函数移函数“_crol_”是将移出的高位再补到低位,即循环移位;同理循环右是将移出的高位再补到低位,即循环移位;同理循环右移函数移函数“_cror_”是将移出的低位再补到高位。是将移出的低位再补到高位。(3)用循环左、右移位函数实现)用循环左、右移位函数实现 使用使
14、用C51提供的库函数,即循环左移提供的库函数,即循环左移n位函数和循环右移位函数和循环右移n位函数,控制位函数,控制发光二极管点亮。参考程序:发光二极管点亮。参考程序:#include#include /包含循环左、右移位函数的头文件包含循环左、右移位函数的头文件#define uchar unsigned char1617void delay()uchar i,j;for(i=0;i255;i+)for(j=0;j255;j+);void main()/主函数主函数uchar i,temp;while(1)temp=0 xfe;/初值为初值为11111110 for(i=0;i7;i+)P1
15、=temp;/temp中的点亮数据送中的点亮数据送P1口,控制点亮显示口,控制点亮显示 delay();/延时延时 temp=_crol_(temp,1);/temp 数据循环左移数据循环左移1位位 for(i=0;i7;i+)P1=temp;/temp中的数据送中的数据送P1口输出口输出 delay();/延时延时 temp=_cror_(temp,1);/temp中数据循环右移中数据循环右移1位位 18195.2 5.2 开关状态检测开关状态检测 读入读入I/O端口电平,即可检测开关处于端口电平,即可检测开关处于闭合状态闭合状态还是还是打开状态打开状态。5.2.1 开关检测案例开关检测案例
16、1 用用I/O端口来进行开关状态检测,开关一端接到端口来进行开关状态检测,开关一端接到I/O端口引脚上,并通过端口引脚上,并通过上拉电阻接上拉电阻接+5V上,开关另一端接地,当开关打开时,上,开关另一端接地,当开关打开时,I/O引脚为高电平,引脚为高电平,当开关闭合时,当开关闭合时,I/O引脚为低电平。引脚为低电平。2021图图5-3 开关、开关、LED发光二极管与发光二极管与P1口的连接口的连接 【例例5-3】如如图图5-3,单片机的,单片机的P1.4P1.7接接4个开关个开关S0S3,P1.0P1.3接接4个发光二极管个发光二极管LED0LED3。编程将编程将P1.4P1.7上的上的4个开
17、关状态反映在个开关状态反映在P1.0P1.3引脚控制的引脚控制的4个个发光二极管上,开关闭合,对应发光二极管点亮。发光二极管上,开关闭合,对应发光二极管点亮。例如例如P1.4脚上开关脚上开关S0状态,由状态,由P1.0脚上脚上LED0显示,显示,P1.6引脚上开关引脚上开关S2状态,由状态,由P1.2脚的脚的LED2显示。显示。22参考程序如下:参考程序如下:#include#include#define#define ucharuchar unsigned char unsigned charvoid delay()void delay()/延时函数延时函数 ucharuchar i,ji,
18、j;for(ifor(i=0;i255;i+)=0;i255;i+)for(jfor(j=0;j255;j+);=0;j4;4;/temp /temp内容右移内容右移4 4位,位,P1P1口口高高4 4位位移至移至低低4 4位位 2324P1=temp;P1=temp;/temp/temp中的数据送中的数据送P1P1口输出口输出delay(delay(););5.2.2 开关检测案例开关检测案例2 【例例5-4】如如图图5-4,P1.0和和P1.1引脚接有两只开关引脚接有两只开关S0和和S1,两引脚上的,两引脚上的高低电平高低电平共共4种组合种组合,4种组合分别点亮种组合分别点亮P2.0P2.
19、3引脚控制的引脚控制的4只只LED,即,即S0、S1均闭合,均闭合,LED0亮,其余灭;亮,其余灭;S1闭合、闭合、S0打开,打开,LED1亮,其余灭;亮,其余灭;S0闭合、闭合、S1打开,打开,LED2亮,其余灭;亮,其余灭;S0、S1均打开,均打开,LED3亮,其余灭。亮,其余灭。编程实现此功能。编程实现此功能。参考程序:参考程序:25图图5-4 开关检测指示器开关检测指示器2接口电路与仿真接口电路与仿真#include/包含头文件包含头文件reg51.h void main()/主函数主函数main()char state;do P1=0 xff;/P1口为输入口为输入 state=P1
20、;/读入读入P1口的状态,送入口的状态,送入state state=state&0 x03;/屏蔽屏蔽P1口的高口的高6位位 switch(state)/判判P1口低口低2位开关状态位开关状态 case 0:P2=0 x01;break;/P1.1、P1.0=00,点亮点亮P2.0脚脚LED case 1:P2=0 x02;break;/P1.1、P1.0=01,点亮点亮P2.1脚脚LED case 2:P2=0 x04;break;/P1.1、P1.0=10,点亮点亮P2.2脚脚LED case 3:P2=0 x08;break;/P1.1、P1.0=11,点亮点亮P2.3脚脚LED whi
21、le(1);26 程序段中用到循环结构控制语句程序段中用到循环结构控制语句do-while以及以及switch-case语句。语句。27285.3 单片机控制单片机控制LED数码管的显示数码管的显示5.3.1 LED数码管显示原理数码管显示原理 LED数码管:数码管:“8”字型,字型,7段段(不包括小数点)或(不包括小数点)或8段段(包括小数点),(包括小数点),每段对应一个发光二极管,共阳极和共阴极两种,见每段对应一个发光二极管,共阳极和共阴极两种,见图图5-5。共阳极:共阳极:数码管的阳极连接在一起,接数码管的阳极连接在一起,接+5V;共阴极:共阴极:数码管阴极连在一起接地。数码管阴极连在
22、一起接地。对于对于共阴极共阴极数码管,当某发光二极管阳极为高电平时,发光二极管点亮数码管,当某发光二极管阳极为高电平时,发光二极管点亮,相应段被显示。同样,相应段被显示。同样,共阳极共阳极数码管阳极连在一起,公共阳极接数码管阳极连在一起,公共阳极接+5V,当,当某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。29图图5-5 8段段LED数码管结构及外形数码管结构及外形 为使为使LED数码管显示不同字符,要把某些段点亮,就要为数码管各段提数码管显示不同字符,要把某些段点亮,就要为数码管各段提供一字节的二进制码,即供一
23、字节的二进制码,即字型码(也称段码)。字型码(也称段码)。习惯上以习惯上以“a”段对应字型段对应字型码字节的最低位。各字符码字节的最低位。各字符段码段码见表见表5-1。3031 如要在数码管显示某字符,只需将该字符字型码加到各段上即可。如要在数码管显示某字符,只需将该字符字型码加到各段上即可。例如某存储单元中的数为例如某存储单元中的数为“02H”02H”,想在共阳极数码管上显示想在共阳极数码管上显示“2”2”,需,需要把要把“2”2”的字型码的字型码“A4H”A4H”加到数码管各段。加到数码管各段。将欲显示字符的字型码作成一个表(数组),将欲显示字符的字型码作成一个表(数组),根据显示字符从表
24、中查找根据显示字符从表中查找到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共端接端接+5V+5V,此时在数码管上显示字符,此时在数码管上显示字符“2”2”。下面介绍单片机如何控制下面介绍单片机如何控制LEDLED数码管显示字符。数码管显示字符。32 【例例5-55-5】利用单片机控制一个利用单片机控制一个8 8段段LEDLED数码管先循环显示数码管先循环显示单个偶数:单个偶数:0 0、2 2、4 4、6 6、8 8,再显示单个奇数再显示单个奇数:1 1、3 3、5 5、7 7、9 9,如此反复循环显示。如此反复循环
25、显示。本例原理电路及仿真结果,见本例原理电路及仿真结果,见图图5-65-6。参考程序如下:参考程序如下:33图图5-6 控制数码管循环显示单个数字的电路及仿真控制数码管循环显示单个数字的电路及仿真#include reg51.h#include intrins.h#define uchar unsigned char#define uint unsigned int#define out P0uchar code seg=0 xc0,0 xa4,0 x99,0 x82,0 x80,0 xf9,0 xb0,0 x92,0 xf8,0 x90,0 x01;/共阳极段码表共阳极段码表void del
展开阅读全文