第8章键盘显示接口技术-显示器_第1页
第8章键盘显示接口技术-显示器_第2页
第8章键盘显示接口技术-显示器_第3页
第8章键盘显示接口技术-显示器_第4页
第8章键盘显示接口技术-显示器_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

第八章:51系列单片机键盘/显示器接口技术常用的显示设备:发光二极管、八段LED显示器、点阵LED,液晶显示器(LCD)、屏幕显示器(CRT)等。8.1LED显示器接口技术8.2键盘接口技术8.3点阵接口技术8.4液晶显示器接口技术8.151单片机显示器接口技术

1、LED显示器结构与原理:(1)结构:LED封装图共阴极LED共阳极LED(2)LED显示器的基本问题a.七段码问题共阳极、共阴极七段码如显示“0”,共阴极七段码:

dpgfedcba001111113FH共阳极七段码:

dpgfedcba110000000C0H共阴极七段码表:unsignedcharcodedaima[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};b.驱动问题LED显示器的每一个段通常需要1~5mA电流。段驱动、位驱动;段口、位口c.显示方式问题静态显示、动态显示d.译码方式问题硬件译码:采用专用译码器芯片实现,如CD4511、7447等芯片软件译码:采用软件查表的方法,如显示“3”:unsignedcharcodetable[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsignedchari,j;

i=0x03;//

j=table[i];//查表,转换成7段码(3)显示函数的编写问题a.建立7段码表b.建立显示缓冲区通常,显示缓冲区中存放要显示的内容,对应于每个显示器,显示缓冲区的数据由其他函数或主函数来修改。c.编制显示函数显示函数只完成将显示缓冲区中的数据通过查表转换成7段码送显示器显示。d.显示函数的调用在主函数或其他函数中调用显示函数。例如:2位显示器显示函数的编写unsignedchardis_buf[2]; //显示缓冲区unsignedcharcodetable[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};voidDisp(void)//2位数码管显示函数{ unsignedchari;i=dis_buf[0];//取显示内容P1=table[i];//7段码送显示器i=dis_buf[1];P3=table[i];}

(4)LED显示器静态显示1、一个8位端口控制1位LED显示器;2、不改变显示内容,显示器一直显示不变;3、硬件复杂,软件控制简单。例1:利用P2、P3口进行静态显示:轮流显示“12”、“--”、“AB”#include<reg51.h>unsignedchardis_buf[2]; //显示缓冲区unsignedcharcodetable[18]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};voiddl(unsigned

intx) //延时xms{ unsignedintt1,t2; for(t1=0;t1<x;t1++) for(t2=0;t2<120;t2++);}voiddisplay(void)//显示函数{ P2=table[dis_buf[0]];//静态显示1 P3=table[dis_buf[1]];//静态显示2}voidmain(void){ while(1) { dis_buf[0]=1;dis_buf[1]=2;//送显示数据12 display(); //调显示函数

dl(500); //延时500ms dis_buf[0]=16;dis_buf[1]=16; //显示-- display(); dl(500); dis_buf[0]=0x0a;dis_buf[1]=0x0b;//显示ab display(); dl(500); }}例2:利用8255PA、PB、PC口进行静态显示:轮流显示“123”、“abc”#include<reg51.h>#include<absacc.h>#defineCOM8255XBYTE[0xbfff]#definePA8255XBYTE[0xbcff]#definePB8255XBYTE[0xbdff]#definePC8255XBYTE[0xbeff]unsignedchardis_buf[3]; //显示缓冲区unsignedcharcodetable[18]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};voiddl(unsigned

intx) //延时xms{ unsignedintt1,t2; for(t1=0;t1<x;t1++) for(t2=0;t2<120;t2++);}voiddisplay(void){ PA8255=table[dis_buf[0]]; PB8255=table[dis_buf[1]]; PC8255=table[dis_buf[2]];}voidmain(void){

COM8255=0x80; //8255初始化

while(1) { dis_buf[0]=1;dis_buf[1]=2; dis_buf[2]=3;//显示123 display(); //调显示函数

dl(500);//延时500ms dis_buf[0]=0x0a;dis_buf[1]=0x0b;dis_buf[2]=0x0c; //显示abc

display(); dl(500); }}(5)LED动态显示动态显示即一位一位轮流点亮各位显示器,采用动画模式。理解:段口和位口的含义unsignedchardis_buf[8]; //显示缓冲区unsignedcharcodetable[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};voiddisplay(void){ unsignedchari; unsignedcharbitcode=0xfe; //位码

for(i=0;i<8;i++) {

DUANKOU=table[dis_buf[i]]; //送段码

WEIKOU=bitcode;

//位码

dl_ms();

//延时1ms

WEIKOU=0xff;//关闭显示

bitcode=_crol_(bitcode,1);//位码左循环移位 }}例3:利用P0、P3口进行动态显示:显示“123456”#include<reg51.h>#include<intrins.h>unsignedchardis_buf[6]={0};//显示缓冲区unsignedcharcodetable[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};voiddl_ms() //延时1ms{ unsignedintj; for(j=0;j<150;j++);}voiddisplay(void){ unsignedchari; unsignedcharbitcode=0xfe; //位码

for(i=0;i<6;i++) { P0=table[dis_buf[i]]; //送段码

P3=bitcode; //位码

dl_ms(); //延时1msP3=0xff; //关闭显示

bitcode=_crol_(bitcode,1);//位码左循环移位

}}voidmain(void){ dis_buf[0]=1;dis_buf[1]=2; dis_buf[2]=3;dis_buf[3]=4;dis_buf[4]=5;dis_buf[5]=6;

while(1) { display(); }}A15A14A13A12A11A10A9A8A7---------A0101111001--------1

01

10

11

8255端口地址:BCFFH—BFFFH例4:利用8255A控制动态显示PA口为段口,PB口为位口74LS245、7407均为同向驱动器。例4:利用8255进行动态显示:显示“12345678”#include<reg51.h>#include<intrins.h>#include<absacc.h>#defineCOM8255XBYTE[0xbfff]#definePA8255XBYTE[0xbcff]#definePB8255XBYTE[0xbdff]#definePC8255XBYTE[0xbeff]unsignedchardis_buf[8]={1,2,3,4,5,6,7,8}; //显示缓冲区unsignedcharcodetable[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};voiddl_ms() //延时1ms{ unsignedintj; for(j=0;j<150;j++);}voiddisplay(void){ unsignedchari; unsignedcharbitcode=0xfe; //位码

for(i=0;i<8;i++) { PA8255=table[dis_buf[i]]; //送段码

PC8255=bitcode; //位码

dl_ms(); //延时1msPC8255=0xff; //关闭显示

bitcode=_crol_(bitcode,1);//位码左循环移位

}}voidmain(){ COM8255=0x80; //8255初始化

while(1) { display(); }}提高:显示程序的实际问题前述显示程序是理想仿真下的情况。实际电路板中的

温馨提示

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

评论

0/150

提交评论