历史上的今天
今天是:2025年03月07日(星期五)
2018年03月07日 | 基于单片机的读矩阵键盘,用数码管显示相应键值
2018-03-07 来源:eefocus
/*****************************************************
007.ASM
接线:P0口接数码管
P2接矩阵键盘
用定时中断,若一段时间无操作,数码管进入自到循环显示
*******************************************************/
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0020H
MAIN: ;主程序
MOV SP,#50H
MOV DPTR,#LED_DATA ;取表首地址
MOV TMOD,#01H ;设置定时器T0工作模式
MOV TH0,#15H ;写计时初值
MOV TL0,#9FH
MOV P2,#0FFH ;P2口赋初值
MOV R4,#00H ;赋定时计数初值
SETB 00H ;00H为键值改变标志位
SETB TR0 ;启动定时器T0
MOV IE,#82H ;开中断
LCALL SHOW ;数码管初始化
loop: ;主循环
LCALL KEY_READ ;读键盘
JBC 00H,LOOP0 ;判断是否有键被按下,有则转去刷新输出并清零定时计数
CJNE R4,#0C8H,LOOP ;没有键被按下,则判断定时时间是否达到,到,则进入数码管循环输出
LCALL SHOW1 ;没到,则回到主循环,重新扫描键盘
SJMP LOOP
LOOP0:
LCALL SHOW
MOV R4,#00H
SJMP LOOP ;输出刷新完毕,回到主循环,重新扫描键盘
/*键盘扫描程序*/
KEY_READ:
CLR P2.6 ;P2.6输出低
JB P2.0,N0_0
MOV R0,#01H
LCALL DELAY
JB P2.0,N0_0
JNB P2.0,$
MOV R5,#04H
SETB 00H
SETB P2.6
LJMP NEAT
N0_0:
JB P2.1,N0_1
MOV R0,#01H
LCALL DELAY
JB P2.1,N0_1
MOV R5,#03H
JNB P2.1,$
SETB 00H
SETB P2.6
LJMP NEAT
N0_1:
JB P2.2,N0_2
MOV R0,#01H
LCALL DELAY
JB P2.2,N0_2
JNB P2.2,$
MOV R5,#02H
SETB 00H
SETB P2.6
LJMP NEAT
N0_2:
JB P2.3,N1_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N1_0
JNB P2.3,$
MOV R5,#01H
SETB 00H
SETB P2.6
LJMP NEAT
N1_0:
SETB P2.6
CLR P2.5
JB P2.0,N1_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N1_1
JNB P2.0,$
MOV R5,#08H
SETB 00H
SETB P2.5
LJMP NEAT
N1_1:
JB P2.1,N1_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N1_2
JNB P2.1,$
MOV R5,#07H
SETB 00H
SETB P2.5
LJMP NEAT
N1_2:
JB P2.2,N1_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N1_3
JNB P2.2,$
MOV R5,#06H
SETB 00H
SETB P2.5
LJMP NEAT
N1_3:
JB P2.3,N2_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N2_0
JNB P2.3,$
MOV R5,#05H
SETB 00H
SETB P2.5
LJMP NEAT
N2_0:
SETB P2.5
CLR P2.4
JB P2.0,N2_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N2_1
JNB P2.0,$
MOV R5,#0CH
SETB 00H
SETB P2.4
LJMP NEAT
N2_1:
JB P2.1,N2_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N2_2
JNB P2.1,$
MOV R5,#0BH
SETB 00H
SETB P2.4
LJMP NEAT
N2_2:
JB P2.2,N2_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N2_3
JNB P2.2,$
MOV R5,#0AH
SETB 00H
SETB P2.4
LJMP NEAT
N2_3:
JB P2.3,NEAT
MOV R0,#01H
LCALL DELAY
JB P2.3,NEAT
JNB P2.3,$
MOV R5,#09H
SETB 00H
SETB P2.4
LJMP NEAT
NEAT:
SETB P2.4
RET
/*显示子程序*/
SHOW:
MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
RET
/*循环显示子程序*/
SHOW1: ;
MOV R3,#00H
LOOP1:
MOV A,R3
MOVC A,@A+DPTR
MOV P0,A
MOV R0,#35H
LCALL DELAY
INC R3
LCALL KEY_READ
JB 00H,RETUN1
CJNE R3,#10H,LOOP1
MOV R3,#00H
SJMP LOOP1
RETUN1:
RET
/*延时子程序*/
DELAY:
D0: MOV R2,#0FH
D1: MOV R1,#0BFH
D2: DJNZ R1,D2
DJNZ R2,D1
DJNZ R0,D0
RET
/*定时中断T0处理子程序*/
INT_T0:
CLR EA
PUSH ACC
INC R4
MOV TH0,#15H
MOV TL0,#9FH
POP ACC
SETB EA
RETI
/*数码管显示代码,0~F*/
LED_DATA:
DB 03H,9FH,25H,0DH,99H,49H,41H,1FH
DB 01H,09H,11H,0C1H,63H,85H,61H,71H
END
上一篇:红外接收(模拟串口接收)程序
史海拾趣
|
随着金融业务的蓬勃发展,银行业务发展迅速,用户呈几何数量不断攀升。如何为规模庞大的准用户群提供更好、更便捷的服务?如何针对不断增长的新用户群提供最新、最全面的银行服务推荐?如何应对来自国内银行、外资银行的竞争,提高知名度和用户忠诚 ...… 查看全部问答> |
|
1超强的山寨版私家车 超强的山寨版私家车,看了此图,网友不禁感慨,这车太牛, 不用办照就可上路行驶,堪称中国最牛私家车! 2日本人发明的地铁休眠器 不注意看还以为是有人上吊呢…… ...… 查看全部问答> |
|
1_Cortex-M3支持的Thumb-2指令 2_Stellaris产品选型工具 3_LM3S系列Protel元件库 4_Stellaris外设驱动库用户指南 5_API函数介绍 6_I2C总线协议 … 查看全部问答> |
|
请问这段程序里面的“ 5\'h0_0 ” 是什么意思啊? 谢谢。 always @(posedge clk or posedge rst) begin if(rst == 1\'b1) COUNTER … 查看全部问答> |
|
我使用的是2.6.12的内核,基于ARM9构架的处理器 用uname -a 在嵌入式系统的显示是: Linux (none) 2.6.12-h1940 #50 Thu Dec 20 17:31:16 CST 2007 armv4tl unknown 交叉编译环境中建立了软浮点的,使用编译器版本是3.4.4 (网上找的) arm-linux ...… 查看全部问答> |
|
如题: 硬件为EPM570T100C5N的开发板。实现不了小灯闪烁功能,可以单独对小灯进行控制(只可以控制亮灭,不能控制闪烁),不知道什么原因,特来请教大家。以下是程序部分:module LEDxiaodeng(CLK,LED);input CLK;output [8:1]LED;re ...… 查看全部问答> |
|
因为是第一次做can总线通信,有些问题向大家请教一下: 1.我用的eCAN模块里面的寄存器是有id标识符寄存器的,这样就可以给数据加上id号,但问题是这样,如果要在can总线上载加上模块节点,那么它的邮箱 ...… 查看全部问答> |
|
资料中所说:IVDD Total current into VDD/VDDA power lines (source)IVSS Total current out of VSS ground lines (sink)两者最大值均为150mA那我就郁闷了...目 ...… 查看全部问答> |
|
【低功耗】Actel IGLOO系列超低功耗,小封装FPGA下载 Actel IGLOO系列超低功耗,小封装FPGA下载Actel IGLOO Family Represents the True Alternative to ASICsand CPLDsfor Portable Applications5 μW static power in Flash*Freeze Mode4 X less static power than nearest competitor5 X longer batt ...… 查看全部问答> |




