




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、讲座四v1.多位led显示v2.键盘管理模块v3.点阵、字符液晶显示器v4.字模提取软件led的工作原理的工作原理(a)典型的七段式led器件 (b) 共阳极led (c) 共阴极led四位数七段led数码管模块(左为正面图、右为背面图)led数码管和单片机的连接1 单片机p2.0p2.7abcdefgdp +5v +5vabcdefgdpp0.0p0.7编程:(以共阳极为例)movp2,#11111001b(0f9h)movp0,#10100100b(0a4h)sjmp$静态连接静态显示led数码管和单片机的连接2 单片机p2.0p2.7abcdefgdpp0.0p0.1p0.2p0.3想一
2、想:和静态连接的区别在哪里? 单片机 p2.0p2.7abcdefgdpp0.0p0.1p0.2p0.3静态、动态显示方式总结q静态显示连接q所有led的位选均共同连接到+vcc或gnd,每个led的8根段选线分别连接一个8位并行i/o口。q原理简单;显示无闪烁;占用i/o资源较多。v动态显示连接 所有led的段选线共同连接在一起共用一个 8位i/o口而每个led的位选分别由一根相应的i/o口线控制。因此必须采用动态扫描显示方式。例:74ls164+led(proteus)独立键盘case 0 x01: key1(); /键盘1功能函数。 break; case 0 x02: key2();/
3、键盘2功能函数。 break; case 0 x04: key3(); /键盘3功能函数。 break; case 0 x08: key4();/键盘4功能函数。 break; case 0 x10: key5(); /键盘5功能函数。 break; case 0 x20: key6();/键盘6功能函数。 break; case 0 x40: key7(); /键盘7功能函数。 break; case 0 x80: key8();/键盘8功能函数。 break; default:break; 说明 :采用轮询方式查询p1口,采用延时法消除键盘抖动*/#include /* 函数名称:dela
4、y()功能:用于键盘消抖的延时函数说明:无 入口参数:无返回值 :无*/void delay() unsigned char i; for (i=400;i0;i-);/ 主函数 main()void main(void) unsigned char key; while(1) p1=0 xff; /要想从p1口读数据必须先给p1口写1 key=p1; /读入p1口的数据,赋值给变量key if(key!=0 x00) /判断是否有键按下,当没有键按下时,p1口的数据为0 x00 delay(); /延时去抖 key=p1; /再次读入p1口的数据,赋值给变量key if(key!=0 x00
5、) /再次判断是否有键按下 switch(key) 矩阵式键盘控制4x4 键盘的内部结构市售一体成型的4x4键盘低电平扫描按下“0”键x3x2x1x0y3y2y1y0动作按键11 101110key 01101key 11011key 20111key 311 011110key 41101key 51011key 60111key 710 111110key 81101key 91011key a0111key b01 111110key c1101key d1011key e0111key fxx xx1111无按键按下低电平动作键盘动作分析表高电平扫描按下“0”键x3x2x1x0y3y2
6、y1y0动作按键00 010001key 00010key 10100key 21000key 300 100001key 40010key 50100key 61000key 701 000001key 80010key 90100key a1000key b10 000001key c0010key d0100key e1000key fxx xx0000无按键按下高电平动作键盘动作分析表44键盘扫描电路基本原理:分行扫描检查是否有键按下若有,确定哪个键被按下1. 行扫描法的原理行扫描法的原理 判断哪一个键被按下的流程 p1=0 xfe; n=p1; n&=0 xf0; if(n!
7、=0 xf0) delay(); p1=0 xfe; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(0);break; case(0 xd0):display(1);break; case(0 xb0):display(2);break; case(0 x70):display(3);break; p1=0 xfd; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xfd; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(
8、0 xe0):display(4);break; case(0 xd0):display(5);break; case(0 xb0):display(6);break; case(0 x70):display(7);break; p1=0 xfb; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xfb; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(8);break; case(0 xd0):display(9);break; case(0 xb0):display(
9、10);break; case(0 x70):display(11);break; p1=0 xf7; n=p1; n&=0 xf0; if(n!=0 xf0) delay(); p1=0 xf7; n=p1; n&=0 xf0; if(n!=0 xf0) switch(n) case(0 xe0):display(12);break; case(0 xd0):display(13);break; case(0 xb0):display(14);break; case(0 x70):display(15);break; void display(unsigned char i)
10、 unsigned char table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e; p2=0 xfe; p0=tablei;2. 行反转法的原理行反转法的原理行线、列线分别接并行口行线输出,列线输入列线输出读得的值,行线输入行反转法的流程 uchar keyscan(void)/键盘扫描函数,使用行列反转扫描法 uchar cord_h,cord_l;/行列值 p3=0 x0f; /行线输出全为0 cord_h=p3&0 x0f; /读
11、入列线值 if(cord_h!=0 x0f) /先检测有无按键按下 delay(100); /去抖 if(cord_h!=0 x0f) cord_h=p3&0 x0f; /读入列线值 p3=cord_h|0 xf0; /输出当前列线值 cord_l=p3&0 xf0; /读入行线值 return(cord_h+cord_l);/键盘最后组合码值 此处仿真此处仿真测控系统中必不可少的组成人机界面图1 测控系统的组成部分液晶显示器的原理v字符型液晶(1602)方法:通过向指定显示位置对应的ddram中写数据来显示字符。例如:在第2行第2列显示字符 a,查表1 可知a对应的代码为01
12、100001即0 x31,则可向地址0 x41中写入数据0 x31即可显示。图2 1602的显示地址与ddram地址点阵型液晶(12864)在点阵型lcd上显示一幅图片或是字符,如上图所示,只需黑色的部分点亮,空白的点置0即可。可以将lcd看成128*64个led灯来帮助理解。正面图正面图背面图背面图12864分类12864点阵液晶显示屏有三种控制器,分别是ks0107(ks0108)、t6963c和st7920,三种控制器主要区别是:ks0107(ks0108)不带任何字库、t6963c带ascii码,st7920带国标二级字库(8千多个汉字)。图3 12864的ddram地址xy地址计数器
13、实际上是作为ddram的地址指针,x地址计数器为ddram的页指针,y地址计数器为ddram的y(列)地址指针。x地址计数器没有记数功能,只能用指令设置。y地址计数器具有循环记数功能,各显示数据写入后,y地址自动加1,y地址指针从0到63。从上图可以看出数据按字节在屏幕上是竖向排列的。上方为低位,下方为高位。因此在横向上(也就是y)就一共是128列数据。分为cs1和cs2两个64列来写入。在竖方向上(也就是x)一字节数据显示8个点,竖向64个点分为8个字节,称做8页(x=0-7)。了解这些后我们就知道要满屏显示一张图就要从y=0127、x=07一共写1288=1024个字节的数据。同样在at8
14、9s51中存一张图就要1024个字节的空间。 图片在12864上的显示v简单来说,主要分为两步:v1)将一幅图片转化为一系列二进制数据v2)将数据按字节(8位)写入液晶对应的ddram由图3可知,12864的ddram有128*8=1024个地址,只需将图片转化的数据按字节写入这其对应的ddram地址即可。字符在12864上的显示上图中,汉字为16*16点阵,ascii码为8*16点阵,同图片一样,一个汉字(ascii)由16*2(8*2)个字节数据组成,字符显示原理与图片一致,只需将字符代码写入相应ddram地址。字体大小可以根据需要改变。小结v简而言之,无论是字符型还是点阵型lcd,其基本
15、原理都是通过将数据写入所对应的ddram地址中来显示所需要的图形或是字符。v12864点阵型液晶对应的ddram有1024个地址,当需显示的字符或图片已转为二进制数据时,确定将数据写入对应的ddram地址就是你所要做的工作!单片机与液晶显示器的硬件连接v液晶显示器(12864)主要包含了以下接口(图6) :v1)使能e(51的rd和wr经或非门接lcd的使能e)v2)片选cs1(左半屏)、cs2(右半屏),见图3v3)命令/数据选择rs(0命令,1数据)v4)读/写选择r/w(0写,1读)v5)数据总线db0db7v6)负压产生和负压输入(对比度)调整v7)复位rstv8)电源与地和背景光电源
16、软件编程注意:程序的编写与硬件是分不开的。以图6为例,a11a8对应cs2、cs1、r/w、rs,未用的地址线为高。见图5则当向12864的左半屏(cs1=1,cs2=0)写(r/w=0)数据(rs=1)时,总线地址为0 x1111010111111111。即0 xf5ff。c文件中定义如下:#define wd1 xbyte0 xf5ff定义了总线地址后,对外部地址的操作变得非常简单。如向左半屏写数据0 xff : wd1=0 xff 读左半屏数据 : data=rd1(data存储读取到的数据)举例v下面简单介绍程序编写的流程v1)定义所有总线地址v#define wi1 xbyte0 x
17、f4ff/向左半屏写命令v#define wd1 xbyte0 xf5ff /向左半屏写数据v#define ri1 xbyte0 xf6ff /读左半屏命令v#define rd1 xbyte0 xf7ff /读左半屏数据v#define wi2 xbyte0 xf8ff /向右半屏写命令v#define wd2 xbyte0 xf9ff/向右半屏写数据v#define ri2 xbyte0 xfaff /读右半屏命令v#define rd2 xbyte0 xfbff/读右半屏数据v2)编写底层程序(查忙,写数据,读数据)查忙(读bf标志即db7总线,亦即读命令)bf=1表示模块在内部操作,
18、此时模块不接受外部指令和数据; bf=0时模块为准备状态,随时可接受外部指令和数据;b=ri1 或者 b=ri2,观察b中最高位是否为0,否则忙。写数据awd1=a或者wd2=a读数据到datadata=rd1或者data=rd2注意:无论是写数据还是读数据一定要先查忙(对左右半屏读命令),只有在bf=0时才能对lcd进行操作3)lcd初始化包含开显示(0 x3f),起始行(0 xc0),设置起始页地址(0 xb8)和y地址(0 x40),即分别向lcd的左右半屏写命令。可按括号内的数据进行初始化。具体可查阅12864的pdf资料。4)清屏(向ddram所有地址写0)显示一幅新图片前必须清屏,
19、否则之前显示的数据仍存在于液晶上。5)指定位置显示一个ascii码首先将起始页地址和起始y地址设置好,写入ascii码的上半部分(8个字节数据)重新设置起始页地址和起始y地址,写入ascii码的下半部分(另8个字节数据)注意:在对ddram进行读写操作后,y地址指针自动加1,指向下一个ddram 单元。6)指定位置显示汉字 同显示ascii码基本相似,只是上下部分分别有16个字节数据需要写入ddram。7)显示一张图片对于图片,必然从第0页第0列开始,可以一页一页(不分左右屏)显示,也可以先写左半屏后写右半屏。所谓的两种方法差别正在设置的起始页地址和y地址的不同。图3小结v12864点阵型液晶
20、对应的ddram有1024个地址,无论是显示字符还是图片,灵活设置起始页地址和y地址,可以达到想要的结果。vc语言中用到总线操作必须添加头文件“absacc.h”,另如使用仿真器,需在debug中的setting里选择使用xbus(数据总线)。v可使用取字模软件将字符或图片转为一系列二进制数据。写程序:写程序:附件v3)写数据datvvoid writedata(uchar dat,bit side)vv checkbusy(side);vif(side=left)vwd1=dat;velsevwd2=dat;v写命令cmd(side0为左,1为右)void writecmd(uchar cm
21、d, bit side) checkbusy(side);if(side=left)/left=0(宏定义)wi1=cmd;elsewi2=cmd;读操作时序v1)查忙程序vvoid checkbusy(bit side)/side0为左1为右vv unsigned char buf=0 xff;v while(buf)vif(!side)vbuf=ri1;/单片机命令velsevbuf=ri2; v buf&=0 x80; /取d7若为1则忙,忙则buf != 0(lcd回信号)vv初始化:初始化:v4)初始化程序vvoid lcd_init()vv writecmd(0 x3f,l
22、eft);/显示开v writecmd(0 x3f,right);vwritecmd(0 xc0,left);/起始行v writecmd(0 xc0,right);vwritecmd(0 xb8,left);vwritecmd(0 xb8,right);/起始x,y坐标(0,0)vwritecmd(0 x40,left);vwritecmd(0 x40,right);v5)清屏(一般dat=0)vvoid lcd_clear(uchar dat)vv uchar i,j;vfor(i=0;i8;i+)vwritecmd(0 xb8+i,left);vwritecmd(0 xb8+i,righ
23、t);vwritecmd(0 x40,left);vwritecmd(0 x40,right);vfor(j=0;j64;j+)vwritedata(dat,left);vwritedata(dat,right);vvv总结v理解12864是如何显示字符和图形的v知晓单片机与12864的硬件连接v根据硬件接线,确定所有的总线地址(8个)v明白如何通过总线操作对12864进行数据与命令的交换v参考12864的命令字进行软件编程v学会如何使用取字模软件图6 at89c51与12864的硬件连接lcd12864模块的20个引脚定义如下:1.vss 逻辑电源地2.vdd逻辑电源正5v3.v0lcd驱动
24、电压4.rs 数据/指令选择:高电平为数据, 低电平为指令5.r/w读/写选择:高电平为读数据, 低电平为写数据6.e读写使能,高电平有效, 下降沿锁定数据7.db0数据输入输出引脚8.db1数据输入输出引脚9.db2数据输入输出引脚10.db3数据输入输出引脚11.db4数据输入输出引脚12.db5数据输入输出引脚13.db6数据输入输出引脚14.db7数据输入输出引脚15.cs1片选择号,低电平时选择前64列16.cs2片选择号,低电平时选择后64列17.ret复位信号,低电平有效。18.vee输出15v电源给v0提供驱动电源19.a背光电源led正极20.k背光电源led负极图图5.lc
25、d引脚图引脚图带字库12864v带字库的带字库的12864的基本特性:的基本特性:(1)显示分辨率)显示分辨率:12864点点 (就是(就是64行,每行行,每行128个点)个点)(2)内置汉字字库,提供)内置汉字字库,提供8192个个1616点阵汉字(点阵汉字(12864内内部有一个部有一个cgrom,内容掉电可以存储,所以汉字字库会,内容掉电可以存储,所以汉字字库会存放在里面。满屏最多显示存放在里面。满屏最多显示4*8=32个汉字)。个汉字)。(3)内置)内置 128个个168点阵点阵ascii字符(字符(12864一次最多可以一次最多可以显示显示4*16=64个个ascii字符)。字符)。
26、(4)通讯方式:串行、并口可选)通讯方式:串行、并口可选 (数据写入和读出可以是以(数据写入和读出可以是以串行的方式,也可以是以并行的方式。)串行的方式,也可以是以并行的方式。)所以只要我们写入指令所以只要我们写入指令0 x01,整个屏幕就被清空了。,整个屏幕就被清空了。lcd初始化:初始化:一般用指令一般用指令0 x0c,开显示,关闭光标,开显示,关闭光标 既可以控制扩展功能,又可以控制绘图显示的指令!用既可以控制扩展功能,又可以控制绘图显示的指令!用0x30,基本指令集,基本指令集指令指令0x06光标右移光标右移1.汉字显示坐标汉字显示坐标 显示汉字一屏可以显示显示汉字一屏可以显示4*8=
27、32个个16*16的汉字。实的汉字。实物图对照下,把地址也表物图对照下,把地址也表到实物图上去了。到实物图上去了。 操作的具体流程:操作的具体流程:a进入基本指令模式(指令进入基本指令模式(指令16,指令为,指令为0 x30)b写入写入xy地址(地址需要查上表,用指令地址(地址需要查上表,用指令8,也就是写入,也就是写入ddram)c写入欲写入的汉字的编码(一般定义一个数组,直接把汉字存放在里面即可,写入欲写入的汉字的编码(一般定义一个数组,直接把汉字存放在里面即可,存储的时候它就是以编码的形式。例如:存储的时候它就是以编码的形式。例如:uchar code dis1=“南京师范大学南京师范大
28、学;)例程代码:例程代码:uchar code dis3 = “南京师范大学南京师范大学;void display_hz()uchar i;write_comd(0 x30);/基本指令基本指令write_comd(0 x80);/写在第一个位置上写在第一个位置上for(i=0;i8;i+)write_da(dis3i);/把数据送到端口把数据送到端口delay_ms(5);/延时一会延时一会 2.ascii显示坐标:显示坐标:它的坐标和汉字的坐标是一样的,只不过一个汉字的位置可以放两个它的坐标和汉字的坐标是一样的,只不过一个汉字的位置可以放两个ascii码字符。因为前者为码字符。因为前者为1
29、6*16后者为后者为16*8,这样一行可以显示,这样一行可以显示16个个ascii码了。在显示一串字符穿的时候,给一个起始地址,屏幕就码了。在显示一串字符穿的时候,给一个起始地址,屏幕就会依次显示出来(自动加一功能)。会依次显示出来(自动加一功能)。 操作的具体流程:操作的具体流程:a进入基本指令模式(指令进入基本指令模式(指令16,指令为,指令为0 x30)b写入写入xy地址(地址需要查上表,用指令地址(地址需要查上表,用指令8,也就是写入,也就是写入ddram)c写入欲写入的汉字的编码(一般定义一个数组,直接把写入欲写入的汉字的编码(一般定义一个数组,直接把asacii码存放码存放在里面即可,存储的时候它就是以编码的形式。例如:在里面即可,存储的时候它就是以编码的形式。例如:uchar code dis1=sh;)例程代码:例程代码:uchar code dis2 = sh;void display_ascii()uchar i;write_comd(0 x30);/基本指令基本指令write_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一活动编花篮活动方案
- 六一活动跳舞蹈活动方案
- 六一演出带队活动方案
- 六一童心企划活动方案
- 六一美餐活动方案
- 六一节活动签到活动方案
- 六堡镇植树活动方案
- 六年级组织植树活动方案
- 医护礼仪考试试题及答案
- 冶金教资考试试题及答案
- 2025-2030中国医疗美容行业市场深度调研及竞争格局与投资研究报告
- 安徽省合肥市蜀山区2025年数学五下期末监测试题含答案
- 《基于CREAM方法对某核电站调试阶段人因失误原因分析案例报告》17000字【论文】
- 2025年宿迁中考试题及答案英语
- 2025年麻精药品考试试题及答案
- DBJ51T062-2016 四川省旋挖孔灌注桩基技术规程
- DB11-T 420-2019 电梯安装、改造、重大修理和维护保养自检规则
- 湖南省长沙五中学2025届中考生物适应性模拟试题含解析
- 《银行个人理财业务PEST探析和SWOT探析》4000字
- 从细节开始为家人制定科学合理的膳食计划
- 医院医用耗材SPD服务项目投标方案
评论
0/150
提交评论