项目5 电子广告牌的设计与制作_第1页
项目5 电子广告牌的设计与制作_第2页
项目5 电子广告牌的设计与制作_第3页
项目5 电子广告牌的设计与制作_第4页
项目5 电子广告牌的设计与制作_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

单片机系统设计及应用任务5电子广告牌的设计与制作目录

知识链接任务实施二、LED点阵显示器一、任务分析二、安装与调试

一、单片机键盘接口技术

三、LCD液晶显示器目录

知识链接任务实施二、LED点阵显示器一、任务分析二、安装与调试

三、LCD液晶显示器一、单片机键盘接口技术1、键盘工作原理及消抖通过按键的接通与断开,产生两种相反的逻辑状态:未按下,输出高电平;按下,输出低电平。可以通过检测输出线上电平的高/低来判断键位有无按下。1、键盘工作原理及消抖前沿抖动后沿抖动01前沿抖动:按下按键时产生的抖动。02后沿抖动:松开按键时产生的抖动。1、键盘工作原理及消抖如何消抖?01硬件消抖02软件消抖1、键盘工作原理及消抖硬件消抖:通过在按键输出电路上加上一定的硬件线路来消除抖动,一般采用R-S触发器或单稳态电路。如图所示,经过图中的R-S触发器消除抖动后,输出端的信号就变为标准的矩形波了。适用于三端开关。图6.2硬件消抖电路

硬件消抖1、键盘工作原理及消抖利用延时来跳过抖动过程,当判断有键按下时,先执行一段大于10ms的延时程序后再去判断按下的键位是哪一个,从而消除前沿抖动的影响。对于后沿抖动,只需要在接收一个键位后,经过一定时间再去检测有无按键,这样就自然跳过后沿抖动时间而消除后沿抖动了。

软件消抖2、独立式键盘及其接口独立式键盘:最简单的键盘结构形式,每个按键的电路都是独立的,每个按键占用一根I/O线,01优点:相互之间没有影响,按键识别(编程)简单。02缺点:占用较多口线,适合8键以下使用。图6.3按键与8051接口电路3、矩阵式键盘及其接口

矩阵式键盘

又叫行列式键盘。用I/O接口线组成行、列结构,键位设置在行、列的交点上。比一个键位用一根I/O接口线的独立式键盘少了一半的I/O接口线。而且键位越多,效果就越明显。适用于按键数目较多的情况。图6.4矩阵键盘及其接口4、键盘的工作方式01随机扫描工作方式CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。03中断扫描方式为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,CPU处理自己的工作,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。02定时扫描方式每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(例如10ms)的定时,当定时时间到就产生定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键,再执行该键的功能程序。5、4×4键盘应用实例在单片机P1口接一个4×4的矩阵键盘,P0口接一静态显示数码管。要求按键按下后,在数码管上显示对应键值。(0~9、A~F)例6.1确定行号,确定列号,计算键值5、4×4键盘应用实例5、4×4键盘应用实例C源程序#include<reg51.h>#defineuchar unsignedchar#defineuint unsignedint//0~F的共阳数码管段码,最后一个是黑屏constucharSEG_CODE[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};//当前按键序号,该矩阵中序号范围为0-15,0xFF表示无按键ucharkeyNo=0xff;//-----------------------------------------------------------------//延时函数//-----------------------------------------------------------------voiddelay_ms(uintx){ uchart; while(x--) for(t=0;t<120;t++);}C源程序voidKeys_Scan()//键盘矩阵扫描子程序{ P1=0x0f; delay_ms(1); if(P1==0x0f) //无按键按下,提前返回 { keyNo=0xff; return; } switch(P1) //判断按键所在列 { case0x0E: keyNo=0; break; case0x0D: keyNo=1; break; case0x0B: keyNo=2; break; case0x07: keyNo=3; break; default: keyNo=0xff; return; } P1=0xf0; delay_ms(1); switch(P1) //判断按键所在行,计算键值 { case0xE0: keyNo+=0; break; case0xD0: keyNo+=4; break; case0xB0: keyNo+=8; break; case0x70: keyNo+=12; break; default: keyNo=0xff; return; }}C源程序voidmain(){ P0=0xff; while(1) { Keys_Scan(); //按键扫描 if(keyNo==0xff) //无按键 { delay_ms(10); continue; } P0=SEG_CODE[keyNo]; //显示键值 while(Keys_Scan(),keyNo!=0xff); //等待按键释放 }}目录

知识链接任务实施

一、单片机键盘接口技术一、任务分析二、安装与调试

三、LCD液晶显示器二、LED点阵显示器1、LED点阵显示器结构

LED点阵:亦称LED点阵或LED矩阵板。以发光二极管为像素,按照行与列的顺序排列起来,用集成工艺制成的显示器件。01特点:亮度高且均匀,高可靠性,接线简单,拼装方便等优点。02用途:屏幕LED智能显示屏、智能仪器等设备。单块使用时,既可代替数码管显示数字,也可显示各种中西文字及符号。1、LED点阵显示器结构12345678

1615141312111091、LED点阵显示器结构行线列线R1R2R3R4R5R6R7R8

C1C2C3C4C5C6C7C813341061115169141281725

R5R7C2C3R8C5R6R4

C8C5R2C1R3C6C4R18×8点阵——行共阳1、LED点阵显示器结构行线列线R1R2R3R4R5R6R7R8

C1C2C3C4C5C6C7C813341061115169141281725

R5R7C2C3R8C5R6R4

C8C5R2C1R3C6C4R18×8点阵——行共阴2、LED点阵显示器显示方式动态显示:在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。静态显示:原理简单、控制方便,但硬件接线复杂。点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。2、LED点阵显示器显示方式在单片机P0口和P3口分别接一行共阴8×8点阵的行线与列线,试编程用动态扫描的方法使点阵上显示一个静止的箭头。例7.12、LED点阵显示器显示方式8×8点阵模块动态扫描显示——原理图2、LED点阵显示器显示方式8×8点阵模块动态扫描显示——列扫描(行共阴)E7C3A5E7E7E7E7FF2、LED点阵显示器显示方式8×8点阵模块动态扫描显示——行扫描(行共阴)0004027F7F020400C源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineCol P3 //列线

#defineRow P0 //行线ucharcodeDis_Data[]={0x18,0x3C,0x5A,0x18,0x18,0x18,0x18,0x00};//箭头ucharcodeDis_In[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};voidDelayMs(uintx){ uchari; while(x--) { for(i=0;i<120;i++); }}C源程序voidmain(){ uchari; while(1) { for(i=0;i<8;i++) { Col=Dis_In[i]; //列扫描 Row=~Dis_Data[i]; //送行数据 DelayMs(1); } }}2、LED点阵显示器显示方式在单片机P0口和P3口分别接一行共阴8×8点阵的行线与列线,试编程用动态扫描的方法使点阵上显示向左移动的箭头。例7.22、LED点阵显示器显示方式0123456745670123123456705670123423456701670123453456701270123456Dis_Data[]={0x18,0x3C,0x5A,0x18,0x18,0x18,0x18,0x00};C源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineCol P3 //列线#defineRow P0 //行线#defineN 8ucharcodeDis_Data[]={0x18,0x3C,0x5A,0x18,0x18,0x18,0x18,0x00};//箭头ucharcodeDis_In[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};voidDelayMs(uintx){ uchari; while(x--) { for(i=0;i<50;i++); }}C源程序voidmain(){ uchari,j,k; while(1) { for(k=0;k<N;k++) { for(j=0;j<50;j++) { for(i=0;i<8;i++) { Col=Dis_In[i]; Row=~Dis_Data[(k+i)%N]; DelayMs(1); } } } }}显示一帧图形一帧图形持续若干时间控制图形移动,显示不同的帧2、LED点阵显示器显示方式16×16点阵如何实现动态扫描显示?12345678

9ABCDEFG123456789ABCEFG2、LED点阵显示器显示方式2、LED点阵显示器显示方式16×16点阵占用的口线太多怎么办?利用串口通信和译码器,减少口线数量!小提示目录

知识链接任务实施

三、LCD液晶显示器一、任务分析二、安装与调试二、LED点阵显示器

一、单片机键盘接口技术1、LCD液晶显示器简介

(1)概念结构:在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。

LCD:液晶显示器,LiquidCrystalDisplay的简称。1、LCD液晶显示器简介1、LCD液晶显示器简介

(2)特点功耗低体积小重量轻1、LCD液晶显示器简介

(3)分类段式字符式内部含有字库,字符、汉字的显示依赖字库实现。点阵式内部没有字库,所有显示数据依赖用户自己写入。按显示方式1、LCD液晶显示器简介

(3)分类黑白显示多灰度显示彩色显示按颜色1、LCD液晶显示器简介2、1602字符型LCD简介字符型液晶显示模块:一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。2、1602字符型LCD简介

(1)1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。显示容量:16×2个字符芯片工作电压:4.5~5.5V工作电流:2.0mA模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm

主要技术参数2、1602字符型LCD简介

引脚功能说明1602LCD采用标准14脚(无背光)或16脚(带背光)接口。2、1602字符型LCD简介编号符号引脚编号符号引脚1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表6.21602LCD引脚说明表2、1602字符型LCD简介第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。2、1602字符型LCD简介

(2)1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令。序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表6.3控制命令表2、1602字符型LCD简介读状态RS=L,R/W=H,E=H输出D0~D7=状态字写指令RS=L,R/W=L,D0~D7=指令码,E=高脉冲输入无读数据RS=H,R/W=H,E=H输出D0~D7=数据写数据RS=H,R/W=L,D0~D7=数据,E=高脉冲输入无表6.4基本操作时序表2、1602字符型LCD简介表6.5读操作时序2、1602字符型LCD简介表6.6写操作时序2、1602字符型LCD简介

(3)1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。表6.10LCD1602内部显示地址2、1602字符型LCD简介1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如教材P133图6.11所示.包括:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。常用符号、数字、字母:ASCII码。例如:大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。2、1602字符型LCD简介(4)1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)初始化开始,不检测忙信号写指令38H(00111000B):显示模式设置写指令08H(00001000B):显示关闭

写指令01H(00000001B):显示清屏写指令06H(00000110B):显示光标移动设置写指令0CH(00001100B):显示开及光标设置以后每次写指令、读/写数据操作均需要检测忙信号3、LCD1602与单片机接口电路1602子程序//------------------------------------------------------//忙检查//------------------------------------------------------ucharLCD_Busy_Check(){ ucharLCD_Status; RS=0; RW=1; EN=1; Delay(1); LCD_Status=DP; EN=0; returnLCD_Status;}1602子程序//------------------------------------------------------//写命令函数//------------------------------------------------------voidLCD_Write_Cmd(ucharcmd){ while((LCD_Busy_Check()&0x80)==0x80); //忙等待

RS=0; //选择命令寄存器

RW=0; //写

EN=0; DP=cmd; EN=1; Delay(1); EN=0;}1602子程序//------------------------------------------------------//写数据函数//------------------------------------------------------voidLCD_Write_Data(uchardat){ while((LCD_Busy_Check()&0x80)==0x80); //忙等待

RS=1; EN=0; RW=0; DP=dat; EN=1; Delay(1); EN=0;}1602子程序//LCD初始化函数voidLCD_Init(void){ LCD_Write_Cmd(0x38); //三次显示模式设置,不检测忙信号

Delay(5); LCD_Write_Cmd(0x38); Delay(5); LCD_Write_Cmd(0x38); Delay(5); LCD_Write_Cmd(0x38); //显示模式设置,开始要求检测忙信号:8位、2行、5X7点阵

Delay(5); LCD_Write_Cmd(0x01); //清屏

Delay(5); LCD_Write_Cmd(0x06); //字符进入模式:屏幕不动,字符后移

Delay(5); LCD_Write_Cmd(0x0C); //显示开,光标关

Delay(5);}1602子程序//显示一行字符串函数//x:显示起始列号,0~15//y:显示起始行号,0:第一行,1:第二行//*str:字符串指针voidLCD_Display_String(ucharx,uchary,uchar*str) { uchari=0; //设置显示起始位置

if(y==0) LCD_Write_Cmd(0x80|x); if(y==1) LCD_Write_Cmd(0xC0|x); //显示字符串

for(i=0;i<16;i++) { LCD_Write_Data(str[i]); Delay(1); }}1602子程序调用示例#defineDPP0 //LCD数据I/O口sbitRS=P2^0; //LCD寄存器选择sbitRW=P2^1; //LCD读/写控制sbitEN=P2^2; //LCD使能端ucharLCD_Buf1[16]={"DATE2014-09-25"};ucharLCD_Buf2[16]={"TIME00:00:00"};voidmain(){ LCD_Init(); //液晶显示器初始化

while(1) { LCD_Display_String(0,0,LCD_Buf1); LCD_Display_String(0,1,LCD_Buf2); }}160

温馨提示

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

评论

0/150

提交评论