第5章单片机显示器、开关、键盘接口设计_第1页
第5章单片机显示器、开关、键盘接口设计_第2页
第5章单片机显示器、开关、键盘接口设计_第3页
第5章单片机显示器、开关、键盘接口设计_第4页
第5章单片机显示器、开关、键盘接口设计_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

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

文档简介

1、 第第5 5章章 单片机与显示器件及开关、单片机与显示器件及开关、键盘的接口设计键盘的接口设计2022-4-29 单片机系统显示及开关检测、键盘输入是其基本功能。单片机系统显示及开关检测、键盘输入是其基本功能。本本章介绍单片机与显示器件、开关及键盘的接口设计与软件编程章介绍单片机与显示器件、开关及键盘的接口设计与软件编程。5.1 5.1 单片机控制发光二极管显示单片机控制发光二极管显示u 发光二极管常用来发光二极管常用来指示系统工作状态,制作节日彩灯、广告指示系统工作状态,制作节日彩灯、广告牌匾等。牌匾等。u 大部分发光二极管工作电流大部分发光二极管工作电流15mA15mA之之间,其内阻为间,

2、其内阻为2010020100。电流越大,亮度也越高。电流越大,亮度也越高。u为保证发光二极管正常工作,同时为保证发光二极管正常工作,同时减少功耗减少功耗,限流电阻限流电阻选择十选择十分重要,若供电电压为分重要,若供电电压为+5V+5V,则,则限流电阻可选限流电阻可选13k13k。2022-4-295.1.1 5.1.1 单片机与发光二极管的连接单片机与发光二极管的连接uP0P0口作口作通用通用I/OI/O用用,由于,由于漏极开路漏极开路,需外接上拉电阻需外接上拉电阻。而。而P1P1P3P3口内部有口内部有30k30k左右上拉电阻左右上拉电阻( (第第2 2章已介章已介绍绍) )。uP1P1P3

3、P3口如何与口如何与LEDLED发光二极管驱动连接发光二极管驱动连接? ?u单片机并行端口单片机并行端口P1P1P3P3可以可以直接直接驱动发光二极管,电驱动发光二极管,电路见路见图图5-15-1。u与与P1P1、P2P2、P3P3口相比,口相比,P0P0口每位可驱动口每位可驱动8 8个个LS TTLLS TTL输输入入,而,而P1P1P3P3口每一位驱动能力,口每一位驱动能力,只有只有P0P0口一半口一半。2022-4-29u当当P0P0口某位为口某位为高电平高电平时,可提供时,可提供400400 A A的的拉电流拉电流, ,当当P0P0口某位为口某位为低电平低电平(0.45V0.45V)时

4、,可提供)时,可提供3.2mA3.2mA的的灌电流灌电流; ;u而而P1P1P3P3口口内有内有30k30k左右左右上拉电阻上拉电阻,如高电平输出,则从,如高电平输出,则从P1P1、P2P2和和P3P3口输出的口输出的拉电流拉电流I Id d仅几百仅几百A A,驱动能力较弱,亮度较差,驱动能力较弱,亮度较差,见图,见图5-15-1(a a)。)。u如端口引脚为低电平,能使如端口引脚为低电平,能使灌电流灌电流IdId从单片机外部流入内部,从单片机外部流入内部,则将大大增加流过的灌电流值,见图则将大大增加流过的灌电流值,见图5-15-1(b b)。)。uAT89S51AT89S51任一端口要想获得

5、较大的驱动能力,要用低电平输出任一端口要想获得较大的驱动能力,要用低电平输出。u如一定要高电平驱动,可在单片机与发光二极管间如一定要高电平驱动,可在单片机与发光二极管间加驱动电路加驱动电路,如,如74LS0474LS04、74LS24474LS244等。等。2022-4-29图图5-1 发光二极管与单片机并行口的连接发光二极管与单片机并行口的连接2022-4-295.1.2 I/O5.1.2 I/O端口的端口的C51C51编程控制编程控制u P0P3P0P3口是单片机与外设进行信息交换的桥梁口是单片机与外设进行信息交换的桥梁,可通过读取可通过读取I/OI/O口状态了解外设状态,也可向口状态了解

6、外设状态,也可向I/OI/O端口送出命令或数据控端口送出命令或数据控制外设。制外设。u 对对I/OI/O端口编程控制时端口编程控制时,要对,要对I/OI/O端口特殊功能寄存器声明端口特殊功能寄存器声明,在,在C51C51的编译器中,这项声明的编译器中,这项声明包含在头文件包含在头文件reg51.hreg51.h中,编中,编程时,可通过程时,可通过预处理命令预处理命令#include#include,把这个头文,把这个头文件包含进去。件包含进去。2022-4-29介绍如何编程对发光二极管输出控制。介绍如何编程对发光二极管输出控制。 【例例5-15-1】 制作流水灯制作流水灯,原理电路见,原理电路

7、见图图5-25-2,8 8个发光二极管个发光二极管LED0LED0LED7LED7经限流电阻分别接至经限流电阻分别接至P1P1口的口的P1.0P1.0P1.7P1.7引脚上,引脚上,阳极共同接高电平。编写程序来控制发光二极管由上至下的阳极共同接高电平。编写程序来控制发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。反复循环流水点亮,每次点亮一个发光二极管。参考程序:参考程序:#include #include #include #include /包含移位函数包含移位函数_crol_( )_crol_( )的头文件的头文件#define uchar unsigned char#de

8、fine uchar unsigned char #define uint unsigned int#define uint unsigned int void delay(uint i)void delay(uint i) /延时函数延时函数 uchar t;uchar t; 2022-4-29图图5-2 单片机控制的流水灯单片机控制的流水灯2022-4-29while (i-)while (i-) for(t=0;t120;t+)for(t=0;t120;t+); ; void main( )void main( )/主程序主程序 P1=0 xfe;P1=0 xfe;/向向P1P1口送出点

9、亮数据口送出点亮数据 while (1)while (1) delay( 500 ); delay( 500 ); /500 /500为延时参数,可根据实际需要调整为延时参数,可根据实际需要调整P1P1=_crol_(=_crol_(P1,1) ; / P1,1) ; / 函数函数_crol_(P1,1)_crol_(P1,1)把把P1P1中的数据中的数据循环左移循环左移1 1位位 2022-4-29程序说明:程序说明: (1 1)while(1)while(1) 两种用法:两种用法:“while(1);”while(1);”: while(1)while(1)后有分号,是使程序停留在这指令上

10、;后有分号,是使程序停留在这指令上;“while(1) ;”while(1) ;”:反复循环执行大括号内程序段,本例用法反复循环执行大括号内程序段,本例用法,即控制流水灯反复循环显示即控制流水灯反复循环显示。 (2 2)C51C51函数库中的函数库中的循环移位函数循环移位函数:循环移位函数包括循环左:循环移位函数包括循环左移函数移函数“_crol_crol(变量名,移动位数)变量名,移动位数)”和循环右移函数和循环右移函数“_cror_”_cror_”。本例用循环左移。本例用循环左移 “ “_crol_(P1,1)”_crol_(P1,1)”,函数。括号第,函数。括号第1 1个参数为循环左移对

11、象,即对个参数为循环左移对象,即对P1P1中的内容循环左移;第中的内容循环左移;第2 2个参数为个参数为左移位数,即左移左移位数,即左移1 1位。位。编程中一定要把含有移位函数的头文件编程中一定要把含有移位函数的头文件intrins.hintrins.h包含在内。包含在内。例如第例如第2 2行行“#include ”#include ”。2022-4-29【例例5-25-2】电路见电路见图图5-25-2,制作,制作由上至下由上至下再再由下至上由下至上反复反复循环点亮显示的流水灯,循环点亮显示的流水灯,3 3种方法种方法实现。实现。(1 1)数组的字节操作实现)数组的字节操作实现 建立建立1 1

12、个字符型数组个字符型数组,将控制,将控制8 8个个LEDLED显示的显示的8 8位数据位数据作为作为数组元素数组元素,依次送,依次送P1P1口。参考程序:口。参考程序:#include #include #define uchar unsigned char#define uchar unsigned charuchar tab = uchar tab = 0 xfe , 0 xfd , 0 xfb , 0 xf7 , 0 xef , 0 xdf , 0 xbf , 0 xfe , 0 xfd , 0 xfb , 0 xf7 , 0 xef , 0 xdf , 0 xbf , 0 x7f ,0

13、 x7f , 0 x7f , 0 xbf , 0 xdf , 0 xef , 0 xf7 , 0 xfb , 0 xfd , 0 xfe0 x7f , 0 xbf , 0 xdf , 0 xef , 0 xf7 , 0 xfb , 0 xfd , 0 xfe ; ; / /* *前前8 8个数据为左移点亮数据,后个数据为左移点亮数据,后8 8个为右移点亮数据个为右移点亮数据* */ /2022-4-29void delay( )void delay( ) uchar i,j;uchar i,j; for(i=0; i255; i+)for(i=0; i255; i+) for(j=0; j25

14、5; j+) for(j=0; j255; j+); ; void main( )void main( )/主函数主函数 uchar i;uchar i; while (1)while (1) for(i=0;i16; i+)for(i=0;i”、“”,把送,把送P1P1口显示控制数口显示控制数据进行移位,从而实现发光二极管依次点亮。据进行移位,从而实现发光二极管依次点亮。参考程序:参考程序:#include #include #define uchar unsigned char#define uchar unsigned char void delay( )void delay( ) uc

15、har i,j;uchar i,j; for(i=0; i255; i+)for(i=0; i255; i+) for(j=0; j255; j+); for(j=0; j255; j+); void main( )void main( )/主函数主函数 uchar i,temp;uchar i,temp; 2022-4-29while (1)while (1) temp=0 x01temp=0 x01; ;/左移初值赋给左移初值赋给temptempfor(i=0; i8; i+)for(i=0; i8; i+) P1=temp; P1=temp;/ temp/ temp中的数据取反后送中的数

16、据取反后送P1P1口口 delay( );delay( );/ / 延时延时 temp=temp1; temp=temp1; / temp / temp 中数据左移一位中数据左移一位 temp=0 x80; temp=0 x80; / / 赋右移初值给赋右移初值给temptemp for(i=0; i8; i+)for(i=0; i1; temp=temp1; / temp / temp 中数据右移一位中数据右移一位 2022-4-29程序说明:程序说明: u注意使用移位运算符注意使用移位运算符“”、“”与使用循环左移函数与使用循环左移函数“_crol_”_crol_”和循环右移函数和循环右移

17、函数“_cror_”_cror_” 区别。区别。u左移移位运算左移移位运算“”是将低位丢弃,高位补是将低位丢弃,高位补0 0。u而循环左移函数而循环左移函数“_crol_” _crol_” 是将移出的高位再补到低位,是将移出的高位再补到低位,即即循环移位循环移位;同理循环右移函数;同理循环右移函数“_cror_” _cror_” 是将移出的低是将移出的低位再补到高位。位再补到高位。(3 3)用循环左、右移位函数实现)用循环左、右移位函数实现 使用使用C51C51提供的库函数,即循环左移提供的库函数,即循环左移n n位函数和循环右移位函数和循环右移n n位函数,控制发光二极管点亮。参考程序:位函

18、数,控制发光二极管点亮。参考程序:2022-4-29#include #include #include #include /包含循环左、右移位函数的头文件包含循环左、右移位函数的头文件#define uchar unsigned char#define uchar unsigned charvoid delay( )void delay( ) uchar i,j;uchar i,j; for(i=0; i255; i+)for(i=0; i255; i+) for(j=0; j255; j+); for(j=0; j255; j+); void main( )void main( )/ /

19、主函数主函数 uchar i,temp;uchar i,temp; while (1)while (1) temp=0 xfe; temp=0 xfe; / / 初值为初值为0 x111111100 x11111110 for(i=0; i7; i+)for(i=0; i7; i+) 2022-4-29 P1=temp; P1=temp;/ temp/ temp中的点亮数据送中的点亮数据送P1P1口,控制点亮显示口,控制点亮显示 delay( ); delay( ); / / 延时延时 temp=_crol_( temp,1)temp=_crol_( temp,1) ;/ ;/ 执行左移,执行

20、左移,temp temp 数据循环左移数据循环左移1 1位位 for(i=0; i7; i+) for(i=0; i7; i+) P1=temp;P1=temp;/ temp/ temp中的数据送中的数据送P1P1口输出口输出 delay( ); delay( ); / / 延时延时 temp=_cror_( temp,1) ;temp=_cror_( temp,1) ;/temp/temp中数据循环右移中数据循环右移1 1位位 2022-4-295.2 5.2 开关状态检测开关状态检测 读入读入I/OI/O端口电平端口电平,即可检测开关处于,即可检测开关处于闭合状态闭合状态还是还是打打开状态

21、开状态。5.2.1 5.2.1 开关检测案例开关检测案例1 1 利用片内利用片内I/OI/O端口来进行开关状态检测,开关一端接端口来进行开关状态检测,开关一端接到到I/OI/O端口引脚上,并通过端口引脚上,并通过上拉电阻接上拉电阻接+5V+5V上上,开关另一端开关另一端接地接地。当开关打开时,。当开关打开时,I/OI/O引脚为高电平,当开关闭合时引脚为高电平,当开关闭合时,I/OI/O引脚为低电平。引脚为低电平。2022-4-29 【例例5-35-3】 如如图图5-35-3,单片机的,单片机的P1.4P1.4P1.7P1.7接接4 4个开关个开关S0S0S3S3,P1.0P1.0P1.3P1.

22、3接接4 4个发光二极管个发光二极管LED0LED0LED3LED3。 编程编程将将P1.4P1.4P1.7P1.7上的上的4 4个开关状态反映在个开关状态反映在P1.0P1.0P1.3P1.3引脚控制的引脚控制的4 4个发光二极管上,开关闭合,对应发光二极管点个发光二极管上,开关闭合,对应发光二极管点亮。例如,亮。例如,P1.4P1.4引脚上开关引脚上开关S0S0状态,由状态,由P1.0P1.0脚上脚上LED0LED0显示,显示,P1.6P1.6引脚上开关引脚上开关S2S2状态,由状态,由P1.2P1.2脚的脚的LED2LED2显示。显示。 2022-4-29图图5-3 开关、开关、LED发

23、光二极管与发光二极管与P1口的连接口的连接2022-4-29参考程序如下:参考程序如下:#include #include #define uchar unsigned char#define uchar unsigned charvoid delay( ) void delay( ) /延时函数延时函数 uchar i,j;uchar i,j; for(i=0; i255; i+)for(i=0; i255; i+) for(j=0; j255; j+); for(j=0; j4; /temptemp=temp 4; /temp内容右移内容右移4 4位,位,P1P1口高口高4 4位移至低位移

24、至低4 4位位 P1=temp;P1=temp;/ temp/ temp中的数据送中的数据送P1P1口输出口输出delay(delay( );); 2022-4-295.2.2 5.2.2 开关检测案例开关检测案例2 2 【例例5-45-4】 如图如图5-45-4,P1.0P1.0和和P1.1P1.1引脚接有两只开关引脚接有两只开关S0S0和和S1S1,两引脚上的两引脚上的高低电平共高低电平共4 4种组合种组合,4 4种组合分别种组合分别点亮点亮P2.0P2.0P2.3P2.3引脚控制的引脚控制的4 4只只LEDLED,即,即S0S0、S1S1均闭合,均闭合,LED0LED0亮,其余灭;亮,其

25、余灭;S1S1闭合、闭合、S0S0打开,打开,LED1LED1亮,其余灭亮,其余灭;S0S0闭合、闭合、S1S1打开,打开,LED2LED2亮,其余灭亮,其余灭;S0S0、S1S1均打开,均打开,LED3LED3亮,其余灭。亮,其余灭。编程实现此功能。编程实现此功能。 参考程序:参考程序:2022-4-29图图5-4 开关检测指示器开关检测指示器2接口电路与仿真接口电路与仿真 2022-4-29#include #include / / 包含头文件包含头文件reg51.h reg51.h void main( )void main( ) / /主函数主函数main( )main( ) char

26、 state;char state; dodo P1=0 xff;P1=0 xff;/ P1/ P1口为输入口为输入 state=P1;state=P1;/ / 读入读入P1P1口的状态,送入口的状态,送入statestate state=state &state=state & 0 x03; 0 x03; / / 屏蔽屏蔽P1P1口的高口的高6 6位位( (00000011b00000011b) ) switchswitch (state) (state)/ / 判断判断P1P1口的低口的低2 2位的状态位的状态 casecase 0: P2=0 x01; break;/ P

27、1.1 0: P2=0 x01; break;/ P1.1、P1.0=00P1.0=00,点亮,点亮P2.0P2.0脚脚LED LED case 1: P2=0 x02; break;/ P1.1case 1: P2=0 x02; break;/ P1.1、P1.0=01P1.0=01,点亮,点亮P2.1P2.1脚脚LED LED case 2: P2=0 x04; break;/ P1.1case 2: P2=0 x04; break;/ P1.1、P1.0=10P1.0=10,点亮,点亮P2.2P2.2脚脚LED LED case 3: P2=0 x08; break;/ P1.1case

28、 3: P2=0 x08; break;/ P1.1、P1.0=11P1.0=11,点亮,点亮P2.3P2.3脚脚LED LED while ( 1 );while ( 1 );2022-4-29 5.3 5.3 单片机控制单片机控制LEDLED数码管的显示数码管的显示5.3.1 LED5.3.1 LED数码管显示原理数码管显示原理uLEDLED数码管数码管: “ “8”8”字型,字型,7 7段段(不包括小数点)或(不包括小数点)或8 8段段(包括(包括小数点),每段对应一个发光二极管,共阳极和共阴极两种小数点),每段对应一个发光二极管,共阳极和共阴极两种,见,见图图5-55-5。u共阳极共阳

29、极数码管的数码管的阳极连接在一起,接阳极连接在一起,接+5V+5V;u共阴极共阴极数码管数码管阴极连在一起接地。阴极连在一起接地。u对于对于共阴极共阴极数码管,当某发光二极管阳极为高电平时,发光数码管,当某发光二极管阳极为高电平时,发光二极管点亮,二极管点亮,相应段被显示相应段被显示。u共阳极共阳极数码管数码管阳极连在一起阳极连在一起,公共阳极接,公共阳极接+5V+5V,当某个发光二,当某个发光二极管阴极接低电平时,该发光二极管被点亮,相应段被显示极管阴极接低电平时,该发光二极管被点亮,相应段被显示。2022-4-29图图5-5 8段段LED数码管结构及外形数码管结构及外形2022-4-29u

30、为使为使LEDLED数码管显示不同字符,数码管显示不同字符,要把某些段点亮要把某些段点亮,就要为数码管,就要为数码管的各段提供的各段提供一字节的二进制码一字节的二进制码,即,即字型码(也称字型码(也称段码段码)。)。u习惯上以习惯上以“a”a”段对应字型码字节的最低位段对应字型码字节的最低位。各字符。各字符段码段码见表见表5-5-1 1。2022-4-29u 如要在数码管如要在数码管显示某字符显示某字符,只需将该,只需将该字符字型码字符字型码加到各段加到各段上即可。上即可。u例如,某存储单元中的数为例如,某存储单元中的数为“02H”02H”,想在共阳极数码管上,想在共阳极数码管上显示显示“2”

31、2”,需要把,需要把“2”2”的字型码的字型码“A4H”A4H”加到数码管各段。加到数码管各段。u常将欲显示字符的字型码作成一个表(数组),根据显示字常将欲显示字符的字型码作成一个表(数组),根据显示字符从符从表中查找表中查找到相应字型码,然后把该字型码输出数码管各到相应字型码,然后把该字型码输出数码管各个段上,同时数码管的公共端接个段上,同时数码管的公共端接+5V+5V,此时在数码管上显示,此时在数码管上显示字符字符“2”2”。 2022-4-29 【例例5-55-5】利用单片机控制一个利用单片机控制一个8 8段段LEDLED数码管先循数码管先循环显示环显示单个偶数:单个偶数:0 0、2 2

32、、4 4、6 6、8 8,再显示单个奇数再显示单个奇数:1 1、3 3、5 5、7 7、9 9,如此反复循环显示。本例原理电路及如此反复循环显示。本例原理电路及仿真结果,见仿真结果,见图图5-65-6。 参考程序如下:参考程序如下:2022-4-29图图5-6 控制数码管循环显示单个数字的电路及仿真控制数码管循环显示单个数字的电路及仿真2022-4-29#include reg51.h#include reg51.h#include intrins.h#include intrins.h#define uchar unsigned char#define uchar unsigned char

33、#define uint unsigned int#define uint unsigned int#define out P0#define out P0uchar code uchar code seg =seg =0 xc0,0 xa4,0 x99,0 x82,0 x80,0 xf9,0 xb0,0 x92,0 xf8,0 x90,0 xc0,0 xa4,0 x99,0 x82,0 x80,0 xf9,0 xb0,0 x92,0 xf8,0 x90,0 x010 x01; ; /共阳极段码表共阳极段码表 void delayms(uint); void delayms(uint); vo

34、id main(void)void main(void) uchar uchar i=0;i=0;while(1)while(1) out=segi;out=segi;delayms(900);delayms(900);i+;i+;if(segi= =0 x01) i=0; / if(segi= =0 x01) i=0; / 若段码为若段码为0 x010 x01,表明一个循环显示已结束表明一个循环显示已结束 2022-4-29void delayms(uint j)void delayms(uint j)/ / 延时函数延时函数 uchar i;uchar i;for(;j0;j-)for(;

35、j0;j-) i=250; i=250; while(- -i); while(- -i); i=249; i=249; while(- -i); while(- -i); 说明:说明:语句语句“if(segi=0 x01)i=0; ”if(segi=0 x01)i=0; ” 含义:如果欲送出含义:如果欲送出的数组元素为的数组元素为0 x010 x01(数字(数字“9”9”段码段码0 x900 x90的下一个元素,即结的下一个元素,即结束码),束码),表明一个循环显示已结束,则重新开始循环显示,表明一个循环显示已结束,则重新开始循环显示,因此应使因此应使“i=0”i=0”,从段码数组表的第一个

36、元素,从段码数组表的第一个元素seg0seg0,即段,即段码码0 xc00 xc0(数字(数字0 0)重新开始显示。)重新开始显示。2022-4-295.3.2 LED5.3.2 LED数码管的静态显示与动态显示数码管的静态显示与动态显示 两种显示方式:静态显示和动态显示。两种显示方式:静态显示和动态显示。1. 1. 静态显示方式静态显示方式u 无论多少位无论多少位LEDLED数码管,都同时处于显示状态。数码管,都同时处于显示状态。u 多位多位LEDLED数码管工作于数码管工作于静态显示方式静态显示方式时,时,各位共阴极(或共阳极)连各位共阴极(或共阳极)连接在一起并接地(或接接在一起并接地(

37、或接+5V+5V););u每位数码管段码线(每位数码管段码线(a adpdp)分别与一个)分别与一个8 8位位I/OI/O口锁存器输出相连口锁存器输出相连。u如果送往各个如果送往各个LEDLED数码管所显示字符的数码管所显示字符的段码段码一经确定,则相应一经确定,则相应I/OI/O口锁口锁存器锁存的段码输出将维持不变,直到送入下一个显示字符段码。存器锁存的段码输出将维持不变,直到送入下一个显示字符段码。u静态显示方式静态显示方式显示无闪烁,亮度较高显示无闪烁,亮度较高,软件控制较易。软件控制较易。2022-4-29图图5-7 4位位LED静态显示的示意图静态显示的示意图2022-4-29u图图

38、5-75-7为为4 4位位LEDLED数码管静态显示电路数码管静态显示电路,各数码管可,各数码管可独立显示,只要向控制各位独立显示,只要向控制各位I/OI/O口锁存器送相应显口锁存器送相应显示段码,该位就能保持相应的显示字符。示段码,该位就能保持相应的显示字符。u这样这样在同一时间在同一时间,每一位显示的字符可各不相同每一位显示的字符可各不相同。静态显示方式占用静态显示方式占用I/OI/O口端口线较多。口端口线较多。u图图5-75-7电路,电路,要占用要占用4 4个个8 8位位I/OI/O口(或锁存器)。口(或锁存器)。如如数码管数目增多,则需增加数码管数目增多,则需增加I/OI/O口数目。口

39、数目。2022-4-29 【例例5-65-6】单片机控制单片机控制2 2只数码管,只数码管,静态显示静态显示2 2个数字个数字“27”27”。 原理电路见原理电路见图图5-85-8。单片机用单片机用P0P0口与口与P1P1口口,分别控制加到两个数码管,分别控制加到两个数码管DS0DS0与与DS1DS1的的段码段码,而,而共阳极数码管共阳极数码管DS0DS0与与DS1DS1的公共端(的公共端(公共阳极端公共阳极端)直直接接至接接至+5V+5V,因此数码管,因此数码管DS0DS0与与DS1DS1始终处于导通状态。利用始终处于导通状态。利用P0P0口与口与P1P1口带有的锁存功能,口带有的锁存功能,

40、只需向单片机只需向单片机P0P0口与口与P1P1口分别口分别写入相应的显示字符写入相应的显示字符“2”2”和和“7”7”的段码即可的段码即可。 由于一个数码管就占用一个由于一个数码管就占用一个I/OI/O端口,端口,如果数码管数目如果数码管数目增多,则需增加增多,则需增加I/OI/O口,但软件编程要简单的多。口,但软件编程要简单的多。2022-4-29图图5-8 2位数码管静态显示的原理电路与仿真位数码管静态显示的原理电路与仿真2022-4-29参考程序如下:参考程序如下:#include #include /包含包含80518051单片机寄存器定义的头文件单片机寄存器定义的头文件void m

41、ain(void)void main(void) P0=0 xa4; P0=0 xa4;/将数字将数字22的段码送的段码送P0P0口口 P1=0 xf8; P1=0 xf8;/将数字将数字77的段码送的段码送P1P1口口 while(1)while(1)/无限循环无限循环 ; ; 2. 2. 动态显示方式动态显示方式u显示位数较多时,显示位数较多时,静态显示所占的静态显示所占的I/OI/O口多口多,这时常采用,这时常采用动态显动态显示示。u为节省为节省I/OI/O口,通常将所有口,通常将所有显示器显示器段码线相应段段码线相应段并联并联在一起在一起,由,由一个一个8 8位位I/OI/O口控制,口

42、控制,各显示位公共端各显示位公共端分别由分别由另一单独另一单独I/OI/O口线控口线控制制。2022-4-29图图5-9 4位位8段段LED数码管动态显示示意图数码管动态显示示意图 2022-4-29u 图图5-95-9:4 4位位8 8段段LEDLED动态显示器电路示意图。其中单片机发出的动态显示器电路示意图。其中单片机发出的段码段码占占用用1 1个个8 8位位I/OI/O(1 1)端口,而)端口,而位选控制位选控制使用使用I/OI/O(2 2)端口中)端口中4 4位口线。位口线。u动态显示动态显示就是单片机向就是单片机向段码线输出欲显示字符的段码段码线输出欲显示字符的段码。每一时刻,。每一

43、时刻,只只有有1 1位位选线有效位位选线有效,即选中某一位显示,即选中某一位显示,其他各位位选线都无效其他各位位选线都无效。u每隔一定时间每隔一定时间逐位轮流点亮逐位轮流点亮各数码管(各数码管(扫描方式扫描方式),由于数码管余辉),由于数码管余辉和人眼的和人眼的“视觉暂留视觉暂留”作用,只要控制好每位数码管显示时间和间隔作用,只要控制好每位数码管显示时间和间隔,则可造成,则可造成“多位同时亮多位同时亮”的假象,达到同时显示效果。的假象,达到同时显示效果。u各位数码管轮流点亮的各位数码管轮流点亮的时间间隔(扫描间隔时间间隔(扫描间隔)应根据实际情况定。)应根据实际情况定。u发光二极管从发光二极管

44、从导通到发光有一定的延时导通到发光有一定的延时,如果点亮时间太短,发光太,如果点亮时间太短,发光太弱,人眼无法看清;时间太长,产生闪烁现象,且此时间越长,占用弱,人眼无法看清;时间太长,产生闪烁现象,且此时间越长,占用单片机时间也越多。单片机时间也越多。u显示位数增多,也将占用单片机大量时间显示位数增多,也将占用单片机大量时间,因此,因此动态显示实质是以执动态显示实质是以执行程序时间来行程序时间来换取换取I/OI/O端口减少端口减少。2022-4-29【例例5-75-7】 单片机控制单片机控制8 8只数码管,只数码管,分别滚动显示分别滚动显示单个数字单个数字1 18 8。程序运行后程序运行后,

45、单片机控制左边第,单片机控制左边第1 1个个数码管显示数码管显示1 1,其他不显示,其他不显示,延时之后延时之后,控制左边第,控制左边第2 2个数码管显示个数码管显示2 2,其他不显示,直至第,其他不显示,直至第8 8个数码管显个数码管显示示8 8,其他不显示,其他不显示,反复循环上述过程。反复循环上述过程。2022-4-29图图5-10 8只数码管分别滚动显示单个数字只数码管分别滚动显示单个数字182022-4-29参考程序如下:参考程序如下:#include#include#include#include#define uchar unsigned char#define uchar un

46、signed char#define uint unsigned int#define uint unsigned intuchar code uchar code dis_code=dis_code=0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 xc0; 0 xc0; /共阳数码管段码表共阳数码管段码表void delay(uint t)void delay(uint t)/延时函数延时函数 uc

47、har i;uchar i;while(t-) while(t-) for(i=0;i200;i+); for(i=0;i200;i+); 2022-4-29 void main() void main() uchar uchar i,j=0 x80;i,j=0 x80; while(1) while(1) for(i=0;i8;i+)for(i=0;i8;i+) j j=_crol_(=_crol_(j,1);j,1);/_crol_(j,1)/_crol_(j,1)为将对象为将对象j j循环左移循环左移1 1位位 P0=dis_codei;P0=dis_codei;/P0/P0口输出段码口

48、输出段码 P2=P2=j j; ;/P2/P2口输出位控码口输出位控码 delay(180);delay(180);/延时,控制每位显示的时间延时,控制每位显示的时间 2022-4-29/ /* *dis_codedis_code=0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 x=0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 xc0; f8,0 x80,0 x90,0 x88,0 xc0; * */ /u本案例动态显示电路见本案例动态显示电路见图图5-105-10,P0P0口口输出输出段

49、码段码,P2P2口口输出扫描的输出扫描的位控码位控码,通过由,通过由8 8个个NPNNPN晶体管的位驱动电路对晶体管的位驱动电路对8 8个数码管位控扫描个数码管位控扫描。即使扫描速度加快,由于是。即使扫描速度加快,由于是虚拟仿真虚拟仿真,数码管的余辉也不能像,数码管的余辉也不能像实际电路那样体现出来。实际电路那样体现出来。u如对本例实际硬件显示电路进行快速扫描,由于如对本例实际硬件显示电路进行快速扫描,由于数码管余辉和人数码管余辉和人眼眼 “ “视觉暂留视觉暂留”作用,只要控制好每位数码管显示的时间和间隔作用,只要控制好每位数码管显示的时间和间隔,则可造成,则可造成“多位同时亮多位同时亮”假象

50、,达到同时显示效果。假象,达到同时显示效果。u但虚拟仿真做不到这一点。仿真运行下,只能是一位一位点亮显但虚拟仿真做不到这一点。仿真运行下,只能是一位一位点亮显示,示,不能看到同时显示效果不能看到同时显示效果,但本例使我们了解动态扫描显示实但本例使我们了解动态扫描显示实际过程。际过程。u如采用实际硬件电路,用软件控制快速扫描如采用实际硬件电路,用软件控制快速扫描,可看到,可看到“多位同时多位同时点亮点亮” 效果。效果。2022-4-295.4 5.4 单片机控制单片机控制LEDLED点阵显示器显示点阵显示器显示uLEDLED点阵显示器应用非常广泛,在许多公共场合,如商场、银行、点阵显示器应用非常

51、广泛,在许多公共场合,如商场、银行、车站、机场、医院随处可见,不仅能显示文字、图形,还能播放动车站、机场、医院随处可见,不仅能显示文字、图形,还能播放动画、图像、视频等信号。画、图像、视频等信号。uLEDLED点阵显示器分为点阵显示器分为图文显示器图文显示器和和视频显示器视频显示器,有单色显示,还有,有单色显示,还有彩色显示。彩色显示。u下面仅介绍下面仅介绍单片机如何来控制单色单片机如何来控制单色LEDLED点阵显示器点阵显示器的显示。的显示。5.4.1 LED5.4.1 LED点阵显示器结构与显示原理点阵显示器结构与显示原理u由若干个发光二极管按矩阵方式排列而成。由若干个发光二极管按矩阵方式

52、排列而成。u阵列点数可分为阵列点数可分为5 57 7、5 58 8、6 68 8、8 88 8点阵;点阵;u按按发光颜色发光颜色可分为可分为单色、双色、三色单色、双色、三色;u按按极性排列可分为极性排列可分为共阴极和共阳极共阴极和共阳极。2022-4-291. LED1. LED点阵结构点阵结构 以以8 88LED8LED点阵显示器点阵显示器为例,外形见为例,外形见图图5-115-11,内部结构见,内部结构见图图5-125-12,由,由6464个发光二极管组成,个发光二极管组成,且每个发光二极管是处于且每个发光二极管是处于行行线线(R0R7R0R7)和)和列线列线(C0C7C0C7)之间交叉点

53、上。)之间交叉点上。2. LED2. LED点阵显示原理点阵显示原理u显示一个字符显示一个字符: :字符由一个个点亮的字符由一个个点亮的LEDLED所构成所构成。u由由图图5-125-12点亮点阵中一个点亮点阵中一个发光二极管条件发光二极管条件:对应行为高电平对应行为高电平,对应列为低电平。,对应列为低电平。u如在如在很短时间内很短时间内依次点亮很多个发光二极管,依次点亮很多个发光二极管,LEDLED点阵就可显点阵就可显示一个稳定字符、数字或其他图形。示一个稳定字符、数字或其他图形。2022-4-29图图5-115-11 8 88 LED8 LED点阵显示器外形点阵显示器外形 2022-4-2

54、9图图5-125-12 8 88LED8LED点阵显示器点阵显示器(共阴极)的结构(共阴极)的结构2022-4-29u控制控制LEDLED点阵显示器显示,点阵显示器显示,实质就是控制加到行线和列线上实质就是控制加到行线和列线上编码,控制点亮某些发光二极管(点),从而显示出由不同编码,控制点亮某些发光二极管(点),从而显示出由不同发光点组成的各种字符。发光点组成的各种字符。u161616 LED16 LED点阵显示器的结构与点阵显示器的结构与8 88LED8LED点阵显示模块内部点阵显示模块内部结构及显示原理是类似的,只不过结构及显示原理是类似的,只不过行和列均为行和列均为1616。u16161

55、616是由是由4 4个个8 88 LED8 LED点阵点阵组成,且每个发光二极管也是组成,且每个发光二极管也是放置在行线和列线的放置在行线和列线的交叉点交叉点上,当上,当对应某对应某一列置一列置0 0电平电平,某某一行置一行置1 1电平时电平时,该发光二极管点亮。,该发光二极管点亮。u下面以显示字符下面以显示字符“子子”为例,见为例,见图图5-135-13。2022-4-29图图5-13 1616 LED点阵显示器显示字符点阵显示器显示字符“子子”2022-4-29 显示过程:显示过程:u先给先给LEDLED点阵的点阵的第第1 1行送行送高电平高电平(行线高电平有效行线高电平有效),同时给),

56、同时给所有列线送高所有列线送高电平电平(列线低电平有效列线低电平有效),),从而第从而第1 1行发光二极管全灭;行发光二极管全灭;u延时一段时间后,延时一段时间后,再给第再给第2 2行送行送高电平高电平,同时给所有列线送,同时给所有列线送“1100 0000 1100 0000 0000 11110000 1111”,列线为列线为0 0的发光二极管点亮的发光二极管点亮,从而点亮,从而点亮1010个发光二极管,显个发光二极管,显示出示出汉字汉字“子子”的第一横的第一横;u延时一段时间后,延时一段时间后,再给第再给第3 3行送行送高电平高电平,同时加到列线的编码为,同时加到列线的编码为“1111

57、1111 1111 1101 1111”1111 1101 1111”,点亮,点亮1 1个发光二极管;个发光二极管;u;u延时一段时间后,延时一段时间后,再给第再给第1616行送行送高电平高电平,同时给列线同时给列线送送“1111 1101 1111 1111 1101 1111 1111” 1111” ,显示出汉字,显示出汉字“子子”的最下面的一行,点亮的最下面的一行,点亮1 1个发光二极管。个发光二极管。u然后再重新循环上述操作,然后再重新循环上述操作,利用人眼视觉暂留效应利用人眼视觉暂留效应,一个稳定字符,一个稳定字符“子子” ” 显示出来,见显示出来,见图图5-135-13。 2022

58、-4-295.4.2 5.4.2 控制控制161616 LED16 LED点阵显示屏点阵显示屏 单片机控制单片机控制16161616点阵点阵显示屏显示字符案例。显示屏显示字符案例。 【例例5-85-8】如如图图5-145-14,利用单片机,利用单片机及及 74LS15474LS154(4-164-16译码器)译码器)、74LS0774LS07、16161616 LED LED点阵显示屏来实现点阵显示屏来实现字符显示字符显示,编写程序,编写程序,循环显示循环显示字符字符“电子技术电子技术”。2022-4-29n 图中图中161616 LED16 LED点阵显示屏点阵显示屏1616行行线行行线R0

59、R15R0R15电平电平,由由P1P1口低口低4 4位经位经4-164-16译码器译码器74HC15474HC154的的1616条译码输出条译码输出线线L0L15L0L15经驱动后的经驱动后的输出来控制。输出来控制。n1616列列线列列线C0C15C0C15的电平由的电平由P0P0口和口和P2P2口口控制。控制。n剩下问题剩下问题是是如何确定显示字符的如何确定显示字符的点阵编码点阵编码,以及以及控制好每一控制好每一屏逐行显示的屏逐行显示的扫描速度扫描速度(刷新频率)。(刷新频率)。 2022-4-29图图5-145-14 控制控制161616LED16LED点阵显示器(点阵显示器(共阴极共阴极

60、)显示字符)显示字符 2022-4-292022-4-29u 74HC154译码器译码器可接受可接受4位位有效二进制地有效二进制地址输入,并提供址输入,并提供16个互斥个互斥的的低有效输出低有效输出。u 74HC154的两个的两个输入使能门电路可用于输入使能门电路可用于译码器选通译码器选通,以消除输出端上的通常译,以消除输出端上的通常译码码“假信号假信号”,也可用于译码器扩展。,也可用于译码器扩展。该使能门电路包含两个该使能门电路包含两个“逻辑与逻辑与”输入,输入,必须置为低以便使能输出端。必须置为低以便使能输出端。u 任选一个任选一个使能输入端使能输入端作为数据输入,作为数据输入,74HC154可充当一个可

温馨提示

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

评论

0/150

提交评论