《接口技术》PPT课件.ppt

上传人:小飞机 文档编号:5516362 上传时间:2023-07-15 格式:PPT 页数:99 大小:1.93MB
返回 下载 相关 举报
《接口技术》PPT课件.ppt_第1页
第1页 / 共99页
《接口技术》PPT课件.ppt_第2页
第2页 / 共99页
《接口技术》PPT课件.ppt_第3页
第3页 / 共99页
《接口技术》PPT课件.ppt_第4页
第4页 / 共99页
《接口技术》PPT课件.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《《接口技术》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《接口技术》PPT课件.ppt(99页珍藏版)》请在三一办公上搜索。

1、1,接口技术,显示接口 开关量输入与键盘接口 A/D转换接口 D/A转换接口,2,显示器接口,显示器是单片机应用系统常用的输出设备,用来显示单片机的键入值、中间信息及运算结果等。单片机应用系统常用显示器LED(发光二极管显示器、数码管显示器)和LCD(液晶显示器)。,P.93,3,一、数码管显示器的结构,ILED,ILED=320mA,P.163,“0”亮,“1”亮,限流电阻,限流电阻,UF=1.51.8V,UF=1.51.8V,“0”驱动:电平稳定,驱动电流大。,“1”驱动:电平不太稳定,驱动电流小。,LED驱动电路:,ILED=320mA,“1”:2.45V,“0”:0.40.8V,不建议

2、!,5,二、字段码 常用一个8位并行I/O口的输出(如P2.7P2.0)对应控制数码管的dpa以显示不同字形。从I/O口输出的驱动数码管以显示不同字形的数据称为字段码(字形码、显示代码)。,【例】共阳极结构的数码管显示“0”的字段码为:,6,共阴极段码和共阳极段码互为相反。,各种显示字符的字段码,“1”有效,“1”有效,“0”有效,“0”有效,7,三、显示字符转换为字段码(查表法),“P”的字段码,73H,“F”的字段码,71H,“4”的字段码,66H,“3”的字段码,4FH,“2”的字段码,5BH,“1”的字段码,06H,“0”的字段码,3FH,TAB+00H,8,1.静态显示方式,共阴极或

3、共阳极点连接在一起接地或+5V。,每位的段选线与一个8位并行口连接。,四、显示方式及其接口,9,【例】用P2、P3口作为静态显示接口,限流电阻R=(Vcc-VF)/IF,10,ORG 0000HLJMP MAINORG 0030H MAIN:MOV 40H,#06HMOV 41H,#08H;显示缓冲单元MOV DPTR,#DTABMOV A,40HMOVC A,A+DPTR;查表求字形码MOV P3,AMOV A,41HMOVC A,A+DPTRMOV P2,ASJMP$,DTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,8

4、3H DB 0C6H,0A1H,86H,8EH;0F的字形码,程序实现将41H、40H内容显示在数码管上。,11,2.动态显示方式原理,所有字段控制共用一个I/O口,每个字位的控制占用一根I/O口线,显示时,在某一时刻,字段口输出第i位的字段码,同时字位口驱动第i位的COM端使其点亮,如此逐位轮流点亮形成稳定的n位数码显示效果。,12,【例】一个8位LED动态显示的过程(以共阴极数码管为例)。,P2.0/A8,FEFCH,FEFEH,FEFDH,控制口 FEFFH方式字:89H=10001001B,字段输出口0对应段亮,字位输出口1对应位显示,4X4键盘接口初始为输入,【例】实验板扩展82C5

5、5A(U3)驱动键盘、显示电路,U3 82C55A,左,右,PB7,PB0,74LS240八反相三态缓冲器,a,dp,PA7,PA0,输出,输出,输入(暂时),PB0,PB7,PA7,PA0,b,第0位,第7位,动态显示方式,实验板LED数码显示器动态驱动的编程逻辑关系:字段驱动:A口8个输出端通过八反相三态缓冲器74LS240驱动阳极段线,从A口输出的8位码与字段的关系如下:字位驱动:B口输出通过双与非OC驱动器75452驱动8个LED数码显示器的公共阴极端,从B口输出的8位码与字位的关系如下:,OC驱动 30V500mA,字段输出口:FEFCH,0对应的段亮,各数据位驱动对应的段:dp g

6、 f e d c b a,字位输出口:FEFDH,1对应的位显示,各数据位驱动的显示位:7位.1 0位(右),逐位驱动,动态更新,80遍/秒以上不频闪,SN75452B 双路非常高速大电流外设驱动器:,实验板动态显示电路简单显示功能驱动程序的设计【例】在右边第2位显示“P”字样:ORG 0000H LCALL D60MS;稍加延时(60mS),等待各芯片均上电复位结束 MOV DPTR,#0FEFFH;82C55A(U3)控制口地址 MOV A,#89H;82C55A(U3)初始化方式字 10001001B=89H MOVX DPTR,A;A、B口输出驱动字段、字位,C口输入 MOV DPTR

7、,#0FEFDH;8255-B口(字位码输出口)MOV A,#02H;位码 0000 0010 B,驱动右边第2位 MOVX DPTR,A;输出字位码 MOV DPTR,#0FEFCH;8255-A口(字段码输出口)MOV A,#8CH;“P”的字段码 1000 1100 B MOVX DPTR,A;输出字段码 SJMP$D60MS:;软件延时40mS子程序 RET END,dp g f e d c b a,【例】在左边两位稳定显示“HA”字样 ORG 0000H;等待复位及82C55(U3)初始化 LOOP:MOV DPTR,#0FEFDH;8255-B口(字位码输出口)MOV A,#80H

8、;位码 1000 0000 B MOVX DPTR,A;输出字位码MOV DPTR,#0FEFCH;8255-A口(字段口)MOV A,#89H;“H”的字段码 1000 1001 BMOVX DPTR,A;输出字段码LCALL D1MS;保持显示1毫秒 MOV DPTR,#0FEFDH;8255-B口(字位码输出口)MOV A,#40H;位码 0100 0000 B MOVX DPTR,A;输出字位码MOV DPTR,#0FEFCH;8255-A口(字段口)MOV A,#88H;“A”的字段码 1000 1000 BMOVX DPTR,A;输出字段码LCALL D1MS;保持显示1毫秒 SJ

9、MP LOOP D1MS:;软件延时1mS子程序 D60MS:;软件延时60mS子程序 END,若改为0.05mS-窜显?若改为20mS-频闪?,h g f e d c b a,h g f e d c b a,【例】以1S间隔在8个数码显示器上巡回显示“L”字样 ORG 0000H;等待复位及8255(U3)初始化 MOV DPTR,#0FEFCH;8255-A口(字段码输出口)MOV A,#0C7H;“L”的字段码 1100 0111 BMOVX DPTR,A;输出字段码 MOV DPTR,#0FEFDH;8255-B口(字位码输出口)MOV A,#01H;初始位码 0000 0001 LO

10、OP:MOVX DPTR,A;输出新的字位码 LCALL D1S;保持1秒时间 RL A;字位码循环左移一位 SJMP LOOP D1S:;软件延时1S子程序 D60MS:;软件延时60mS子程序 END。,h g f e d c b a,1S,若改为0.01、0.001S其效果?,C4-7:MOV A,R0;取当前数据(字符在字段码表中的序号)ADD A,#TAB-NEXTPC;加上TAB与NEXTPC差址(此例为#01H)MOVC A,A+PC;查表得相应字段码NEXTPC:RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H;字段码表:06 DB 0F8H

11、,80H,90H;字段码表续:79,C4-7:MOV A,R0;取当前数据(字符在字段码表中的序号)MOV DPTR,#TAB;DPTR指向字段码表首地址 MOVC A,A+DPTR;查表得相应字段码NEXTPC:RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H;字段码表:06 DB 0F8H,80H,90H;字段码表续:79,查表法求09的BCD码对应的七段码程序例,编写查表求七段码子程序,功能描述:已知非压缩BCD码,求对应的字段码,段码“0”有效,a段最低位;入口条件:R0指向存放09的非压缩BCD码单元;出口条件:查获的BCD码存放在A中;,方法一:

12、采用DPTR为基地址的查表指令,方法二:采用PC为基地址的查表指令,从SW0SW3输入BCD码查表求七段码且驱动显示的程序方法,实验板上的SW0SW7电平开关可用于输入8位二进制数据,要求实现读入SW0SW7电平开关所拨动设定的十进制09的非压缩BCD码,转换为对应的七段码,驱动最左边的LED数码显示器显示该数字。程序步骤如下:设已编写查表求七段码子程序:C4-7,设定栈底指针稍加延时(40mS),等待各芯片均上电复位结束 对82C55A(U3)初始化为A、B口输出驱动字段、字位,C口输入输出最左位有效的字位码输入SW0-7电平屏蔽高四位后存放于44H单元,防止非全0的高四位影响查表结果令R0

13、指向44H单元,这是调用C4-7子程序前须准备好的入口条件LCALL C4-7,得到的七段码存放于A中后返回将七段码输出驱动LED数码显示器转回输入SW0-7电平处,反复执行:检测输入转七段码输出更新显示,【TEST2016.ASM中拆字、动态显示子程序编写实例】,程序实现将时钟时间单元3CH(时)、3BH(分)、3AH(秒)显示在数码管右边6位,过程如下。,拆字,7 6 5 4 3 2 1 0,查表转换成字段码、输出显示,显示缓冲单元(显存),(时),(分),(秒),压缩BCD码,非压缩BCD码,显示A/D值,【TEST2016.ASM中拆字子程序编写实例】CZ:MOV R0,#3AH;拆字

14、子程序。R0指向秒分时单元首址(秒单元)MOV R1,#30H;R1指向显示缓冲单元首地址(对应最右位)CZ1:MOV A,R0;取当前压缩BCD码ANL A,#0FH;保留低4位(个位)MOV R1,A;送非压缩BCD码个位单元INC R1;R1指向高位单元(十位)MOV A,R0;再取原压缩BCD码ANL A,#0F0H;保留高4位(十位)SWAP A;交换到低4位MOV R1,A;送非压缩BCD码十位单元INC R1;指向显缓下一个个位单元INC R0;指向下一个时钟BCD码单元CJNE R0,#3DH,CZ1;未完继续 改CJNE R1,#36H,CZ1也可RET;子程序返回,条件控制

15、循环法,37H36H35H34H33H32H31H30H,0100 0101,0101 1001,0000 1000,3DH3CH3BH3AH,显示缓冲单元,最左次左.次右最右,08:59:45,时分秒,非压缩BCD码,压缩BCD码,(显存),R0,R1,DISP:MOV R0,#30H;显示更新子程序。显示缓冲单元首地址MOV R3,#01H;字位码初值(从最右位起)MOV A,R3;取初始字位码 DISP1:MOV DPTR,#0FEFDH;8255-B口(字位码输出口)MOVX DPTR,A;输出当前字位码MOV A,R0;从显缓取当前位显示数据码 ADD A,#TAB-NEXTPC;加

16、TAB与NEXTPC差址=12H=18 MOVC A,A+PC;查表得相应字段码NEXTPC:MOV DPTR,#0FEFCH;8255-A口(字段码输出口)MOVX DPTR,A;输出新的字段码LCALL D1MS;保持显示1毫秒INC R0;指向下一显示缓冲单元MOV A,R3;取出字位码JB ACC.7,DISP2;判已显示到最左位否RL A;未完,字位码左移1位MOV R3,A;回存新字位码LJMP DISP1;转下一位的显示驱动 DISP2:RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;“0”“9”段码 DB 88H,

17、83H,0C6H,0A1H,86H,8EH,0BFH,00H,0FFH;“A”“F”,“-”,全亮,空格,05H+TAB-NEXTPC,如果取到的是05H,则以(05H+TAB-NEXTPC+PC)为址读得92H,地址相差18个,TEST2016.ASM 显示更新子程序的设计:,TAB+0AH+0BH+0CH+0DH+0EH+0FH+10H+11H+12H TAB+10H+11H+12H,从显缓取的是要显示的字符在字段码表中的序号,3CH3BH3AH,37H36H35H34H33H32H31H30H,0100 0101,0101 1001,0000 1000,显示缓冲单元,最左次左.次右最右,

18、08:59:45,时分秒,非压缩BCD码,压缩BCD码,(显存),(CZ),1111 1100,A/D数据,八位二进制码,R0,字符序号,即“5”的字段码,关显示,(ADSUB),A,D1MS:MOV R7,#115;软件延时1mS子程序 D1MS1:NOP;(1+8*115+2)*12/11059.2KHz=1.0015mS NOP NOP NOP NOP NOP DJNZ R7,D1MS1 RET,MOV 30H,#10H;30H-37H为显示缓冲单元,初始值对应显示-8951-MOV 31H,#12HMOV 32H,#01HMOV 33H,#05HMOV 34H,#09HMOV 35H,

19、#08HMOV 36H,#12HMOV 37H,#10HSETB EA;开中断总允许SETB IT0;设定INT0中断请求输入信号下降沿有效SETB EX0;开外部INT0中断允许MOV 38H,#00H;38H单元为实时钟200uS计数单元,清0MOV 39H,#00H;39H单元为10mS计数单元,清0MOV 3AH,#45H;秒单元初值MOV 3BH,#59H;分单元初值MOV 3CH,#08H;时单元初值,对应时钟初值08:59:45,;主工作流程:LOOP:LCALL CZ;调用显示内容送显缓子模块程序(拆字)(将时分秒送右6位显示缓冲单元)LCALL KEY;调用键盘扫描子程序(演

20、示:扫描到按键压着时在左第2位显示键号)LCALL DISP;调用显示更新子程序(动态驱动8位数码显示器一遍,约8mS)LCALL ADSUB;调用A/D子程序(采集ADC0809的AN1输入电压的A/D数据送左2位显示)LCALL DASUB;调用D/A子程序(驱动DAC0832输出周期约2.5S的满幅正向锯齿波)LCALL PB;调用独立按键PB07的检测且对应控制L0L7灯子程序 LCALL SWITCH;调用电平开关SW07的检测且对应控制L8L15灯子程序 SJMP LOOP;反复循环主流程 CZ:MOV R0,#3AH;显示内容送显缓子模块程序(拆字)。置时钟数据单元首地址(秒单元

21、)MOV R1,#30H;置显示缓冲单元首地址(对应于最右显示位)CZ1:MOV A,R0;取当前数据单元BCD码,TEST2016.ASM 总初始化程序中,TEST2016.ASM 主工作流程部分,大约每10mS巡回调用一遍,何时显示?,TEST2016显示驱动问题思考,1、显示更新子程序返回后,主流程调用其他子模块程序期间,驱动哪一位?那这一位驱动持续时间比另7个位来的长,会呈现什么现象?可采取什么程序方法消除?2、原来的显示更新子程序要换驱动下一位的时候,先输出新的位码,此时字段输出口内容依旧,那此刻在新的位驱动的会是哪个位的字符?会呈现什么现象?可采取什么程序方法消除?3、原来的显示更

22、新子程序刚开始首先输出驱动最右位的位码,此时字段输出口内容如果不能确定,那此刻在最右位会被驱动不确定的字符,会呈现什么现象?可采取什么程序方法消除?4、TEST2016.ASM 总初始化程序中对8个显示缓冲单元置了初值,对应显示-8951-字样,为什么一直都没有观察到?那对这8个显示缓冲单元置初值有何实际意义?如何临时屏蔽一些程序的调用使得8个位显示的是这些初始化对应的字样?5、如何扩展字段码表,使得程序可以有更多的字符显示?6、如何通过修改拆字子模块程序一个参数,使时钟显示包含百分之一秒(39H单元内容)?此时最左边两位会显示A/D数据还是小时数?机理怎样?7、如何通过只修改拆字子模块程序的

23、指令参数,使时、分、秒显示在左边或中间的连续6个位?8、如何通过只修改显示更新子模块程序的指令参数,使得只驱动时、分、秒显示在左边或中间或右边的连续6个位?,26,开关量输入与键盘接口,键盘是单片机应用系统的一个重要输入设备,用于输入数据、干预系统的工作状态。按连接方式:独立式按键和行列式(矩阵式)键盘。,P.112,一、开关量输入及其驱动程序的设计例 机械开关触点通断时的抖动现象及影响开关、按钮信号输入电路设计:开关量消除抖动的硬件方法:(电容滤波法、RS触发器消抖电路)开关量的输入及动作状态判别的程序方法:开关量消除抖动的软件方法:(延迟确认法、表决法、滚动滤波法),(维持1、下跳沿、维持

24、0、上跳沿 4种动作状态的检测判别),?,?,触点抖动,28,由于采用软件延时消抖动、等待键释放,造成显示不能及时更新。采用滚动滤波消抖动。,PB=FFH,PBFFH,PB=FFH,0 1t 2t 3t 4t 5t 6t,t为采样时间,无按键 按下 闭合 释放,仅保留最近5次采样值,29,将(U5)82C55的PB口内容输入到29H比较29H2DH内容是否相同,若不同,则放弃,直接返回;相同,将该值存入2EH根据2FH、2EH内容课判断按键状态:若(2FH)=FFH 且(2EH)FFH 表示有键按下,将2EH2FH。若是其它情况,则处于无按键、键长按下或键释放状态。,U58255 PB,滚动存

25、储,滚动滤波消抖动具体实现在存储器中使用7个单元用于滤波 将29H2DH单元内容滚动存储(即2CH2DH,2BH2CH,2AH2BH,29H2AH),PB口8个开关量输入并消抖动子程序的设计(主流程每610mS调用一次,后续子模块可利用经本子程序消抖后的各开关量前态、新态信息,进行开关动作判断)XDPB:MOV 2FH,2EH;PB口输入并消抖子程序。原新态存为前态 MOV DPTR,#0FDFDH;输入PB07新电平值 MOVX A,DPTR MOV 2EH,A;存为新态XDR:RET,总初始化还应增加:输入一次PB07值赋给2EH、2FH单元作为初值,TEST2016.ASM主工作流程插入

26、 LCALL XDPB 指令行,每约10mS反复调用,【每610mS检测一次就具有一定的消抖功效】,.MOV 2DH,2CH;前4次输入的电平值推至2AH2DH单元 MOV 2CH,2BH MOV 2BH,2AH MOV 2AH,29H 存29H单元 MOV 29H,A MOV A,2DH;比较近5次输入的电平值不一致则新态照旧 CJNE A,2CH,XDR CJNE A,2BH,XDR CJNE A,2AH,XDR CJNE A,29H,XDR 近5次输入的电平值一致则,PB口8个开关量输入并消抖动子程序的设计(主流程每610mS调用一次,后续子模块可利用经本子程序消抖后的各开关量前态、新态

27、信息,进行开关动作判断)XDPB:MOV 2FH,2EH;PB口输入并消抖子程序。原新态存为前态 MOV DPTR,#0FDFDH;输入PB07新电平值 MOVX A,DPTR MOV 2EH,A;存为新态XDR:RET,;29H2DH单元无须使用可位寻址单元,总初始化还应增加:输入一次PB07值赋给29H2FH单元作为初值,TEST2016.ASM主工作流程插入 LCALL XDPB 指令行,每约10mS反复调用,2EH单元维持原值,【每610mS检测一次就具有一定的消抖功效】,综合实验内容,(滚动滤波法),在TEST2016.ASM中添加:PB1、PB2、PB3作为时、分、秒步进式调校按钮

28、的子模块程序:TPB:JNB 2FH.1,TPB1;时钟调校子程序。判PB1下降沿 JB 2EH.1,TPB1MOV A,3CH;小时单元按BCD码模24加1ADD A,#01H DA AMOV 3CH,ACJNE A,#24H,TPB1;满24小时?MOV 3CH,#00H TPB1:JNB 2FH.2,TPB2;判PB2下降沿JB 2EH.2,TPB2 MOV A,3BH;分钟单元按BCD码模60加1 TPB2:JNB 2FH.3,TPBR;判PB3下降沿JB 2EH.3,TPBR MOV A,3AH;秒钟单元按BCD码模60加1 TPBR:RET,(设主工作流程已加 LCALL XDPB

29、),TEST2016.ASM主工作流程插入 LCALL TPB 指令行,每约10mS反复调用,若要求实现单按键PB1压下后释放时(上升沿)令小时单元加1?若要求实现每当检测到单按键PB1处于压下状态(维持0)就令小时单元加1?,综合实验内容,在TEST2016.ASM中增加PB0开关按钮动作切换时钟显示模式(显示模式指是/否包含百分之一秒),增加实现PB0作为时钟显示模式切换按钮的功能,每按一次PB0按钮,使得时钟显示模式在通常显示模式(显示时、分、秒)与秒表显示模式(显示时、分、秒及十进制的1/100秒)之间切换。程序方案如下:,分配一个单元(如3FH单元)存储拆字源数据起始地址,初值为3A

30、H,CZ子模块第一条指令中的拆字源数据起始地址(原为“#3AH”)相应改为依据该存储单元的内容而变化(即改为“3FH”),这样只要修改3FH单元内容就可以实现从3AH起还是从39H起拆字送显缓;在总初始化中加入给分配的3FH单元赋初值,按期望的初始模式而置3AH或39H;将PB子模块程序改为判别PB0按钮压下则改换3FH单元内容,原来存3AH则改为39H,原来存39H则改为3AH,分解这两个8位二进制码可以发现,它们之间的最低两位相反,因此每次只要将其最低两位求反即可实现互换;将CZ子模块第一条设定拆字源数据起始地址指令(原“MOV R0,#3AH”)改为“MOV R0,3FH”。,设已添加X

31、DPB子模块并在主工作流程插入 LCALL XDPB,综合实验内容,由于39H单元用二进制表示百分之一秒,显示的是00H63H,二、键盘接口原理(一)键盘输入应解决的问题键盘输入的特点键盘:一组按键开关的集合。行线电压信号通过键盘按键机械触点的断开、闭合,其输出波形如图10-6。,图10-6,P.113,?,?,?,触点抖动,行线上拉电阻,1.独立式键盘接口 各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可很容易判断那个键被按下。,独立式键盘工作电路,(适于键数较少、操作快、同时多键动作场合),(二)键盘接口的工作原理 分独立式按键接口和行列式键盘接口。,P.114,程序处理方

32、法与开关量输入相同,2.行列式(矩阵式)键盘接口,44行列式键盘结构(扫描法),适于按键数目较多的场合;可节省较多的I/O口线端;同时只会有一个键闭合的场合。,行列式键盘按键的识别方法,a.扫描法,第1步:识别键盘有无键按下;驱动所有列线为0,输入各行线电平如果有0,就说明有键按下,如果行线电平全1,则全部无键按下。,第2步:如有键被按下,识别具体的按键。依序驱动某一列为0,其余列均为1,输入各行线电平,如果某行线电平为0,可确定此行列交叉点处的按键被按下;如果行线电平全为1 则本列无按键按下。,输出口驱动列线,输入口读取行线电平,第1步:列线输出为全0,随后输入行线电平如有0,则0所在的行就

33、是闭合的按键所在行;无0则无键闭合。第2步:行线输出为全0,随后输入列线电平如有0,则0所在的列就是闭合的按键所在列;无0则无键闭合。结合上述两步,可确定按键所在行和列。,线反转法原理图,b.线反转法,PC0PC1PC2PC3PC4PC5PC6PC7,实验板44键盘连接82C55的端口线,采用线反转法的键盘行线、列线端口各自应当可以在输入与输出方式间切换!如图:高四位与低四位均可独立改变其输入或输出方式,实验板键盘扫描子程序 如TEST2016.ASM所示。【主工作程序中】LCALL KEY;调用键盘扫描子程序(扫描到按键则在左3位显示“-键号-”),实验板键盘接口设计实例,4X4键盘接口初始

34、为输入,控制口 FEFFH方式字:89H=10001001B,FEFEH,利用82C55的C口高低四位可分别定义为输入或输出,扩展44行列式键盘,以线反转法进行按键的识别及处理,P2.0/A8,KEY:MOV DPTR,#0FEFFH;键盘扫描子程序(反转法)。DPTR指向U3(8255)的控制口地址MOV A,#81H;先将C口初始化为高4位输出驱行线、低4位输入读列线MOVX DPTR,A;向U3(8255)控制口写入方式控制字MOV DPTR,#0FEFEH;DPTR指向U3(8255)的C口MOV A,#00H;置输出驱动键盘行线(高4位)全0,(低四位不影响)MOVX DPTR,A;

35、输出到U5(8255)的C口MOVX A,DPTR;输入键盘列线电平(在低4位)存60H单元MOV 60H,AMOV DPTR,#0FEFFH;DPTR指向U3(8255)的控制口地址MOV A,#88H;改将C口初始化为高4位输入读行线、低4位输出驱列线MOVX DPTR,A;向U3(8255)控制口写入方式控制字MOV DPTR,#0FEFEH;DPTR指向U3(8255)的C口MOV A,#00H;置输出驱动键盘列线(低4位)全0,(高四位不影响)MOVX DPTR,A;输出到U5(8255)的C口MOVX A,DPTR;输入键盘行线电平(在高4位)在A中ANL 60H,#0FH;屏蔽高

36、4位,保留列线电平值所在的低4位ANL A,#0F0H;屏蔽低4位,保留行线电平值所在的高4位ORL 60H,A;将列线电平值、行线电平值组合成8位行列码于60H单元中,PC0PC1PC2PC3PC4PC5PC6PC7,TEST2016.ASM 键盘扫描子程序(2-1),【以反转法扫描键盘得到动作键对应行列码】,压下闭合的键所在的行、列对应位为0,无键压下则扫描到的行列码为FFH,MOV 61H,#00H;以假定的键号值从00H开始查表MOV R5,#10H;设定最多进行16次的键码查表MOV DPTR,#KEY_N;DPTR指向键码表首地址 KY:MOV A,61H;取当前假定的键号值于A中

37、MOVC A,A+DPTR;查表读取键码表中当前假定的键号值对应位置的键码CJNE A,60H,NK;与扫描到的8位行列码比较,不同则转NK查下一个SJMP KN;相同:表明按下的是当前假定的键号,转KN进行键功能处理KEY_N:DB 0EEH,0EDH,0EBH,0E7H;键码表。K0,K1,K2,K3键码 DB 0DEH,0DDH,0DBH,0D7H;K4,K5,K6,K7键码 DB 0BEH,0BDH,0BBH,0B7H;K8,K9,K10,K11键码 DB 7EH,7DH,7BH,77H;K12,K13,K14,K15键码 NK:INC 61H;假定键号值加1DJNZ R5,KY;未查

38、完键码表则继续SJMP KEYR;全查完:表明无按键或出现异常行列码,无功能处理,此时键号值10H KN:MOV A,61H;扫描到新键号功能处理。取新键号MOV 36H,A;演示功能:将正压着的键的键号送左边第二位显示MOV 35H,#10H;同时在左第三位显示-MOV 37H,#10H;同时在左第一位显示-KEYR:RET;结束并返回,TEST2016.ASM 键盘扫描子程序(2-2),【根据(60H)中的行列码查键码表得动作键对应键号于(61H),将压着的键的键号显示】,(键扫描演示功能),(无键压下则不作演示),PC0PC1PC2PC3PC4PC5PC6PC7,键盘扫描演示程序功能小改

39、:改为扫描到按键则显示键号与H 于最右边两位;在字段码表中添加H 字段码,再修改键号处理程序将该44键盘每一行4个键的逻辑定义左右对调,即原键0改为3、原键1改为2、原键2改为1、原键3改为0,其他行以此类推 通过调整键码表中的键码顺序即可实现将该44键盘按国际通行的0 9排列,A F在另6个位置依次安排 依据规划的布局调整键码表中的键码顺序即可实现,上述键盘扫描子程序仅具有演示功能,无实用意义。,PC0PC1PC2PC3PC4PC5PC6PC7,国际数字键盘布局 单板机布线的键盘位置 单板机键盘原理图 TEST2016.ASM原键码表,E7H EBH EDH EEH D7H DBH DDH

40、DEHB7H BBH BDH BEH77H 7BH 7DH 7EH,00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH0CH 0DH 0EH 0FH,从原理图分析出的 各逻辑键键码,键码排列顺序决定各键码对应键的键号,各物理键对应的键码,规划各物理键对应的键号,EEH EDH EBH E7HDEH DDH DBH D7H BEH BDH BBH B7H 7EH 7DH 7BH 77H,这只是元件标号,专门的键盘扫描子模块程序设计方法,在TEST2016.ASM的KEY子程序基础上,改造为可靠扫描且便于判别键盘动作的专门的键盘扫描子模块程序。每约10m

41、S扫描一遍,动态存储“前一次扫描到的键号”与“新扫描到的键号”,供后续程序判别,还可加入滚动滤波消抖动。,在KEY子程序开头加一条:将上一轮的新键号单元内容推存到前键号单元 有采取滚动滤波消抖动的话,将滚存单元内容前推 依旧通过反转法扫描键盘并得到对应的键号(无按键情况不要跳走)(有按下K0K15之一会得到00H0FH之一,无按键会得到10H)有采取滚动滤波消抖动的话,判各滚存单元内容不一致则跳转返回,本轮不存新键号,新键号单元内容维持原值 将扫描得到的键号值保存到新键号单元 子程序返回,如存(65H)如存(64H),如在(61H),按键闭合、释放时的触点抖动消除:每610mS扫描一次,就有一

42、定的消抖效果 可类似开关量滚动滤波消抖法,滚存35次键号,一致才更新,如存(63H)(62H)(61H),如(64H)如(65H),如(64H),KEY子程序改造方法如下:,综合实验内容,K14、K15作为时、分的步进式调校按键的子模块程序设计方法:,在TEST2016.ASM添加键盘调时子模块程序TKEY,实现K14、K15键分别用作小时、分钟步进式调校功能的子模块程序,每当分钟值被调整时须将秒数清0并将其前级计数单元置为初值,在主流程中添加调用该子模块程序。,判前键号单元内容为10H且新键号单元内容为0EH表明K14刚刚压下,则对小时做加1处理;判前键号为10H且新键号为0FH表明K15刚

43、刚压下,则对分钟做加1处理且将秒数清0并将其前级计数单元清0;子程序返回,LCALL TKEY,程序设计方法如下:,TKEY:MOV A,65H;取前一次扫描到的键号 CJNE A,#10H,TK1;判前键号是否为无按键压下 MOV A,64H;取新扫描到的键号 CJNE A,#0AH,TK1;判新键号是否为K14;K14刚压下:小时单元按BCD码模24加1 TK1:MOV A,65H;取前一次扫描到的键号;K15刚压下:分钟单元按BCD码模60加1 TKR:RET,综合实验内容,44,KEY:MOV 63H,62H;滚动存储MOV 62H,61HMOV 61H,60HMOV A,#81H;1

44、0000001MOV DPTR,#0FEFFHMOVX DPTR,A;行线输出,列线输入MOV A,#00HMOV DPTR,#0FEFDHMOVX DPTR,A;行线输出0MOVX A,DPTRANL A,#0FHMOV B,A;输入列线值 MOV A,#88H;10001000MOV DPTR,#0FEFFHMOVX DPTR,A;行线输入,列线输出 MOV A,#00HMOV DPTR,#0FEFDHMOVX DPTR,A;列线输出0MOVX A,DPTRANL A,#0F0H;输入行线值ORL B,A;行、列值合并,线反转法扫描与消抖程序示例,45,MOV 60H,#0;存键值单元初值

45、 MOV DPTR,#KTAB MOV R7,#16;4X4=16个键VK0:CLR A;查表,将状态值转换为键编号 MOVC A,A+DPTR CJNE A,B,VK1 SJMP VKF;若有相同,返回(60H)=键值 VK1:INC 60H;键值+1 INC DPTR DJNZ R7,VK0 MOV 60H,#10H;若无键,返回(60H)=10HVKF:MOV A,60H CJNE A,61H,VKD;比较60H63H是否同 CJNE A,62H,VKD CJNE A,63H,VKD;不同,放弃 MOV 64H,A;相同,存入64HVKD:RET;键编码表,对应每个键的行列状态值,该值唯

46、一。KEY_N:DB 0EEH,0EDH,0EBH,0E7H DB 0DEH,0DDH,0DBH,0D7H DB 0BEH,0BDH,0BBH,0B7H DB 7EH,7DH,7BH,77H,46,TKEY:MOV A,65H;键功能处理子程序 CJNE A,#10H,VK2 MOV A,64H CJNE A,#10H,VK3;判断是否10H非10H VK2:MOV 65H,64H RET;非按下过程,直接返回 VK3:MOV A,64H;取键值 MOV 65H,A ADD A,64H ADD A,64H;键值3 MOV DPTR,#VKT;根据键值跳转 JMP A+DPTR VKT:LJMP

47、 K0.LJMP K15 K0:.;K0键功能 RET K15:.;K1K15键功能 RET,说明:间接跳转移指令(散转指令)JMP A+DPTR;PC A+DPTR 转移的目标地址为A+DPTR的内容,但不影响A与DPTR的内容,47,模拟接口电路的任务,模拟电路的任务,00101101,10101100,工业生产过程,传感器,放大滤波,多路转换&采样保持,A/D转换,放大驱动,D/A转换,输出接口,微型计算机,执行机构,输入接口,物理量变换,信号处理,信号变换,I/O接口,输入通道,输出通道,模拟量I/O通道的组成,A/D转换接口电路,P.243,48,1.A/D转换器的分类按转换原理分为

48、:逐次比较型、双积分型、V/F转换型,并行转换型。常用的是双积分型A/D转换器和逐次比较A/D转换器。双积分型A/D转换器的主要优点是转换精度高,抗干扰性能好,价格便宜,但转换速度较慢。因此这种转换器主要用于转换速度要求不高的场合。逐次比较型A/D转换器是一种转换速度较快、精度较高的转换器。其转换时间大约在几微秒到几百微秒之间。,一、A/D转换的基本知识,49,2.A/D转换器的主要技术指标分辨率。以输出二进制/BCD码的位数表示分辨率,位数越多,分辨率越高。【例】AD574,分辨率为二进制12位,即用212个数进行量化,分辨率百分数表示1/(212-1)=1/4095=0.24转换精度。定义

49、为一个实际ADC与一个理想ADC在量化值上的差值。可用绝对误差或相对误差表示。转换时间和转换速率。它是指完成一次转换所需的时间。转换时间是指由启动转换命令到转换结束信号开始有效的时间间隔。转换时间的倒数为转换速率。,50,1.内部结构,二、ADC0809及其接口电路,通道选择地址,地址锁存,启动,转换结束,时钟,数据输出允许,基准电压,SAR清0,锁存,三态输出00HFFH,P.244,51,1.内部结构与工作时序,二、ADC0809及其接口电路,P.244,52,2.主要技术指标(1)分辨率为8位;(2)时钟频率范围101280KHz,当CLK=500KHz时,转换时间为128s(转换时间=

50、64TCLK)。(3)最大不可调误差:0808,1/2LSB;0809,1LSB(4)工作电源+5V,基准电压由外部提供,典型值为+5V,此时允许输入模拟电压为05V;(5)具有锁存控制的8路模拟选通开关;(6)可锁存三态输出,输出电平与TTL电平兼容;(7)功耗15mW;,53,3.典型连接电路,A15 A9 A8 A7A3 A2 A1 A0 通道 地址 0 111 1111 1111 1 0 0 0 IN0 7FF8H 0 111 1111 1111 1 1 1 1 IN7 7FFFH,0 1010 1,A15=0,54,(1)启动IN0 A/D转换MOV DPTR,#7FF8H MOVX

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号