0075 90FE04 mov dptr, #CLK164 0078 D2E0 setb acc.0 007A F0 movx @dptr, a 007B C2E0 clr acc.0
007D F0 movx @dptr, a 007E EB mov a, r3
007F D5F0EB djnz B, DLP 0082 90FE02 mov dptr, #OUTBIT 0085 EA mov a, r2
0086 F0 movx @dptr, a ; 显示一位八段管 0087 7E01 mov r6, #1
0089 1156 call Delay
008B EA mov a, r2 ; 显示下一位 008C 03 rr a
008D FA mov r2, a 008E 08 inc r0
008F D9D2 djnz r1, Loop 0091 22 ret ToLED:
0092 900046 mov dptr, #LEDMap 0095 93 movc a, @a+dptr 0096 22 ret Start:
0097 758902 mov TMOD, #02h ; 模式2, 定时器 009A 758CCE mov TH0, #T100us
009D 758ACE mov TL0, #T100us
00A0 75A882 mov IE, #10000010b ; EA=1, IT0 = 1 00A3 754000 mov Hour, #0 00A6 754100 mov Minute, #0 00A9 754200 mov Second, #0
00AC 754327 mov C100us, #high(Tick) 00AF 754410 mov C100us+1, #low(Tick)
00B2 D28C setb TR0 ; 启动定时器0 MLoop:
00B4 E540 mov a, Hour 00B6 75F00A mov b, #10 00B9 84 div ab 00BA 1192 call ToLED
00BC F560 mov LEDBuf, a 00BE E5F0 mov a, b 00C0 1192 call ToLED 00C2 4480 orl a, #80h
00C4 F561 mov LEDBuf+1, a 00C6 E541 mov a, Minute 00C8 75F00A mov b, #10 00CB 84 div ab 00CC 1192 call ToLED
39
00CE F562 mov LEDBuf+2, a 00D0 E5F0 mov a, b 00D2 1192 call ToLED 00D4 4480 orl a, #80h
00D6 F563 mov LEDBuf+3, a 00D8 E542 mov a, Second 00DA 75F00A mov b, #10 00DD 84 div ab 00DE 1192 call ToLED
00E0 F564 mov LEDBuf+4, a 00E2 E5F0 00E4 1192 00E6 F565 00E8 115D 00EA 0200B4 mov a, b call ToLED
mov LEDBuf+5, a call DisplayLED
ljmp MLoop End
40
第三部分 部分选做实验
实验七 BCD码到ASCII码转换
一、实验要求
给出一个BCD数,将其转换成ASCII值。
二、实验目的
1、了解BCD值和ASCII值的区别 2、了解如何将BCD值转换成ASCII值 3、了解如何查表进行数值转换及快速计算。
三、实验说明
此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表功能可能快速地进行数值转换。进一步了解数值的各种表达方式。
四、程序框图
给出要转换数BCD码 取出BCD码高四位 查表得到ASCII码 保存高位ASCII码 取出BCD码低四位 查表得到ASCII码 保存低位ASCII码 结束 41
五、程序清单
; 将 A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元
Result equ 20h org 0 0000 020026 ljmp Start ASCIITab: 0003 303132 0006 333435 0009 363738 000C 394142 000F 434445
0012 46 db '0123456789ABCDEF'
; 定义数字对应的ASCII表 BinToHex:
0013 900003 mov dptr, #ASCIITab
0016 F5F0 mov b, a ; 暂存 A 0018 C4 swap a
0019 540F anl a, #0fh ; 取高四位 001B 93 movc a, @a+dptr ; 查ASCII表 001C F520 mov Result, a
001E E5F0 mov a, b ; 恢复 A 0020 540F anl a, #0fh ; 取低四位 0022 93 movc a, @a+dptr ; 查ASCII表 0023 F521 mov Result+1, a 0025 22 ret Start:
0026 758140 mov sp, #40h 0029 741A mov a, #1ah 002B 1113 call BinToHex 002D 02002D ljmp $ End
42
实验八 键盘扫描显示实验
一、实验要求
在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验程序可分成三个模块:
○1键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。 ②○显示模块:将显示单元的内容在显示器上动态显示。 ③○主程序:调用键输入模块和显示模块。
二、实验目的
1.掌握键盘和显示器的接口方法和编程方法。
2.掌握键盘扫描和LED八段码显示器的工作原理。
三、实验电路及连线
这里只是键盘草图,详细原理参见图1
行码 列码
(0FE00H) (0FE02H)
四、实验说明
本实验仪提供了一个6×4的小键盘,向列扫描码地址(0FE02H)逐列输出低电平,然后从行码地址(0FE00H)读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。
列扫描码还可以分时用作LED的位选通信号。
43