问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的

发布网友 发布时间:2022-05-09 14:36

我来回答

3个回答

热心网友 时间:2023-10-18 14:19

KEYBUF EQU 40H ;键号存放单元
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV KEYBUF,#0 ;初始键号设位0,也可以为任意值
MOV R0,#30H ;显示首地址
MOV R2,#0CH ;计算数据存放单元个数
CLR A
QING: MOV @R0,A ;将数据存放单元清零
INC R0
DJNZ R2,QING
MOV P0,#8FH ;关闭显示
MOV R1,#30H ;将显示首地址存放R1里
;===============================================
;五位无符号显示子程序
DIS1: MOV R0,#30H ;把显示数据第一位放在R0里
MOV R2,#04H ;把显示的位码放在R2里
MOV R3,#05H ;把显示的长度放在R3里
DIS2: MOV A,@R0
ANL A,#0FH ;屏蔽显示数据的高四位
MOV B,A
MOV A,R2
ANL A,#0FH ;屏蔽位码的高四位
SWAP A
ORL A,B
MOV P0,A ;送总显示数据到P0显示
LCALL DELY4ms ;调用延时4ms
INC R0 ;取下一个显示数据
DEC R2
DJNZ R3,DIS2 ;四位显示晚后重新开始显示
;===================================================
;键盘扫描子程序
WAIT: MOV P1,#0FFH ;P1口送高电平
CLR P1.0 ;第一行清零
MOV A,P1 ;读P1口
ANL A,#0F0H ;低位屏蔽
XRL A,#0F0H ;判断低位是否有低电平 ,即判断是否有按键按下
JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描
LCALL DELY10ms ;延时10ms去抖在进行判断是否有按键按下
MOV A,P1 ;继续读P1口
ANL A,#0F0H ;判断低位是否有低电平
CJNE A,#0E0H,NK1 ;如果扫描数据不为0E0H就转到NK1
MOV KEYBUF,#0 ;否者判断为0号键
AJMP DK ;转DK1查表程序
NK1: CJNE A,#0D0H,NK2 ;如果扫描数据不为0D0H就转到NK2
MOV KEYBUF,#1 ;否者判断为1号键
AJMP DK ;转DK2查表程序
NK2: CJNE A,#0B0H,NK3 ;如果扫描数据不为0B0H就转到NK3
MOV KEYBUF,#2 ;否者判断为2号键
AJMP DK ;转DK3查表程序
NK3: CJNE A,#70H,NK4 ;如果扫描数据不为70H就转到NK4
LJMP SAN_CHU
NK4: NOP
NOKEY1: MOV P1,#0FFH ;和上面相同
CLR P1.1
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
LCALL DELY10MS
MOV A,p1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK5
MOV KEYBUF,#3
AJMP DK
NK5: CJNE A,#0D0H,NK6
MOV KEYBUF,#4
AJMP DK
NK6: CJNE A,#0B0H,NK7
MOV KEYBUF,#5
AJMP DK
NK7: CJNE A,#70H,NK8
MOV KEYBUF,#10 ;否者判断为3号键
AJMP DK ;转DK4查表程序
NK8: NOP
NOKEY2: MOV P1,#0FFH
CLR P1.2
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK9
MOV KEYBUF,#6
AJMP DK
NK9: CJNE A,#0D0H,NK10
MOV KEYBUF,#7
AJMP DK
NK10: CJNE A,#0B0H,NK11
MOV KEYBUF,#8
AJMP DK
NK11: CJNE A,#70H,NK12
LJMP DENG_HAO
NK12: NOP
NOKEY3: MOV P1,#0FFH
CLR P1.3
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK13
LJMP CHU
NK13: CJNE A,#0D0H,NK14
LJMP CHENG
NK14: CJNE A,#0B0H,NK15
LJMP JIAN
NK15: CJNE A,#70H,NK16
LJMP JIA
NK16: NOP
;=======================================================
;查表求键值程序
DK: MOV B,#00H
MOV A,KEYBUF ;查表程序 查对应的键号数据
MOV DPTR,#TABLE ;把表头地址放入DPTR
MOVC A,@A+DPTR ;A里面存放的为键号,利用A和表头地址找到对应的键号数据
MOV B,A ;把查到的数据送往显示单元
INC R1 ;取下一个显示单元
MOV A,R1
CJNE A,#36H,DKA1 ;判断显示单元是否已满
MOV R1,#35H ;35H,36H单元用于更好的控制五位显示
AJMP DKA
DKA1: MOV 34H,33H ;按键代码按左移显示,先按先显示
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,B
DKA: MOV A,P1 ;读P1口
ANL A,#0F0H ;屏蔽高四位
XRL A,#0F0H ;地位是有低电平
JNZ DKA ;如果有低电平继续读P1口,否者向下执行,查找第二行
NOKEY4: LJMP DIS1
;===================================
;功能按键功能设定
DENG_HAO:MOV DPTR,#JI_SUAN ;等号键功能通过加、减、乘、除设定的偏移量来调用子程序
MOV A,3CH ;3CH存放的为功能程序入口地址偏移量
JMP @A+DPTR ;转移到按键功能程序
JI_SUAN: AJMP JIA1 ;加计算子程序
AJMP JIAN1 ;减计算子程序
AJMP CHENG1 ;乘计算子程序
AJMP CHU ;除计算子程序
;=======删除键功能
SAN_CHU: ACALL QING_DIS
AJMP DKA
;=======加键功能
JIA: MOV 3CH,#00H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======减键功能
JIAN: MOV 3CH,#02H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======乘键功能
CHENG: MOV 3CH,#04H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA
;=======除键功能
CHU: MOV 3DH,#06H
ACALL CUN_SHU
ACALL QING_DIS
AJMP DKA

;=================================
;存被加(减、乘、除)数,存放在37H~3BH里
CUN_SHU: MOV 37H,30H ;36H存放的为最低位
MOV 38H,31H
MOV 39H,32H
MOV 3AH,33H
MOV 3BH,34H ;3AH存放的为最高位
RET
;================================
;清除显示单元
QING_DIS: MOV R1,#30H
QING1: MOV @R1,#00H
INC R1
MOV A,R1
CJNE A,#36H,QING1
MOV R1,#30H
LOP1: RET
;================================
;十进制加法子程序
JIA1:
MOV A,37H ;个位被加数
ADD A,30H ;个位被加数+加数
MOV B,#10 ;十六进制除10转换成BCD码
DIV AB
MOV 30H,B ;余数即个位存放在30H
MOV 37H,A ;商存放在37H
MOV A,38H ;十位被加数
ADD A,31H ;十位被加数+加数
ADD A,37H ;加上个位之和的进位
MOV 37H,#00H ;清除37H
MOV B,#10 ;十六进制除10转换成BCD码
DIV AB
MOV 31H,B ;余数即十位存放在31H
MOV 38H,A ;商存放在38H
MOV A,39H ;百位计算同十位
ADD A,32H
ADD A,38H
MOV 38H,#00H
MOV B,#10
DIV AB
MOV 32H,B
MOV 39H,A
MOV A,3AH ;千位计算同十位
ADD A,33H
ADD A,39H
MOV 39H,#00H
MOV B,#10
DIV AB
MOV 33H,B
MOV 3AH,A
MOV A,3BH ;万位计算同十位
ADD A,34H
ADD A,3AH
MOV 3AH,#00H
MOV B,#10
DIV AB
MOV 34H,B
MOV 3BH,#00H
AJMP DKA
;=====================
JIAN1: AJMP DKA
CHENG1: AJMP DKA
CHU1: AJMP DKA
;=============================================
;延时程序和查表表格
DELY4ms: MOV R6,#8 ;延时4毫秒
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY10ms:MOV R6,#20 ;延时10毫秒
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
RET
TABLE: DB 07H, 04H, 01H ; / 本表格是以键盘为参考 7 8 9 /
DB 08H, 05H, 02H ; * 4 5 6 *
DB 09H, 06H, 03H ; - 1 2 3 -
DB 00H, 00H ;= + 清除 0 = +
END

热心网友 时间:2023-10-18 14:20

没听说过

热心网友 时间:2023-10-18 14:20

描述的都不清楚,4*4是哪16个键,端口是用P几,输出放哪里,LED显示还是放某个内存单元里
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"多难兴邦"这个词,让我们懂得了什么? uc怎么进入阅读模式 进入阅读模式方法介绍 uc怎么进入小说阅读模式 uc浏览器设置阅读模式-uc浏览器设置阅读模式方法 uc电脑阅读模式怎么设置电脑上UC浏览器的阅读模式怎么打开 微信怎么判断对方把你拉黑并且删除了,还是只是拉黑了? 公司诉讼由哪个法院管辖?公司诉讼管辖确定的理论依据? 笔记本电脑开机无法进入系统笔记本电脑开机后无法进入系统 从深圳到乌镇玩三天,花销最少是多少?越少越好,如果有个计划就更好乐 马上快过年放假了,第一次去见岳父,送茅台好还是五粮液好? fpga verilog的按键消抖问题 我的钱包弄丢了,里面有身份证,银行卡有平安银行,招商银行,我想知道怎么挂失?急! 什么东西避邪、什么法咒驱邪? public key 的结构是怎样的? 看风水,我家房子平面图,请老师指点!高分求教。 招商银行卡,身份证丢失怎么才能激活啊,现在在外地不能补办身份证。 wⅰnd0ws10密钥怎么设 我买了房子,风水不好怎么办 D0n,tCry!怎么读? 带个八卦吊坠能辟邪吗? 招商银行用卡安全保障,证件(身份证、驾照等)丢失的理赔流程是怎么样? 我姥姥家住在1楼有个很大的院子对面2楼有个上吊死的女人我在我姥姥家正对院子门窗户上放个太极八卦图 请问我的招行卡和身份证都丢了,口头挂失了是否安全 桃木山海镇如何摆放 如果身份证丢失了,在深圳办理招商银行卡需要什么证件? 在古代镜子是辟邪的,为什么现在在鬼故事里却是招邪的?? 招商银行挂失之后身份证丢了怎么解卦? 桃木剑怎样制作,还需要画八卦图吗 桃木八卦龙凤镜摆放位置 我身份证丢失不记得开户行,想补办招行借记卡怎么办?希望尽快得到回复谢谢 keep 0n d0ing sth的翻译 联想y460n的 独显 电源数据 当是D0、D3怎么修改啊 ?? 求解 如何让门禁密码按键个别失灵,因为密码泄露? fortran中read(n,*)(D0(I),I=1,N)什么意思,其中D0是声明的一维数组. 有没有卡巴斯基的激活码? ipad有指纹识别吗 为什么带着医用手套可以解开iPad的指纹? 从咸阳到诗经里怎么走 坐405路到诗经里怎么走 从武功县去沣东诗经里怎么走 咸阳21路公交车路线 从纺织城到诗经里怎么坐公交车? 边家村到诗经里怎么坐车? 咸阳到西安长安区怎么坐车 从同德晨曦园去诗经里坐什么公交车? 咸阳市公交公司坐几路公交可以到 怎么让支付宝查不到流水帐 为何查不到支付宝帐单明细? 本人在携程网上订了机票,用支付宝支付的啊,为什么在支付宝中看不到交易记录? 两个能绑定同一张银行卡吗