mov a,r4 xrl a,#0eh jz Key2 mov a,r4 jz Key3 mov r4,#20h dec r2 sjmp Key4 Key3: mov r4,#0fh Key2: mov r2,04h mov r4,03h Key4: mov r1,#48h mov a,r2 mov @r1,a inc r1 mov a,r3 mov @r1,a mov a,r4 jb acc.5,Exit jb acc.4,Exit mov dptr,#KeyTable movc a,@a+dptr Exit: ret ScanKey: setb RS1 mov r2,#0feh mov r3,#08h mov r0,#00h
LoopS: mov r1,#Low(OUTBIT) mov a,r2 movx @r1,a rl a mov r2,a inc r1 movx a,@r1 cpl a anl a,#0fh
-26-
jnz Scan inc r0 djnz r3,LoopS ReTKey3:mov a,#20h TKey3: mov r2,a clr a
mov r1,#Low(OUTBIT) movx @r1,a mov a,r2 clr RS1 ret Scan:
cpl a
jb acc.0,TKey0 mov a,#00h sjmp EndLoop TKey0: jb acc.1,TKey1 mov a,#08h sjmp EndLoop TKey1: jb acc.2,TKey2 mov a,#10h sjmp EndLoop TKey2: jb acc.3,ReTKey3 mov a,#18h EndLoop:add a,r0 sjmp TKey3
LedMap: ;八段管显示码 db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh
KeyTable: ;键码定义 db 07h,04h,08h,05h,09h,06h,0ah,0bh db 01h,00h,02h,0fh,03h,0eh,0ch,0dh
end
-27-
硬 件 实 验
硬件实验部分可使学生能进一步掌握单片机系统扩展和输入输出程序的设计方法,熟悉对扩展系统的软件、硬件设计,调试方法和技巧。
实验一 P1口亮灯实验
一、实验目的
(1)学习P1口的使用方法; (2)学习延时子程序的编写。
二、实验内容
P1口作为输出口,接八个发光二极管,编写程序,使发光二极管循环点亮。
三、程序框图
四、实验电路
五、实验过程
连接电路,编写程序,然后观察LED灯的显示情况。
此程序运用定时器中断实现计数定时功能。使用中断时,需设置中断控制字TMOD,
-28-
使定时器1工作于中断方式,然后设置延时子程序初值即TH1和TL1,利用ACALL语句即可申请中断。运行程序时,调用延时子程序,开启计数器,计数器满时发出中断返回中断处,等待下次开始,从而实现循环定时计数功能。
六、实验结果及分析
实验中LED灯管闪亮并维持一定时间,按循环左移方式点亮。
问题回答:若要增加LED灯闪亮时间,可以使延时子程序中计数器计数周期增长,即初值R6、R7值减小即可。改变亮灯方向,只需将RL A变为RR A即可。
七、实验源程序 ORG 0790H
MOV P1,#0FFH MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A SJMP LOOP DELAY: MOV R7,#0FFH LOOP1: MOV R6,#0FFH LOOP2: NOP NOP
DJNZ R6,LOOP2 DJNZ R7,LOOP1 RET END
实验三 P3.3口输入 P1口输出
一、实验目的
1.掌握P3口、P1口简单使用。
2.学习延时程序的编写和使用。
二、实验内容
1.P3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一。
2.P1口做输出口,编写程序,使P1口接的8 个发光二极管L1—L8按16进制加一方式点亮发光二极管。
-29-
三、程序框图
四、实验电路
五、实验过程
实验是将P3.3口串行输入的电压变换次数变为累加器中的数并用P1口并行显示出来。P3.3读入数据前应加高电平防止误读。每次读入电压负跳变,累加器中数值加一,取反送至P1口。P1口八位分别控制8个LED灯管,若为高电平则灭,低电平则亮,从而通过灯的亮灭来表示按键次数。
六、实验结果及分析
实验中每开合一次开关K1,LED灯的显示情况表示的数字就加一,如同二进制数,灯亮表示1,灯灭表示0。
问题回答:开合K1开关13次即对应的二进制数为1101,点亮的LED灯为L1、L3和L4。
七、实验源程序
ORG 100H
-30-