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

下载本文档

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

文档简介

1、第八讲:接口技术本讲重点:本讲重点:LEDLED显示显示( (静态与动态)静态与动态)键盘扩展(单键与矩阵)键盘扩展(单键与矩阵) 一、显示器接口扩展一、显示器接口扩展LED显示接口(动态与静态,硬件译码与显示接口(动态与静态,硬件译码与软件译码,软件译码, 电路与编程应用)电路与编程应用).LEDLED显示器的扩展显示器的扩展( (结构结构) )LEDLED数码管的数码管的结构结构:共阳与共阴共阳与共阴 单片机系统扩展单片机系统扩展LEDLED数码管时数码管时多用多用共阳共阳LEDLED: :共阳数码管每个段笔画是用低电平共阳数码管每个段笔画是用低电平( (“0 0”) )点亮的点亮的, ,

2、要求驱动要求驱动功率很小;而共阴数码管段笔画是用高电平功率很小;而共阴数码管段笔画是用高电平( (“0 0”) )点亮的,点亮的,要求驱动功率较大。要求驱动功率较大。 通常每个段笔画要串一个数百欧姆的通常每个段笔画要串一个数百欧姆的降压电阻降压电阻。公共公共阳阳极极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h公共公共阴阴极极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高电平点亮高电平点亮低电平点亮低电平点亮接高电平接高电平接地接地LEDLE

3、D数码管的数码管的译码译码:硬件译码与软件译码硬件译码与软件译码硬件译码特点硬件译码特点: :采用专用的译码采用专用的译码/ /驱动器件驱动器件, ,驱动功驱动功率较大率较大; ;增加了硬件的开销增加了硬件的开销; ;软件软件编程简单编程简单; ;字型固字型固定定( (比如比如: :只有七段只有七段, ,只可译数字只可译数字, ,字型不好看字型不好看) )。共阴共阴LEDa ab bc cd dg ge ef fh hg gf fe ed dc cb b a aD DC CB BA AP1.3P1.3P1.2P1.2P1.1P1.1P1.0P1.0CD4511CD4511AT89C51AT89

4、C5174LS48/CD451174LS48/CD4511是是“BCDBCD码码七段七段共阴共阴译码译码/ /驱动驱动”IC; IC; 74LS4774LS47是是“BCDBCD码码七段七段共阳共阳译码译码/ /驱动驱动”ICICLEDLED显示器的扩展显示器的扩展( (译码译码) )LEDLED显示器的扩展显示器的扩展( (软件译码软件译码) )LEDLED数码管的译码:数码管的译码:软件译码软件译码软件译码特点软件译码特点: : 不用专用的译码不用专用的译码/ /驱动器件,驱动驱动器件,驱动功率较小功率较小;不增不增加加硬件的开销;软件硬件的开销;软件编程较复杂编程较复杂;字型;字型灵活灵

5、活( (比如:比如:有八段,只可译多种字符,字型好看有八段,只可译多种字符,字型好看) )。共阳共阳LEDa ab bc cd dg ge ef fh hP1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7+5V+5VAT89C51AT89C51硬件译码特点硬件译码特点: : 采用专用译码采用专用译码/ /驱动器件,驱动器件,驱动功率较大;增加了硬驱动功率较大;增加了硬件的开销;软件编程简单;件的开销;软件编程简单;字型固定字型固定( (比如:只有七比如:只有七段,只可译数字,字型不段,只可译数字,字型不好看好看) )

6、。LEDLED数码管的软件译码数码管的软件译码八段八段LEDLED数码管数码管段代码编码表段代码编码表( (连线不同可有多种表连线不同可有多种表):):公共阳极公共阳极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh h公共阴极公共阴极h g f e d c b ah g f e d c b aa ab bc cd dg ge ef fh hh g f ah g f a高电平点亮高电平点亮低电平点亮低电平点亮接高电平接高电平接地接地字形字形0123456789黑黑共阳共阳0C00F90A40B09992820F880900FF共阴共阴3F

7、065B4F666D7D077F6F00LEDLED显示器的扩展显示器的扩展( (显示方式显示方式) )LEDLED数码管的数码管的显示方式显示方式:静态与动态静态与动态动态显示特点动态显示特点: : 有闪烁有闪烁,用,用元器件少元器件少,占占I/OI/O线少线少,必须扫描必须扫描,花费花费CPUCPU时间时间,编程复杂。编程复杂。( (有多个有多个LEDLED时尤为突出)时尤为突出)静态显示特点静态显示特点: : 无闪烁无闪烁,用,用元器件多元器件多,占占I/OI/O线多线多,无须扫描无须扫描,节省节省CPUCPU时间时间,编程简单。编程简单。静态显示静态显示: : 各数码管在显示过程中各数

8、码管在显示过程中持续持续得到送显信号,与各数码管接口得到送显信号,与各数码管接口的的I/OI/O口线口线是是专用专用的。的。动态显示动态显示: : 各数码管在显示过程中各数码管在显示过程中轮流轮流得到送显信号,与各数码管接口得到送显信号,与各数码管接口的的I/OI/O口线口线是是共用共用的。的。A AB BCLKCLKh g f e d c b ah g f e d c b aCLRCLRA AB BCLKCLKCLRCLRA AB BCLKCLKCLRCLR+5V+5VVCCVCCTxDTxDRxDRxD 89C51单片机单片机74LS16474LS16474LS164h g f e d c

9、 b ah g f e d c b ah g f e d c b ah g f e d c b a+5V+5V共阳共阳LED数码管数码管LEDLED数码管数码管静态静态显示举例显示举例有几个有几个LEDLED就要几个就要几个74LS16474LS164,但只要数据不变,但只要数据不变,送一次就保持住了,且不闪烁,编程十分简单。送一次就保持住了,且不闪烁,编程十分简单。要求:要求:根据上图编写通过串行口和根据上图编写通过串行口和74LS16474LS164驱动驱动共共 阳阳LEDLED数码管数码管查表显示的子程序。查表显示的子程序。条件:条件:系统有系统有6 6个个LEDLED数码管数码管, ,

10、待显数据待显数据(00H(00H09H)09H)已放在已放在35H35H30H30H单元中单元中( (分别对应分别对应十万位十万位个位个位) ),DSPLYDSPLY:MOV DPTR, #TABLE :MOV DPTR, #TABLE ; ;共阳共阳LEDLED数码管译码数码管译码表首址表首址 MOV R0MOV R0,#30H #30H ; ;待显数据缓冲区的待显数据缓冲区的个位个位地址地址REDOREDO:MOV AMOV A, R0 R0 ; ;通过通过R0R0实现寄存器实现寄存器间接寻址间接寻址 MOVC A, A+DPTR MOVC A, A+DPTR ; ;查表查表 MOV SB

11、UF, A MOV SBUF, A ; ;经串行口经串行口发送发送到到74LS16474LS164 JNB TI, $ JNB TI, $ ; ;查询查询送完一个字节的第送完一个字节的第8 8位?位? CLR TI CLR TI ; ;为下一字节发送为下一字节发送作准备作准备 INC R0 INC R0 ;R0;R0指向下一个指向下一个数据缓冲单元数据缓冲单元 CJNE R0CJNE R0,#36H#36H,REDO REDO ; ;判断判断是否发完是否发完6 6个数?个数? RET RET ; ;发完发完6 6个数就个数就返回返回TABLETABLE:DB 0C0H,0F9H,0A4H,0B

12、0H,99H DB 0C0H,0F9H,0A4H,0B0H,99H ; ;共阳共阳LEDLED译码表译码表 DB 92H, 82H, 0F8H, 80H,90HDB 92H, 82H, 0F8H, 80H,90HLEDLED数码管数码管动态动态显示举例显示举例P1.5 P1.5 P1.4P1.4P1.3P1.3P1.2P1.2P1.2P1.2P1.0P1.0P0.7 P0.7 P0.6 P0.6 P0.5 P0.5 P0.4 P0.4 P0.3 P0.3 P0.2 P0.2 P0.1 P0.1 P0.0P0.07406 OC7406 OC门门 X 3X 3上拉上拉电阻电阻1414+5V+5VA

13、T89C51工作原理工作原理:从从P0P0口送段代码口送段代码,P1,P1口送位选信号口送位选信号。段码虽同时。段码虽同时到达到达 6 6个个LEDLED,但,但一次仅一个一次仅一个LEDLED被选中被选中。利用。利用“视觉暂视觉暂留留”,每送一个字符并选中相应位线,延时一会儿,每送一个字符并选中相应位线,延时一会儿, ,再送再送/ /选下一个选下一个循环扫描循环扫描即可。即可。共阴共阴 数码管数码管位位选选线线段段代代码码P1.5 P1.5 P1.4P1.4P1.3P1.3P1.2P1.2P1.2P1.2P1.0P1.0P0.7 P0.7 P0.6 P0.6 P0.5 P0.5 P0.4 P

14、0.4 P0.3 P0.3 P0.2 P0.2 P0.1 P0.1 P0.0P0.07406 OC7406 OC门门 X 3X 3+5V+5VAT89C51位位选选线线段段代代码码要求要求:此处为共阴数码管,此处为共阴数码管,P0P0口送段代码,口送段代码,P1P1口送位选信号。口送位选信号。通过查表实现动态显示。通过查表实现动态显示。条件条件:待显数据待显数据(00H(00H09H)09H)已放在已放在: : 7FH7FH7AH7AH单元中单元中( (分别对分别对应应十万位十万位个位个位) )说明说明:由于用了由于用了反相驱动器反相驱动器74067406,要用共阳译码表。,要用共阳译码表。共

15、阴共阴 数码管数码管上拉上拉电阻电阻14147406 OC7406 OC门门 X 3X 3+5V+5V(7FH) (7EH) (7DH) (7CH) (7BH) (7AH)十万十万 万位万位 千位千位 百位百位 十位十位 个位个位数据缓冲区数据缓冲区 / / 显示缓冲区显示缓冲区P0P0口口送段送段代码,代码,P1P1口口送位选送位选信号。信号。待显数据待显数据已经放在已经放在: : 7FH7FH7AH7AH单元单元( (分别分别对应对应十万十万位位个位个位) )使用共阳使用共阳译码表译码表。DIRDIR: MOV DPTR, : MOV DPTR, #DSEG #DSEG ; ;数码管译码数

16、码管译码表首址表首址 MOV R0MOV R0,#7AH #7AH ; ;待显缓冲区待显缓冲区个位个位地址地址 MOV R3MOV R3,#01H #01H ; ;个位的个位的位选信号位选信号=01H=01HLD1LD1: MOV AMOV A, R0 R0 ; ;通过通过R0R0间接寻址间接寻址 MOVC A, A+DPTRMOVC A, A+DPTR ; ;查表查表 MOV P0, A MOV P0, A ; ;字段码送到字段码送到P0P0口口 MOV P1MOV P1,R3 R3 ; ;字位选择送到字位选择送到P1P1口口 LCALL DELYLCALL DELY ; ;调延时调延时1m

17、s1ms子程序子程序 INC R0 INC R0 ;R0 ;R0 指向下一字节指向下一字节 MOV AMOV A,R3R3 JB ACC.5 JB ACC.5,LD2LD2 ; ;判判是否发完是否发完6 6个数?个数? RL A RL A ;R1;R1指向下一个位指向下一个位 MOV R3MOV R3,A A ; ;位选信号存回位选信号存回R1R1 SJMP SJMP LD1LD1 ; ;跳去再显示下一个数跳去再显示下一个数LD2LD2: RET RET ; ;发完发完6 6个数就个数就返回返回DSEGDSEG:DB 0C0H,0F9H,0A4H,0B0H,99HDB 0C0H,0F9H,0A

18、4H,0B0H,99H; ;共阳译码表共阳译码表 DB 92H, 82H, 0F8H, DB 92H, 82H, 0F8H, 80H80H,90H,90HP0P0口口送段送段代码,代码,P1P1口口送位选送位选信号。信号。待显数据待显数据已经放在已经放在: : 7FH7FH7AH7AH单元单元( (分别分别对应对应十万十万位位个位个位) )使用共阳使用共阳译码表译码表。二、扩展键盘接口二、扩展键盘接口键盘接口(键盘种类键盘接口(键盘种类,矩阵键盘的行扫描与线矩阵键盘的行扫描与线反转法的电路、原理与编程)反转法的电路、原理与编程);键盘接口键盘键盘 单片机系统中完成控制参数输入及修改的单片机系统

19、中完成控制参数输入及修改的基本输基本输入设备入设备,是人工干预系统的重要手段。,是人工干预系统的重要手段。键盘分类键盘分类 按键值按键值编码方式编码方式分分 ( (硬件硬件) )编码键盘编码键盘与与非非( (硬件硬件) )编码键盘编码键盘。 按键组按键组连接方式连接方式分分 独立连接键盘独立连接键盘与与矩阵连接键盘矩阵连接键盘。编码键盘编码键盘: : 采用专用的编码采用专用的编码/ /译码译码器件器件, ,被按下的键被按下的键由该器件译码输出相应的由该器件译码输出相应的键码键码/ /键值键值。特点:特点:增加了硬件开销,编码因选用器件而异,编增加了硬件开销,编码因选用器件而异,编码固定,但编程

20、简单。适用于规模大的键盘。码固定,但编程简单。适用于规模大的键盘。非编码键盘非编码键盘: : 单片机系统多采用此类键盘单片机系统多采用此类键盘 采用采用软件软件编编/ /译码的方式译码的方式, ,通过扫描,对每个被按下通过扫描,对每个被按下的键判别输出相应的的键判别输出相应的键码键码/ /键值键值。特点:特点:不增加硬件开销,编码灵活,适用于小规模不增加硬件开销,编码灵活,适用于小规模的键盘,特别是单片机系统。但编程较复杂的键盘,特别是单片机系统。但编程较复杂, ,占占CPUCPU时间,还须软件时间,还须软件“消抖消抖”。按键值编码方式:编码键盘与非编码键盘按键组连接方式:独立连接键盘与矩阵连

21、接键盘独立连接键盘独立连接键盘: : 每键相互独立,各自与一条每键相互独立,各自与一条I/OI/O线线相连,相连,CPUCPU可直接读取该可直接读取该I/OI/O线的高线的高/ /低电平状态。低电平状态。特点:特点:占占I/OI/O口线多,但判键速度快,多用于设置控口线多,但判键速度快,多用于设置控制键、功能键。适用于键数少的场合。制键、功能键。适用于键数少的场合。矩阵连接键盘矩阵连接键盘: : 键按矩阵排列键按矩阵排列, ,各键处于矩阵行各键处于矩阵行/ /列列的的结点结点处处,CPU,CPU通过对连在通过对连在行行( (列列) )的的I/OI/O线送已知电线送已知电平的信号平的信号, ,然

22、后读取然后读取列列( (行行) )线的状态信息。逐线扫描线的状态信息。逐线扫描, ,得出键码。得出键码。特点:特点:键多时键多时占用占用I/OI/O口线少口线少, ,但判键速度慢但判键速度慢, ,多用多用于设置数字键。适用于键数多的场合。于设置数字键。适用于键数多的场合。独立连接式键盘独立连接式键盘例例:特点:特点:此子程序需此子程序需不断不断( (或或定时定时) )调用调用,否则可能,否则可能漏判。漏判。4 4个键的优先级由指令顺序决定。个键的优先级由指令顺序决定。P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3KEY: JNB P1.0,FUNC1 KEY: JNB P1.

23、0,FUNC1 ; ;逐键判别逐键判别 JNB P1.1,FUNC2 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.2,FUNC3 JNB P1.3,FUNC4JNB P1.3,FUNC4 RET RET ; ;无任何键按下由此返回无任何键按下由此返回FUNC1: FUNC1: ; ;做做P1.0P1.0要求的要求的“功能功能1 1” RET RETFUNC2: FUNC2: ; ;做做P1.1P1.1要求的要求的“功能功能2 2” RET RETFUNC3: FUNC3: ; ;做做P1.2P1.2要求的要求的“功能功能3 3” RET RETFUNC4: FUN

24、C4: ; ;做做P1.3P1.3要求的要求的“功能功能4 4” RET RETAT89C51独立连接式键盘独立连接式键盘例例 特点:特点:此子程序采用此子程序采用中断中断查询查询不会漏判不会漏判, ,省时。省时。键的优先级由指令键的优先级由指令顺序决定。顺序决定。为防止一次按键多为防止一次按键多次中断,在功能子程次中断,在功能子程序里应安排序里应安排“关关/ /开中开中断指令断指令”并并“延时延时”。P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3 ORG 0003H ORG 0003H LJMP KEY LJMP KEY KEY: JNB P1.0,FUNC1 KEY: J

25、NB P1.0,FUNC1 ; ;逐键判别逐键判别 JNB P1.1,FUNC2 JNB P1.1,FUNC2 JNB P1.2,FUNC3 JNB P1.2,FUNC3 JNB P1.3,FUNC4JNB P1.3,FUNC4 RETI RETI ; ;无任何键按下由此返回无任何键按下由此返回FUNC1: FUNC1: ; ;做做P1.0P1.0要求的要求的“功能功能1 1” RETI RETIFUNC2: FUNC2: ; ;做做P1.1P1.1要求的要求的“功能功能2 2” RETI RETIFUNC3: FUNC3: ; ;做做P1.2P1.2要求的要求的“功能功能3 3” RETI

26、RETIFUNC4: FUNC4: ; ;做做P1.3P1.3要求的要求的“功能功能4 4” RETI RETIINT0INT0&(上拉上拉)AT89C51矩阵式键盘矩阵式键盘- -行扫描法行扫描法8255 控制寄存器:控制寄存器:0003H 8255 A口地址:口地址: 0000H 8255 C口地址:口地址: 0002H A口为输出口为输出 C口为输入口口为输入口8051805174LS37374LS373P0.0-P0.7P0.0-P0.7ALEALEP2.7P2.78D8DQ0Q0Q1Q1G GEAEAOEOERDRDWRWR+5V82558255D0-7D0-7WRWRCSC

27、SPA7PA7PA6PA6PA5PA5PA4PA4PA3PA3PA2PA2PA1PA1PA0PA0PC0PC0PC1PC1PC2PC2PC3PC3+5v行线行线列列线线0行行7行行0列列3列列 0 4 8 12 16 20 24 28 0 4 8 12 16 20 24 28 1 5 9 13 17 21 25 29 1 5 9 13 17 21 25 29 2 6 10 14 18 22 26 30 2 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31A1A1A0A0RDRD矩阵式键盘名词注释矩阵式键盘名词注释0 0

28、行行 1 1行行 2 2行行 3 3行行 4 4行行 5 5行行 6 6行行 7 7行行行线行线(PA0PA7)列列 线线 PC 0-3 0列列3列列 0 4 8 12 16 20 24 280 4 8 12 16 20 24 28 1 5 9 13 17 21 25 291 5 9 13 17 21 25 29 2 6 10 14 18 22 26 302 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31矩阵式键盘工作原理矩阵式键盘工作原理: 先先由行线送出数据由行线送出数据, ,送全送全“0 0”或每次只送一位或每

29、次只送一位“0 0”;然后然后读进列线,判有无键按下或读进列线,判有无键按下或按键的位置并算出键值。顺按键的位置并算出键值。顺序扫描。序扫描。1列列2列列 行号:行号:第第0 0行行第第7 7行行R3R3 (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行首值:行首值:(R3) X 4(R3) X 4 R5R5 (0,4,8,12,16,20,24,28) (0,4,8,12,16,20,24,28) 列值:列值:C C口低口低4 4位读进值位读进值R4R4 (0F,0E,0D,0B,07) (0F,0E,0D,0B,07) 0F0F:表示此行无键按下。:表示此行无键按

30、下。 0E0E0707:表示此行的:表示此行的0 03 3列列 有键按下。有键按下。 键值:查得最后结果键值:查得最后结果 R5R5 等于已知按键的等于已知按键的行首值行首值, 再加上所在再加上所在列的序号列的序号。 同一行中,键值等于同一行中,键值等于行首值行首值 连续依次加连续依次加 1 1。KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有无键闭合查有无键闭合 JNZ LK1 JNZ LK1 ; ;有键闭合转消抖有键闭合转消抖 LJMP LJMP LK8LK8 ; ;无键闭合则退出无键闭合则退出LK1LK1:LCALL DL6msLCALL DL6ms ; ;消抖消抖1

31、2ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有无键闭合再查有无键闭合 JNZ JNZ LK2LK2 ; ;的确有,转的确有,转处理处理 LJMP LJMP LK8LK8 ; ;确实无,退确实无,退出去出去查有无键闭合的子程序查有无键闭合的子程序KS1KS1:KS1KS1:MOV DPTRMOV DPTR,#0000H#0000H ; ;指向指向 A A口口 MOV A, MOV A, #00H #00H ;8;8条行线都送条行线都送0 0 MOVXMOVX,DPTRDPTR,A A; ;送到行线上去送到行线上去 INC DPTR

32、INC DPTR INC DPTRINC DPTR ; ;指向指向 C C口口 MOVX AMOVX A,DPTRDPTR ; ;读列线的电平读列线的电平 ANL AANL A,#0FH #0FH ; ;保留保留C C口低口低4 4位位 若确有键按下若确有键按下, ,则则AccAcc中必有中必有“0 0” ORL A ORL A,#0F0H #0F0H ; ;将将AccAcc高高4 4位赋位赋1 1 CPL A CPL A ;Acc;Acc取反后,高取反后,高4 4位位=0;=0; 若有键按下若有键按下, ,则低则低4 4位中必有位中必有“1 1” RETRET检查的结果(出口)检查的结果(出

33、口): 若若(A)(A)0,0,则有键按下;则有键按下; 若若(A)(A)0,0,则无键按下。则无键按下。行线行线列列线线0列列3列列1列列2列列0 0行行 1 1行行 2 2行行 3 3行行 4 4行行 5 5行行 6 6行行 7 7行行 0 4 8 12 16 20 24 280 4 8 12 16 20 24 28 1 5 9 13 17 21 25 291 5 9 13 17 21 25 29 2 6 10 14 18 22 26 302 6 10 14 18 22 26 30 3 7 11 15 19 23 27 313 7 11 15 19 23 27 31KEY1:LCALL K

34、EY1:LCALL KS1KS1 ; ;查有无键闭合查有无键闭合 JNZ LK1 JNZ LK1 ; ;有键闭合转消抖有键闭合转消抖 LJMP LJMP LK8LK8 ; ;无键闭合则退出无键闭合则退出LK1LK1:LCALL LCALL DL6msDL6ms ; ;消抖消抖12ms12ms LCALL LCALL DL6msDL6ms LCALL LCALL KS1KS1 ; ;再查有无键闭合再查有无键闭合 JNZ JNZ LK2LK2 ; ;的确有,转的确有,转处理处理 LJMP LJMP LK8LK8 ; ;确实无,退确实无,退出去出去LK2LK2:MOV MOV R3R3,# #000

35、0H H ; ;(R3)(R3)行号初值行号初值 MOV MOV R2R2,# #0 0FEFEH H; ;(R2)(R2)行扫描初值行扫描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口 MOV AMOV A, R2 R2 ; ;取取行扫描值行扫描值 MOVXMOVX,DPTRDPTR,A A ; ;送送到行线上去到行线上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;读读列线的电平列线的电平 ANL A

36、ANL A,#0FH#0FH ; ;保留保留C C口低口低4 4位位 MOV MOV R4R4,A A ; ;列值暂存进列值暂存进R4R4 CJNE ACJNE A,# #0F0FH,LK4H,LK4; ;列值列值全全“1 1”表明表明此次送此次送0 0的行的行有键按下有键按下, ,转转LK4LK4处理处理, ,若全若全1,1,表明表明此次送此次送0 0的行的行无键按下。无键按下。 行号:第行号:第0 0行行第第7 7行行(R3)(R3) (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行扫描值:行扫描值: 0FEH (R2)0FEH (R2) ( (FEFE,FD,F

37、B,F7,EF,DF,BF,7F),FD,FB,F7,EF,DF,BF,7F) FEHFEH = = 1111 1111111 1110 0 B B( (首次扫描首次扫描) ) FDHFDH = = 1111 111111 110 01 1 B B (2(2次扫描次扫描) ) FBHFBH = = 1111 11111 10 01111 B B (3(3次扫描次扫描) ) F7HF7H = = 1111 1111 0 0111111 B B (4(4次扫描次扫描) ) EFHEFH = = 1111110 0 1111 1111 B B (5(5次扫描次扫描) ) DFH DFH = = 11

38、110 01 11111 1111 B B (6(6次扫描次扫描) ) BFH BFH = = 1 10 011 111111 1111 B B (7(7次扫描次扫描) ) 7FH 7FH = = 0 0111 1111111 1111 B B (8(8次扫描次扫描) ) 列值:列值: (0F,0E,0D,0B,07)(0F,0E,0D,0B,07) 从从C C口低口低4 4位读进位读进 (R4)(R4) 0F0F:表示此行无键按下。:表示此行无键按下。0E0E0707:此行的:此行的0 03 3列有键按下。列有键按下。KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有无键闭

39、合查有无键闭合 JNZ LK1 JNZ LK1 ; ;有键闭合转消抖有键闭合转消抖 LJMP LJMP LK8LK8 ; ;无键闭合则退出无键闭合则退出LK1LK1:LCALL DL6msLCALL DL6ms ; ;消抖消抖12ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有无键闭合再查有无键闭合 JNZ JNZ LK2LK2 ; ;的确有,转的确有,转处理处理 LJMP LJMP LK8LK8 ; ;确实无,退确实无,退出去出去LK2LK2:MOV R3,#00HMOV R3,#00H ; ;(R3)(R3)行号初值行号初值 M

40、OV R2,#0FEHMOV R2,#0FEH; ;(R2)(R2)行扫描初值行扫描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口 MOV AMOV A, R2R2 ; ;取取行扫描值行扫描值 MOVXMOVX,DPTRDPTR,A A ; ;送到行线上去送到行线上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;读列线的电平读列线的电平 ANL AANL A,#0FH#0FH ; ;保留保留C C口低口低

41、4 4位位 MOV MOV R4R4,A A ; ;列值暂存进列值暂存进R4R4 CJNE A,#0FH,LK4CJNE A,#0FH,LK4; ;列值列值全全“1 1”表明此次送表明此次送0 0的行有键按下的行有键按下, ,转转LK4LK4处理处理, , 若全若全1,1,表明此次送表明此次送0 0的行无键按下。的行无键按下。 MOV A MOV A,R2 R2 ; ;取出此次取出此次行扫描值行扫描值 JNB AJNB ACCCC.7,.7,LK8LK8 ; ;若已扫过最后若已扫过最后 一行就一行就退出扫描退出扫描, ,否则扫下一行。否则扫下一行。 RL ARL A ;Acc;Acc中的中的“

42、0 0”左移一左移一位位 MOV R2,A MOV R2,A ; ;新扫描值新扫描值仍存进仍存进R2R2 INC R3INC R3 ; ;行号加行号加1 1指向下一行指向下一行 SJMP SJMP LK3LK3 ; ;转转LK3LK3去扫描下一行去扫描下一行 行号:第行号:第0 0行行第第7 7行行(R3)(R3) (0,1,2,3,4,5,6,7) (0,1,2,3,4,5,6,7) 行扫描值:行扫描值: 0FEH (R2)0FEH (R2) ( (FEFE,FD,FB,F7,EF,DF,BF,7F),FD,FB,F7,EF,DF,BF,7F) FEHFEH = = 1111 1111111

43、 1110 0 B B( (首次扫描首次扫描) ) BFH BFH = = 1 10 011 111111 1111 B B (7(7次扫描次扫描) ) 7FH7FH = = 0 0111 1111111 1111 B B (8(8次扫描次扫描) )注意:注意: 只有只有第第8 8次次扫描值扫描值最高位最高位= 0= 0KEY1:LCALL KEY1:LCALL KS1KS1 ; ;查有无键闭合查有无键闭合 JNZ LK1 JNZ LK1 ; ;有键闭合转消抖有键闭合转消抖 LJMP LJMP LK8LK8 ; ;无键闭合则退出无键闭合则退出LK1LK1:LCALL DL6msLCALL DL

44、6ms ; ;消抖消抖12ms12ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 ; ;再查有无键闭合再查有无键闭合 JNZ JNZ LK2LK2 ; ;的确有,转的确有,转处理处理 LJMP LJMP LK8LK8 ; ;确实无,退确实无,退出去出去LK2LK2:MOV R3,#00HMOV R3,#00H ; ;(R3)(R3)行号初值行号初值 MOV R2,#0FEHMOV R2,#0FEH; ;(R2)(R2)行扫描初值行扫描初值LK3LK3:MOV DPTR #0000HMOV DPTR #0000H; ;指向指向8255 A8255 A口口

45、 MOV AMOV A, R2R2 ; ;取取行扫描值行扫描值 MOVXMOVX,DPTRDPTR,A A ; ;送到行线上去送到行线上去 INC DPTRINC DPTR INC DPTRINC DPTR ; ;指向指向8255 C8255 C口口 MOVX AMOVX A,DPTRDPTR ; ;读列线的电平读列线的电平 ANL AANL A,#0FH#0FH ; ;保留保留C C口低口低4 4位位 MOV MOV R4R4,A A ; ;列值暂存进列值暂存进R4R4 CJNE A,#0FH,LK4CJNE A,#0FH,LK4; ;列值列值全全“1 1”表明此次送表明此次送0 0的行有键

46、按下的行有键按下, ,转转LK4LK4处理处理, , 若全若全1,1,表明此次送表明此次送0 0的行无键按下。的行无键按下。 MOV A MOV A,R2 R2 ; ;取出此次取出此次行扫描值行扫描值 JNB ACC.7,JNB ACC.7,LK8LK8 ; ;若已扫过最后若已扫过最后 一行就退出扫描一行就退出扫描, ,否则扫下一行。否则扫下一行。 RL A RL A ;Acc;Acc中的中的“0 0”左移一位左移一位 MOV R2,AMOV R2,A ; ;新扫描值新扫描值仍存进仍存进R2R2 INC R3INC R3 ; ;行号加行号加1 1指向下一行指向下一行 SJMP SJMP LK3

47、 LK3 ; ;转转LK3LK3去扫描下一行去扫描下一行LK4LK4:MOV A, R3MOV A, R3; ;此行有按键此行有按键, ,取行号取行号 ADD A, R3 ADD A, R3 ; ;行号乘行号乘 4 4 MOV R5, A MOV R5, A ; ;得得行首值行首值 ADD A, R5 ADD A, R5 ; ;即即: :0,4,8,120,4,8,12 MOV R5, A MOV R5, A ; ;暂存进暂存进 R5R5 MOV A, MOV A, R4R4 ; ;列值只可能列值只可能 #0F,#0E,#0D,#0B,#07H#0F,#0E,#0D,#0B,#07HLK5:

48、RRC A LK5: RRC A ; ;取列值的最低位到取列值的最低位到CyCy JNCJNC LK6 LK6 ;Cy=0;Cy=0就找到了就找到了, ,即即R5R5 INC R5INC R5 ; ;否则行值增否则行值增1,1,即同即同 行中的下一个行中的下一个键值键值 SJMP LK5 SJMP LK5 ; ;再转再转LK5LK5判判C C键值键值LK6: LK6: PUSH PUSH 05H05H ; ;将找到的键值压栈将找到的键值压栈 保存起来。保存起来。KEY1:LCALL KEY1:LCALL KS1KS1 JNZ LK1 JNZ LK1 LJMP LJMP LK8LK8 LK1LK

49、1:LCALL DL6msLCALL DL6ms LCALL DL6msLCALL DL6ms LCALL LCALL KS1KS1 JNZ JNZ LK2LK2 LJMP LJMP LK8LK8 LK2LK2:MOV R3,#00HMOV R3,#00H MOV R2,#0FEHMOV R2,#0FEHLK3LK3:MOV DPTR #0000HMOV DPTR #0000H MOV AMOV A, R2R2 MOVXMOVX,DPTRDPTR,A A INC DPTRINC DPTR INC DPTRINC DPTR MOVX AMOVX A,DPTRDPTR ANL AANL A,#0F

50、H#0FH MOV MOV R4R4,A A CJNE A,#0FH,LK4CJNE A,#0FH,LK4 MOV A MOV A,R2 R2 JNB ACC.7, JNB ACC.7,LK8LK8 RL A RL A MOV R2,AMOV R2,A INC R3INC R3 SJMP SJMP LK3LK3LK4LK4:MOV A, R3MOV A, R3 ADD A, R3 ADD A, R3 MOV R5, A MOV R5, A ADD A, R5 ADD A, R5 MOV R5, A MOV R5, A MOV A, R4 MOV A, R4 LK5: RRC A LK5: RR

51、C A ; ;取列值的最低位到取列值的最低位到CyCy JNCJNC LK6 LK6 ;Cy=0;Cy=0就找到了就找到了, ,即即R5R5 INC R5INC R5 ; ;否则行值增否则行值增1,1,即同即同 行中的下一个键值行中的下一个键值 SJMP LK5 SJMP LK5 ; ;再转再转LK5LK5判判C C键值键值LK6: PUSH 05HLK6: PUSH 05H ; ;将找到的键值压栈将找到的键值压栈 保存起来。保存起来。LK7LK7:LCALL LCALL DL6msDL6ms; ;延延6ms6ms LCALL KS1 LCALL KS1; ;键释放?键释放? JNZ LK7JNZ LK7; ;未释放未释放, ,等等 LCALL LCALL DL6msDL6ms ; ;消抖消抖 LCALL LCALL

温馨提示

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

评论

0/150

提交评论