最新单片机原理与应用-9幻灯片.ppt
《最新单片机原理与应用-9幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机原理与应用-9幻灯片.ppt(127页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着“怎么这么热怎么这么热”,于是三,于是三五成群,聚在大树下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑五成群,聚在大树下,或站着
2、,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到“强子,别跑强子,别跑了,快来我给你扇扇了,快来我给你扇扇”。孩子们才不听这一套,跑个没完,直到累气喘吁吁,。孩子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,“你你看热的,跑什么?看热的,跑什么?”此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲的味道!蒲扇是中国传统工艺品,在我国
3、已有三千年多年的历史。取材的味道!蒲扇是中国传统工艺品,在我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过了我们的扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过
4、了我们的半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧道,袅道,袅独立式按键是指各按键相互独立地接通一条输入数据线,如图9-4所示。这是最简单的键盘结构,该电路为查询方式电路。当任何一个键按下时,与之相连的输入数据线即被清0(低电平),而平时该线为1(高电平)。要判别是否有键按下,用单片机的位处理指令十分方便。这种键盘结构的优点是电路简单;缺点是当键数较多时,要占用较多的线。 图9-4所示查询方式键盘的处理程序比较简单。程序中没有使用散转指令,并且省略了软件去抖动措施,只包括键查询、键功能程序转移。P0FP7
5、F为功能程序入口地址标号,其地址间隔应能容纳JMP指令字节;PROM0PROM7分别为每个按键的功能程序。程序清单(设为P1口):START:MOVA,#0FFH;输入时先置P1口为全1MOVP1,AMOVA,P1;键状态输入PL1:JNBACC.0,P0F;0号键按下转P0F标号地址JNBACC.1,P1F;1号键按下转P1F标号地址JNBACC.2,P2F;2号键按下转P2F标号地址JNBACC.3,P3F;3号键按下转P3F标号地址JNBACC.4,P4F;4号键按下转P4F标号地址JNBACC.5,P5F;5号键按下转P5F标号地址JNBACC.6,P6F;6号键按下转P6F标号地址J
6、NBACC.7,P7F;7号键按下转P7F标号地址LJMPSTART;无键按下返回P0F: LJMPPROM0 P1F: LJMPPROM1 ;入口地址表P7F: LJMPPROM7PROM0:;0号键功能程序LJMP START;0号键执行完返回PROM1:LJMP START PROM7:LJMP START由程序可以看出,各按键由软件设置了优先级,优先级顺序依次为07。【例9-1】 设计一个有4个独立式按键的键盘接口,并编写键扫描程序。解: 电路原理图如图9-5所示。KEY: MOVP1,#0FFH;P1口为输入,各位应先置位为高电平MOVA,P1;读取按键状态CPLA;取正逻辑,高电平
7、表示有键按下ANLA,#0FHJZKEY;A=0时无键按下,重新扫描键盘LCALL D10ms;有键按下延时去抖动MOVA,P1;读取按键状态CPLA;取正逻辑,高电平表示有键按下ANLA,#0FH;再判别是否有键按下JZKEY;A=0时无键按下重新扫描键盘MOVB,A;有键按下,键值送B暂存MOVA,P1CPLAANLANLA A,#0FH#0FH;判别按键释放;判别按键释放KEY1KEY1: JNZJNZKEY1KEY1;按键未释放,等待;按键未释放,等待LCALLLCALL D10msD10ms;释放,延时去抖动;释放,延时去抖动=MOVMOVA A,B B;取键值送;取键值送A A A
8、NL A,#0FH;判别按键释放KEY1:JNZ KEY1;按键未释放,等待 LCALLD10ms;释放,延时去抖动 MOV A,B;取键值送A JBACC.0,PKEY1;K1按下转PKEY1 JBACC.1,PKEY2;K2按下转PKEY2 JBACC.2,PKEY3;K3按下转PKEY3 JBACC.3,PKEY4;K4按下转PKEY4EKEY:RETPKEY1:LCALLK1;K1命令处理程序 RETPKEY2:LCALLK2;K2命令处理程序 RETPKEY3:LCALLK3;K3命令处理程序 RETPKEY4:LCALLK4;K4命令处理程序 RETD10ms:MOVR7,#10H
9、;10 ms延时子程序DS1: MOVR6,#0FFHDS2: DJNZ R6,DS2 DJNZ R7,DS1 RET 为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式,如图9-6所示。 以图9-6所示的44键盘为例,说明行扫描法识别哪一个按键被按下的工作原理。 首先判别键盘中有无键按下,由单片机口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。方法是: 向行线(图中水平线)输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根列线电平被拉至低电平,从而使列输入不全为1。 判断键盘中哪一个键
10、被按下是通过将行线逐行置低电平后,检查列输入状态实现的。方法是: 依次给行线送低电平,然后查所有列线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。 行扫描法识别键号的工作原理如下: 将第0行变为低电平,其余行为高电平时,输出编码为1110。然后读取列的电平,判别第0行是否有键按下。在第0行上若有某一按键按下,则相应的列被拉到低电平,则表示第0行和此列相交的位置上有按键按下。若没有任一条列线为低电平,则说明0行上无键按下。 将第1行变为低电平,其余行为高电平时,输出编码为1101。然后通过输入口读取各列的电平。检测
11、其中是否有变为低电平的列线。若有键按下,则进而判别哪一列有键按下,确定按键位置。 将第2行变为低电平,其余行为高电平时,输出编码为1011。判别是否有哪一列键按下的方法同上。 将第3行变为低电平,其余行为高电平时,输出编码为0111。判别是否有哪一列键按下的方法同上。 在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0时,便可判别闭合按键所在列的位置,根据行线位置和列线位置就能判断按键在矩阵中的位置,知道是哪一个键按下。 按键扫描的工作过程如下: 判断键盘中是否有键按下; 进行行扫描,判断是哪一个键按下,若有键按下,则调用延时子程序去抖动; 读取按键的位置码; 将按键的位置码转换为
12、键值(键的顺序号)0、1、2、F。 图9-7所示为44键盘扫描流程图。上述行扫描过程结束后得到的行号存放在R0中,列号存放在R2中。 键值(号)的获得(译码)通常采用计数译码法。这种方法根据矩阵键盘的结构特点,每个按键的值=行号每行的按键个数+列号,即键号(值)=行首键号+列号第0行的键值为: 0行4+列号(03)为0、1、2、3;第1行的键值为: 1行4+列号(03)为4、5、6、7;第2行的键值为: 2行4+列号(03)为8、9、A、B;第3行的键值为: 3行4+列号(03)为C、D、E、F。44键盘行首键号为0、4、8、C,列号为0,1,2,3。所以键值译码子程序为DECODE,该子程序
13、出口: 键值在A中。出口: 键值(键号)在A中KEY:MOV P1, #0F0H;令所有行为低电平MOV R7,#0FFH;设置计数常数KEY1: DJNZ R7,KEY1 ;延时 MOV A,P1;读取P1口的列值 ANL A,#0F0H;判别有键值按下吗? CPL A;求反后,有高电平就有键按下 JZ EKEY;无键按下时退出 LCALL DEL20 ms;延时20 ms去抖动SKEY: MOV A,#00;下面进行行扫描,1行1行扫 MOV R0,A;R0作为行计数器,开始为0 MOV R1,A;R1作为列计数器,开始为0 MOV R3 #0FEH;R3为行扫描字暂存,低4位为行扫描字S
14、KEY2:MOV A,R3 MOV P1,A;输出行扫描字,高4位全1 NOP NOP NOP;3个NOP操作使P1口输出稳定MOVA,P1;读列值MOVR1, A;暂存列值ANLA,#0F0H;取列值CPLA;高电平则有键闭合S123: JNZSKEY3;有键按下转SKEY3,无键按下时进;行一行扫描INCR0;行计数器加1SETBC;准备将行扫描左移1位,形成下一行;扫描字,C=1保证输出行扫描字中高4;位全为1,为列输入作准备,低4位中;只有1位为0MOVA,R3;R3带进位C左移1位RLCAMOVR3,A;形成下一行扫描字R3MOVA,R0CJNEA,#04H,SKEY1;最后一行扫(
15、4次)完了吗?EKEY:RET;列号译码SKEY3:MOV A,R1JNBACC.4,SKEY5JNBACC.5,SKEY6JNBACC.6,SKEY7JNBACC.7,SKEY8AJMPEKEYSKEY5:MOV A,#00HMOVR2, A;存0列号AJMPDKEYSKEY6:MOV A,#01HMOVR2,A;存1列号AJMPDKEYSKEY7:MOV A,#02HMOVR2,A;存2列号AJMPDKEYSKEY8:MOV A,#03HMOVR2,A;存3列号AJMPDKEY;键位置译码DKEY:MOVA,R0;取行号ACALL DECODEAJMPEKEY;键值(键号)译码DECODE
16、:MOVA,R0 ;取行号送AMOVB,#04H;每一行按键个数MULAB;行号按键数ADDA,R2;行号按键数+列号=键值(号),;在A中RET解: 原理如图9-8所示。 判断是否有键按下:将列线P1.0、P1.1送全0,查P0.0、P0.1是否为0。 判断哪一个键按下:逐列送0电平信号,再逐行扫描是否为0。 键号=行首键号+列号KEY: LCALL KS;调用判断有无键按下子程序JZKEY;无键按下,重新扫描键盘LCALL T10 ms;有键按下,延时去抖动LCALL KSJZKEYMOVR2,#0FEH;首列扫描字送R2MOVR4,#00H;首列号#00H送入R4MOVP0,#0FFHL
17、K1:MOVP1,R2;列扫描字送P1口MOVA,P0JBACC.0,ONE;0行无键按下,转1行MOVA,#00H;0行有键按下,该行首号#00H送ALJMPKP;转求键号ONE: JBACC.1,NEXT ;1行无键按下,转下列MOVA,#02H;1行有键按下,该行首号#02H送AKP:ADDA,R4;求键号,键号=行首键号+列号PUSHACC;键号进栈保护LK:LCALL KS;等待键释放JNZLK;未释放,等待POPACC;键释放,键号送ARET;键扫描结束,出口状态: (A)=键号NEXT:INCR4;列号加1MOVA,R2;判断两列扫描完了吗JNBACC.1,KND;两列扫描完,返
18、回RLA;未扫描完,扫描字左移一位MOVR2,A;扫描字入R2AJMPLK1;转扫下一列KND: AJMPKEYKS:MOVP1,#0FCH;全扫描字送P1口MOVP0,#0FFHMOVA,P0;读入P0口行状态CPLA;取正逻辑,高电平表示有键按下ANLA,#03H;保留P0口低2位(屏蔽高6位)RET;出口状态: (A)0时有键按下T10 ms:MOV R7,#10H;延迟10 ms子程序TS1: MOVR6,#0FFHTS2: DJNZR6,TS2DJNZR7,TS1RET为了提高CPU的效率,可以采用中断扫描工作方式,即只有在键盘有键按下时才产生中断申请;CPU响应中断,进入中断服务程
19、序进行键盘扫描,并做相应处理。中断扫描工作方式的键盘接口如图9-9所示。P1.4P1.7作键输出线,P1.0P1.3作扫描输入线。扫描时,使P1.4P1.7位清0。当有键按下时,INT1端为低电平,向CPU发出中断申请。若CPU开放外部中断,则响应中断请求,进入中断服务程序。若图9-6中为48的32键,设0、1、2、E、F共16个键为数字键;其他16个键为功能键,键值为1631,即10H1FH,各功能键入口程序地址标号分别为AAA、BBB、PPP。当对键盘进行扫描并求得键值后,还必须做进一步处理。方法是首先判别其是功能键还是数字键。若为数字键,则送显示缓冲区进行显示;若为功能键,则由散转指令“
20、JMP A+DPTR”转到相应的功能键处理程序,完成相应的操作。完成上述任务的子程序流程图如图9-10所示。功能键地址转移程序如下:BUFFEQU30HKEYADR:MOVA,BUFF;键值ACJNEA,#0FH,KYARD1AJMPDIGPRO;等于F,转数字键处理KYARD1:JCDIGPRO;小于F,转数字键处理KEYTBL:MOVDPTR,#JMPTBL;送功能键地址表指针CLRC;清进位位SUBBA,#10H;功能键值(10H1FH)减16RLA;(A)2,使(A)为偶数: 0、2、4、JMPA+DPTR;转相应的功能键处理程序JMPTBL:AJMPAAA;AJMPBBB;AJMPC
21、CC;AJMPDDD;AJMPEEE;AJMPFFF;AJMPGGG;AJMPHHH;AJMPIII;AJMPJJJ;AJMPKKK;AJMPLLL;AJMPMMM;AJMPNNN;AJMPOOO;AJMPPPP;均为2字节,转到16个功能键的相应入口地址。(A)=0、2、4、6散转到AAA、BBB、CCC、DDD、PPP 单片机应用系统中使用的显示器主要有: 发光二极管显示器,简称LED(Light Emitting Diode); 液晶显示器,简称LCD(Liquid Crystal Display); CRT显示器 单片机中通常使用7段LED有共阴极和共阳极两种,如图9-11所示。 发光
22、二极管的阳极连在一起的(公共端K0)称为共阳极显示器 阴极连在一起的(公共端K0)称为共阴极显示器。 一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段)ag,另一个小数点为dp发光二极管。 当在某段发光二极管上施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,须外加限流电阻。以共阴极LED为例,如图9-11(a)所示,各LED公共阴极K0接地。若向各控制端a、b、g、dp顺次送入11100001信号,则该显示器显示“7.”字型。共阴极与共阳极7段LED显示数字0F、“-”符号及“灭”的编码(a段为最低位,dp点为最高位)如表9-1所列
23、。显示字符012345678共阴极段选码3F(BF)06(36)5B(DB)4F(CF)66(F6)6D(FD)7D(FD)07(87)7F(FF)共阳极段选码C0(40)F9(79)A4(24)B0(30)99(19)92(12)82(02)F8(78)80(00)显示字符9ABCDEF-熄灭共阴极段选码6F(EF)77(F7)7C(FC)39(B9)5E(DE)79(F9)71(F1)40(C0)00(80)共阳极段选码90(10)88(08)82(03)C6(46)A1(21)86(06)8E(0E)BF(3F)FF(7F) LED显示器有静态显示和动态显示两种方式。 静态显示就是当显示
24、器显示某个字符时,相应的段(发光二极管)恒定地导通或截止,直到显示另一个字符为止。 LED显示器工作于静态显示方式时,各位的共阴极(公共端K0)接地;若为共阳极(公共端K0),则接+5v电源。每位的段选线(adp)分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。 因此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用口线资源较多。在显示位数较多的情况下,一般都采用动态显示方式。在多位LED显示时,将所有位的段选线并联在一起,由一个8位口控制。而共阴(或共阳)极公共端分别由相应的线控制,实现各位的分时选通。图9-12
25、所示为6位共阴极LED动态显示接口电路。图9-126位LED动态显示接口电路图9136位动态扫描显示状态例如,要求显示“E020”时,I/O口1和I/O口2轮流送入段选码、位选码及显示状态如图9-13所示。段选码、位选码每送入一次后延时1 ms,因人眼的视觉暂留时间为 s(100 ms),所以每位显示的间隔不必超过20 ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描显示。 图9-14图中,P0口输出段选码,P1口输出位选码,位选码占用输出口的线数决定于显示器位数,比如6位就要占6条。 75452(或7406)是反相驱动器(30 V高电压,OC门)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 原理 应用 幻灯片
限制150内