《2022年单片机简易计算器设计 .pdf》由会员分享,可在线阅读,更多相关《2022年单片机简易计算器设计 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、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,
2、#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 ;判
3、断低位是否有低电平,即判断是否有按键按下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 查表程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7
4、页 - - - - - - - - - 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,
5、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 ;转
6、DK4 查表程序NK8: NOP NOKEY2: MOV P1,#0FFH CLR P1.2 MOV A,P1 ANL A,#0F0H XRL A,#0F0H JZ NOKEY3 LCALL DELY10MS 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - MOV A,P1 ANL A,#0F0H XRL A,#0F0H JZ NOKEY3 MOV A,P1 ANL A,#0F0H CJNE A,#0E0H,NK9 MOV KE
7、YBUF,#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,
8、#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 ;= ;查表求键值程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - DK: MOV B,#00H MOV A,KEYBUF ;查表程序查对应的
9、键号数据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
10、,#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: A
11、CALL QING_DIS AJMP DKA ;= 加键功能JIA: MOV 3CH,#00H ACALL CUN_SHU ACALL QING_DIS AJMP DKA ;= 减键功能JIAN: MOV 3CH,#02H ACALL CUN_SHU 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - ACALL QING_DIS AJMP DKA ;= 乘键功能CHENG: MOV 3CH,#04H ACALL CUN_SHU A
12、CALL QING_DIS AJMP DKA ;= 除键功能CHU: MOV 3DH,#06H ACALL CUN_SHU ACALL QING_DIS AJMP DKA ;= ;存被加(减、乘、除)数,存放在37H3BH 里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 R
13、1,#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 ;加上个位之和的进位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - -
14、- - - - - - 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 ;万位计
15、算同十位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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6
16、页,共 7 页 - - - - - - - - - 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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -