单片机原理及接口技术(C51编程)第5章-与显示器、开关、键盘接口设计课件.ppt
《单片机原理及接口技术(C51编程)第5章-与显示器、开关、键盘接口设计课件.ppt》由会员分享,可在线阅读,更多相关《单片机原理及接口技术(C51编程)第5章-与显示器、开关、键盘接口设计课件.ppt(180页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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口一半口一半。图图5-1发光二极管与单片机并行口的连接发光二极管与单片机并行口的连接5.1.2 I/O5.1.2 I/O端口的编程举例端口的编程举例 对对I/OI/O端口编程控制时,要对端口编程控制时,要对I/OI/O端口特殊功能寄存器声明,在端口特殊功能寄存器声明,在C51C51的编译的编译器中,这项声明器中,这项声明包
4、含在头文件包含在头文件reg51.hreg51.h中,编程时,可通过中,编程时,可通过预处理命令预处理命令#include#include,把这个头文件包含进去。下面通过案例介绍如何编程,把这个头文件包含进去。下面通过案例介绍如何编程对发光二极管输出控制。对发光二极管输出控制。6 【例例5-1】制作流水灯,原理电路见制作流水灯,原理电路见图图5-2,8个发光二极管个发光二极管LED0LED7经限流电阻分别接至经限流电阻分别接至P1口的口的P1.0P1.7引脚上,阳极共同接高电平。引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个编写程序来控制发光二极管由
5、上至下的反复循环流水点亮,每次点亮一个发光二极管。发光二极管。参考程序:参考程序:#include#include#include#include/包含包含移位函数移位函数_crol_()_crol_()的头文件的头文件#define uchar unsigned char#define uchar unsigned char#define uint unsigned int#define uint unsigned int void delay(uint i)void delay(uint i)/延时函数延时函数 uchar t;uchar t;while(i-)while(i-)78图图5
6、-2单片机控制的流水灯单片机控制的流水灯程序说明:程序说明:(1 1)while(1)while(1)两种用法:两种用法:“while(1);”while(1);”:while(1)while(1)后有分号,是使程序停留在这指令上;后有分号,是使程序停留在这指令上;“while(1);”while(1);”:反复循环执行大括号内程序段,本例用法,即控反复循环执行大括号内程序段,本例用法,即控制流水灯反复循环显示。制流水灯反复循环显示。(2 2)C51C51函数库中的循环移位函数:循环移位函数包括:函数库中的循环移位函数:循环移位函数包括:n 循环左移函数循环左移函数“_crol_”_crol_
7、”n 循环右移函数循环右移函数“_cror_”_cror_”。本例用循环左移本例用循环左移“_crol_(P1,1)”_crol_(P1,1)”,函数。括号第,函数。括号第1 1个参数为个参数为循环左移循环左移对象对象,即对,即对P1P1中的内容循环左移;第中的内容循环左移;第2 2个参数为个参数为左移位数左移位数,即左移,即左移1 1位。编位。编程中一定要把含有移位函数的头文件程中一定要把含有移位函数的头文件intrins.hintrins.h包含在内,例如第包含在内,例如第2 2行行“#include”#include”。10在在【例例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯
8、。基础上,编写控制发光二极管反复循环点亮的流水灯。【例例5-2】电路见电路见图图5-2,制作,制作由上至下由上至下再再由下至上由下至上反复循环点亮显示的反复循环点亮显示的流水灯,流水灯,3 3种方法种方法实现。实现。(1 1)数组的字节操作实现)数组的字节操作实现建立建立1 1个字符型数组个字符型数组,将控制,将控制8个个LED显示的显示的8位数据作为位数据作为数组元素数组元素,依,依次送次送P1口。参考程序:口。参考程序:#include#defineucharunsignedcharuchartab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x
9、7f,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;/*前前8个数据为个数据为左移点亮左移点亮数据数据,后,后8个为个为右移点亮数据右移点亮数据*/(2)移位运算符实现)移位运算符实现使用使用移位运算符移位运算符“”、“”,把送,把送P1口显示控制数据进行移位,口显示控制数据进行移位,从而实现发光二极管依次点亮。从而实现发光二极管依次点亮。参考程序:参考程序:#include#defineucharunsignedcharvoiddelay()uchari,j;for(i=0;i255;i+)for(j=0;j”、“”与使用循环左移函数与使用循
10、环左移函数“_crol_”和循环右移函数和循环右移函数“_cror_”区别区别。左移移位运算。左移移位运算“”是将低位丢弃,高位补是将低位丢弃,高位补0。而循。而循环左移函数环左移函数“_crol_”是将移出的高位再补到低位,即循环移位;同理循是将移出的高位再补到低位,即循环移位;同理循环右移函数环右移函数“_cror_”是将移出的低位再补到高位。是将移出的低位再补到高位。(3)用循环左、右移位函数实现)用循环左、右移位函数实现使用使用C51提供的库函数,即循环左移提供的库函数,即循环左移n位函数和循环右移位函数和循环右移n位函数,控制位函数,控制发光二极管点亮。参考程序:发光二极管点亮。参考
11、程序:#include#include/包含循环左、右移位函数的头文件包含循环左、右移位函数的头文件#defineucharunsignedchar15voiddelay()uchari,j;for(i=0;i255;i+)for(j=0;j255;j+);voidmain()/主函数主函数uchari,temp;while(1)temp=0 xfe;/初值为初值为for(i=0;i7;i+)5.2 5.2 开关状态检测开关状态检测读入读入I/O端口电平,即可检测开关处于端口电平,即可检测开关处于闭合状态闭合状态还是还是打开状态打开状态。5.2.1开关检测案例开关检测案例1用用I/O端口来进行
12、开关状态检测,开关一端接到端口来进行开关状态检测,开关一端接到I/O端口引脚上,并通过上端口引脚上,并通过上拉电阻接拉电阻接+5V上,开关另一端接地,当开关打开时,上,开关另一端接地,当开关打开时,I/O引脚为高电平,当开引脚为高电平,当开关闭合时,关闭合时,I/O引脚为低电平。引脚为低电平。18【例例5-3】如如图图5-3,单片机的,单片机的P1.4P1.7接接4个开关个开关S0S3,P1.0P1.3接接4个发光二极管个发光二极管LED0LED3。编程将编程将P1.4P1.7上的上的4个开关状态反映在个开关状态反映在P1.0P1.3引脚控制的引脚控制的4个个发光二极管上,开关闭合,对应发光二
13、极管点亮。例如发光二极管上,开关闭合,对应发光二极管点亮。例如P1.4引脚上开关引脚上开关S0状态,由状态,由P1.0脚上脚上LED0显示,显示,P1.6引脚上开关引脚上开关S2状态,由状态,由P1.2脚的脚的LED2显示。显示。1920图图5-3开关、开关、LED发光二极管与发光二极管与P1口的连接口的连接参考程序如下:参考程序如下:#include#include#define uchar unsigned char#define uchar unsigned charvoid delay()void delay()/延时函数延时函数 uchar i,j;uchar i,j;for(i=0
14、;i255;i+)for(i=0;i255;i+)for(j=0;j255;j+);for(j=0;j4;temp=temp4;/temp /temp内容右移内容右移4 4位,位,P1P1口高口高4 4位移至低位移至低4 4位位 21P1=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引脚
15、控制的引脚控制的4只只LED,即,即S0、S1均闭合,均闭合,LED0亮,其余灭;亮,其余灭;S1闭合、闭合、S0打开,打开,LED1亮,其余灭;亮,其余灭;S0闭合、闭合、S1打开,打开,LED2亮,其余灭;亮,其余灭;S0、S1均打开,均打开,LED3亮,其余灭。编程亮,其余灭。编程实现此功能。实现此功能。参考程序:参考程序:#include/包含头文件包含头文件reg51.h void main()/主函数主函数main()char state;do P1=0 xff;/P1口为输入口为输入 state=P1;/读入读入P1口的状态,送入口的状态,送入state state=state&
16、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 while(1);24程序段中用到循环结构控制语句程序段中用到循环结构控制语句do-w
17、hiledo-while以及以及switch-caseswitch-case语句。语句。5.3单片机控制单片机控制LED数码管的显示数码管的显示5.3.1LED数码管显示原理数码管显示原理LED数码管:数码管:“8”字型,字型,7段段(不包括小数点)或(不包括小数点)或8段段(包括小数点),(包括小数点),每段对应一个发光二极管,共阳极和共阴极两种,见每段对应一个发光二极管,共阳极和共阴极两种,见图图5-5。共阳极共阳极数码管数码管的阳极连接在一起,接的阳极连接在一起,接+5V;共阴极共阴极数码管阴极连在一起接地。数码管阴极连在一起接地。对于对于共阴极共阴极数码管,当某发光二极管阳极为高电平时
18、,发光二极管点亮,数码管,当某发光二极管阳极为高电平时,发光二极管点亮,相应段被显示。同样,相应段被显示。同样,共阳极共阳极数码管阳极连在一起,公共阳极接数码管阳极连在一起,公共阳极接+5V,当某,当某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示。26图图5-58段段LED数码管结构及外形数码管结构及外形28 如要在数码管显示某字符,只需将该字符字型码加到各段上即可。如要在数码管显示某字符,只需将该字符字型码加到各段上即可。例如某存储单元中的数为例如某存储单元中的数为“02H”02H”,想在共阳极数码管上显示想在共阳
19、极数码管上显示“2”2”,需,需要把要把“2”2”的字型码的字型码“A4H”A4H”加到数码管各段。加到数码管各段。将欲显示字符的字型码作成一将欲显示字符的字型码作成一个表(数组),个表(数组),根据显示字符从表中查找到相应字型码,然后把该字型码输根据显示字符从表中查找到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共端接出数码管各个段上,同时数码管的公共端接+5V+5V,此时在数码管上显示字符,此时在数码管上显示字符“2”2”。下面介绍单片机如何控制下面介绍单片机如何控制LEDLED数码管显示字符。数码管显示字符。【例例5-55-5】利用单片机控制一个利用单片机控制一个8 8段
20、段LEDLED数码管先循环显示数码管先循环显示单个偶数:单个偶数:0 0、2 2、4 4、6 6、8 8,再显示单个奇数再显示单个奇数:1 1、3 3、5 5、7 7、9 9,如此反复循环显示。如此反复循环显示。本例原理电路及仿真结果,见本例原理电路及仿真结果,见图图5-65-6。参考程序如下:参考程序如下:#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineoutP0ucharcodeseg=0 xc0,0 xa4,0 x99,0 x82,0 x80,0 xf9,0 xb0,
21、0 x92,0 xf8,0 x90,0 x01;/共阳极段码表共阳极段码表voiddelayms(uint);voidmain(void)uchari;while(1)out=segi;delayms(900);i+;if(segi=0 x01)i=0;/如段码为如段码为0 x01,表明一个循环显示已结束,表明一个循环显示已结束31voiddelayms(uintj)/延时函数延时函数uchari;for(;j0;j-)i=250;while(-i);i=249;while(-i);说明:说明:语句语句“if(segi=0 x01)i=0;”含义:如果欲送出的数组元素含义:如果欲送出的数组元素
22、为为0 x01(数字(数字“9”段码段码0 x90的下一个元素,即结束码),表明一个循环的下一个元素,即结束码),表明一个循环显示已结束,则显示已结束,则i=0,则重新开始循环显示,从段码数组表的第一个则重新开始循环显示,从段码数组表的第一个32元素元素seg0,即段码,即段码0 xc0(数字(数字0)重新开始显示。)重新开始显示。5.3.2 LED5.3.2 LED数码管的数码管的静态显示静态显示与与动态显示动态显示两种显示方式:两种显示方式:静态显示静态显示和和动态显示动态显示。1.静态显示方式静态显示方式无论多少位无论多少位LED数码管,都数码管,都同时处于显示状态同时处于显示状态。多位
23、多位LED数码管工作于静态显示方式时,各位共阴极(或共阳极)连接在数码管工作于静态显示方式时,各位共阴极(或共阳极)连接在一起并接地(或接一起并接地(或接+5V);每位数码管段码线();每位数码管段码线(adp)分别与一个)分别与一个8位位I/O口锁存器输出相连。如果送往各个口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,数码管所显示字符的段码一经确定,则相应则相应I/O口锁存器口锁存器锁存的段码输出将维持不变,直到送入下一个显示字符段码。静态显示方锁存的段码输出将维持不变,直到送入下一个显示字符段码。静态显示方式式显示无闪烁,亮度较高显示无闪烁,亮度较高,软件控制较易。,
24、软件控制较易。图图5-7为为4位位LED数码管静态显示电路,各数码管可独立显示,只要向数码管静态显示电路,各数码管可独立显示,只要向控制各位控制各位I/O口锁存器送相应显示段码,该位就能保持相应的显示字符。口锁存器送相应显示段码,该位就能保持相应的显示字符。这样在同一时间,每一位显示的字符可各不相同。静态显示方式这样在同一时间,每一位显示的字符可各不相同。静态显示方式占用占用I/OI/O口端口线较多口端口线较多。图。图5-7电路,电路,要占用要占用4个个8位位I/O口(或锁存器)。口(或锁存器)。如数码如数码管数目增多,则需增加管数目增多,则需增加I/O口数目。口数目。34图图5-74位位LE
25、D静态显示的示意图静态显示的示意图【例例5-6】单片机控制单片机控制2只数码管,只数码管,静态显示静态显示2个数字个数字“27”。原理电原理电路见路见图图5-8。单片机用单片机用P0口与口与P1口口,分别控制加到两个数码管,分别控制加到两个数码管DS0与与DS1的的段码段码,而共阳极数码管而共阳极数码管DS0与与DS1的公共端(公共阳极端)直接接至的公共端(公共阳极端)直接接至+5V,因,因此数码管此数码管DS0与与DS1始终处于导通状态。利用始终处于导通状态。利用P0口与口与P1口带有的锁存功口带有的锁存功能,能,只需向单片机只需向单片机P0口与口与P1口分别写入相应的显示字符口分别写入相应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 接口 技术 C51 编程 显示器 开关 键盘 设计 课件
限制150内