第5章-与显示器、开关、键盘接口设计-.ppt
《第5章-与显示器、开关、键盘接口设计-.ppt》由会员分享,可在线阅读,更多相关《第5章-与显示器、开关、键盘接口设计-.ppt(202页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章单片机的开关检测、键盘输入单片机的开关检测、键盘输入与显示的接口设计与显示的接口设计 1 单片机系统显示及开关检测、键盘输入是其基本功能。本章介绍单片单片机系统显示及开关检测、键盘输入是其基本功能。本章介绍单片机与显示器件、开关及键盘的接口设计与软件编程。机与显示器件、开关及键盘的接口设计与软件编程。5.1单片机控制发光二极管显示单片机控制发光二极管显示 发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。大部分发光二极管大部分发光二极管工作电流工作电流15mA之间,其之间,其内阻为内阻为20100。电流越。电流越大
2、,亮度也越高。大,亮度也越高。为保证发光二极管正常工作,同时减少功耗,为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要限流电阻选择十分重要,若供电电压为若供电电压为+5V,则,则限流电阻可选限流电阻可选13k。25.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口一半口一半。3图图5-1发光二极管与单片机并行口的连接发光二极管与单片机并行口的连接4 当当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等。等。565.1.2 I/O5.1.2 I/O端口的编程举例端口的编程举例 对对I/OI/O端口编程控制时,要对端口编程控制时,要对I/OI/O端口特殊功能寄存器端口特殊功能寄存器声明声明,在,在C51C51的编译的编译器中,这项声明器中,这项声明包含在头文件包含在头文件reg51.hreg51.h中,编程时,可通过中,编程时,可通过预处理命令预处理命令#include#include,把这个头文件包含进去。下面通过案例介绍如何编程,把这个头文件包含进去。下面通过案例介绍如何编程对发光二极管输出控制。对发光二极管输出控制。7 【例例
6、5-1】制作流水灯,原理电路见制作流水灯,原理电路见图图5-2,8个发光二极管个发光二极管LED0LED7经限流电阻分别接至经限流电阻分别接至P1口的口的P1.0P1.7引脚上,阳极共同接高电平。引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下的编写程序来控制发光二极管由上至下的反复循环流水反复循环流水点亮点亮,每次点亮一个,每次点亮一个发光二极管。发光二极管。参考程序:参考程序:#include#include#include#include /包含包含移位函数移位函数_ _crolcrol_()_()的头文件的头文件#define#define ucharuchar unsign
7、ed 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+);voidmain()/主程序主程序P1=0 xfe;/向向P1口送出点亮数据口送出点亮数据 while(1)delay(500);/500为延时参数,可根据实际需要调整为延时参数,可根据实际需要调整P1=_crol_(P
8、1,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”。11在在【
10、例例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯。基础上,编写控制发光二极管反复循环点亮的流水灯。【例例5-2】电路见电路见图图5-2,制作,制作由上至下由上至下再再由下至上由下至上反复循环点亮显示的反复循环点亮显示的流水灯,流水灯,3 3种方法种方法实现。实现。(1 1)数组的字节操作实现)数组的字节操作实现 建立建立1 1个字符型数组个字符型数组,将控制,将控制8个个LED显示的显示的8位数据作为位数据作为数组元素数组元素,依次送依次送P1口。参考程序:口。参考程序:#include#defineucharunsignedcharuchartab=0 xfe,0 xfd,0 xf
11、b,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个为个为右移点亮右移点亮数据数据*/12voiddelay()uchari,j;for(i=0;i255;i+)for(j=0;j255;j+);voidmain()/主函数主函数uchari;while(1)for(i=0;i”、“”,把送,把送P1口显示控制数据进行移位,口显示控制数据进行移位,从而实现发光二极管依次点亮。从而实现发光二极管依次点亮。参考程序:参考程序:#
12、include#defineucharunsignedcharvoiddelay()uchari,j;for(i=0;i255;i+)for(j=0;j255;j+);voidmain()/主函数主函数uchari,temp;while(1)14temp=0 x01;/左移初值赋给左移初值赋给tempfor(i=0;i8;i+)P1=temp;/temp中的数据取反后送中的数据取反后送P1口口 delay();/延时延时 temp=temp1;/temp中数据左移一位中数据左移一位 temp=0 x80;/赋右移初值给赋右移初值给tempfor(i=0;i1;/temp中数据右移一位中数据右移
13、一位 15 程序说明:程序说明:注意使用移位运算符注意使用移位运算符“”、“”与使用循环左移与使用循环左移函数函数“_crol_”和循环右移函数和循环右移函数“_cror_”区别区别。左移移位运算。左移移位运算“”是将低位丢弃,高位补是将低位丢弃,高位补0。而。而循环左移函数循环左移函数“_crol_”是将移出的高位再补到低位,即循环移位;同理是将移出的高位再补到低位,即循环移位;同理循环右移函数循环右移函数“_cror_”是将移出的低位再补到高位。是将移出的低位再补到高位。(3)用循环左、右移位函数实现)用循环左、右移位函数实现 使用使用C51提供的库函数,即循环左移提供的库函数,即循环左移
14、n位函数和循环右移位函数和循环右移n位函数,控位函数,控制发光二极管点亮。参考程序:制发光二极管点亮。参考程序:#include#include/包含循环左、右移位函数的头文件包含循环左、右移位函数的头文件#defineucharunsignedchar16voiddelay()uchari,j;for(i=0;i255;i+)for(j=0;j255;j+);voidmain()/主函数主函数uchari,temp;while(1)temp=0 xfe;/初值为初值为11111110for(i=0;i7;i+)17P1=temp;/temp中的点亮数据送中的点亮数据送P1口,控制点亮显示口,
15、控制点亮显示 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开关检测案例开关检测案例1 用用I/O端口来进行开关状态检测,开关一端接到端口来进行开关状态检测,开关
16、一端接到I/O端口引脚上,并通端口引脚上,并通过上拉电阻接过上拉电阻接+5V上,开关另一端接地,当开关打开时,上,开关另一端接地,当开关打开时,I/O引脚为高电平,引脚为高电平,当开关闭合时,当开关闭合时,I/O引脚为低电平。引脚为低电平。20图图5-3开关、开关、LED发光二极管与发光二极管与P1口的连接口的连接21【例例5-3】如如图图5-3,单片机的,单片机的P1.4P1.7接接4个开关个开关S0S3,P1.0P1.3接接4个发光二极管个发光二极管LED0LED3。编程将编程将P1.4P1.7上的上的4个开关状态个开关状态反映在反映在P1.0P1.3引脚控制的引脚控制的4个发光二极管上,
17、开关闭合,对应发光二极管点亮。个发光二极管上,开关闭合,对应发光二极管点亮。例如例如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,j;for(ifor(i=0;i255;i+)=0;i255;i+)for(jfo
18、r(j=0;j255;j+);=0;j4;4;/temp /temp内容右移内容右移4 4位,位,P1P1口口高高4 4位位移至移至低低4 4位位 23P1=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.3引脚控制的引脚控制的4只只LED,即,即S0、S1均闭合,均闭合,LED0亮,其余灭;亮
19、,其余灭;S1闭合、闭合、S0打开,打开,LED1亮,其余灭;亮,其余灭;S0闭合、闭合、S1打开,打开,LED2亮,其余灭;亮,其余灭;S0、S1均打开,均打开,LED3亮,其余灭。编程亮,其余灭。编程实现此功能。实现此功能。参考程序:参考程序:2425图图5-4开关检测指示器开关检测指示器2接口电路与仿真接口电路与仿真#include/包含头文件包含头文件reg51.h void main()/主函数主函数main()char state;do P1=0 xff;/P1口为输入口为输入 state=P1;/读入读入P1口的状态,送入口的状态,送入state state=state&0 x0
20、3;/屏蔽屏蔽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 while(1);26程序段中用到循环结构控制语句程序段中用到循环结构控制语句do-while
21、以及以及switch-case语句。语句。275.3单片机控制单片机控制LED数码管的显示数码管的显示5.3.1LED数码管显示原理数码管显示原理LED数码管:数码管:“8”字型,字型,7段段(不包括小数点)或(不包括小数点)或8段段(包括小数点),(包括小数点),每段对应一个发光二极管,共阳极和共阴极两种,见每段对应一个发光二极管,共阳极和共阴极两种,见图图5-5。共阳极:共阳极:数码管的阳极连接在一起,接数码管的阳极连接在一起,接+5V;共阴极:共阴极:数码管阴极连在一起接地。数码管阴极连在一起接地。对于对于共阴极共阴极数码管,当某发光二极管阳极为高电平时,发光二极管点数码管,当某发光二极
22、管阳极为高电平时,发光二极管点亮,相应段被显示。同样,亮,相应段被显示。同样,共阳极共阳极数码管阳极连在一起,公共阳极接数码管阳极连在一起,公共阳极接+5V,当某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。当某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。2829图图5-58段段LED数码管结构及外形数码管结构及外形 为为使使LED数数码码管管显显示示不不同同字字符符,要要把把某某些些段段点点亮亮,就就要要为为数数码码管管各各段段提提供供一一字字节节的的二二进进制制码码,即即字字型型码码(也也称称段段码码)。习习惯惯上上以以“a”段段对对应应字字型型码字节的最
23、低位。各字符码字节的最低位。各字符段码段码见表见表5-1。3031 如要在数码管显示某字符,只需将该字符字型码加到各段上即可。如要在数码管显示某字符,只需将该字符字型码加到各段上即可。例如某存储单元中的数为例如某存储单元中的数为“02H02H”,想在共阳极数码管上显示想在共阳极数码管上显示“2 2”,需,需要把要把“2 2”的字型码的字型码“A4HA4H”加到数码管各段。加到数码管各段。将欲显示字符的字型码作成一个表(数组),将欲显示字符的字型码作成一个表(数组),根据显示字符从表中查找根据显示字符从表中查找到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共端到相应字型码,然后把
24、该字型码输出数码管各个段上,同时数码管的公共端接接+5V+5V,此时在数码管上显示字符,此时在数码管上显示字符“2 2”。下面介绍单片机如何控制下面介绍单片机如何控制LEDLED数码管显示字符。数码管显示字符。【例例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,如此反复循环显示。如此反复循环显示。本例原理电路及仿真结果,见本例原理电路及仿真结果,见图图5-65-6。参考程序如下:参考程序如下:32图图5-6控
25、制数码管循环显示单个数字的电路及仿真控制数码管循环显示单个数字的电路及仿真33#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineoutP0ucharcodeseg=0 xc0,0 xa4,0 x99,0 x82,0 x80,0 xf9,0 xb0,0 x92,0 xf8,0 x90,0 x01;/共阳极段码表共阳极段码表voiddelayms(uint);voidmain(void)uchari;while(1)out=segi;delayms(900);i+;if(segi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 显示器 开关 键盘 接口 设计
限制150内