TORET: MOV KEYVAL,R1
RET
NOKEY: MOV KEYVAL,#0FFH ;返回无键标志 RET DISPLAY:
MOV R7,#8 ;8个数码管 MOV R5,#0 MOV R0,#LEDBUF DLOOP:
MOV A,R5 RL A RL A
RL A
ANL A,#11111011B INC R5
MOV DPTR,#D8255C
MOVX @DPTR,A ;点亮对应的LED MOV A,@R0
MOV DPTR,#LEDSEG MOVC A,@A+DPTR INC R0
MOV DPTR,#D8255B
MOVX @DPTR,A ;显示数据
LCALL DELAY DJNZ R7,DLOOP RET
DELAY: PUSH R7 MOV R7,#200 DELAYLOOP:
NOP DJNZ R7,DELAYLOOP POP R7
RET
LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B DB 39H,5EH,79H,71H,00H,40H;C,D,E,F, ,- END
六、实验结果
程序运行后,E7区数码管的前七位依次显示“8 2 5 5 - - - 0”,当按下E7区的按键时,数码管的前七位不变,依然显示“8 2 5 5 - - -”,而第八位将显示按下的键码值,从0~F。
七、结果分析
本实验通过8255I/O扩展芯片以及8279键盘/显示接口芯片为硬件基础,实现了键盘输入到数码管输出显示的功能。程序中通过对键盘按下与否进行循环扫描,当有按键按下时,通过程序对键值进行计算,并将结果送到数码管进行显示。当无按键按下时,程序保持上一状态继续扫描,直到有不同的按键按下时状态改变。由于矩阵按键及数码显示会用到较多的I/O口,而单片机的I/O口数量有限,所以利用8255对其进行扩展,再利用专门的键盘/显示芯片8279实现键盘扫描和键值显示的功能。
实验七 并行A/D 转换实验
一、实验目的
1.掌握ADC0809 模/数转换芯片与单片机的连接方法及ADC0809 的典型应用。 2.掌握用查询方式、中断方式完成模/数转换程序的编写方法。
二、实验内容
利用系统提供的ADC0809 接口电路,实现单片机模数转换。模拟信号为0~5V 电位器分压输出,单片机控制ADC0809 读取模拟信号,并在数码管上用十六进制形式显示出来。
三、实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验步骤
1)系统各跳线器处在初始设置状态。用导线对应连接并行模数转换模块的CS_0809、EOC 到CPU 模块的8000、P32;电位器模块的输出端接并行模数转换模块的IN-0;并行模数转换模块的Vref 接+5V 电源;CPU 模块的P10、P11 接串行静态数码显示模块DIN、CLK。 2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。
3)数码管以十六进制形式显示模拟量,手动调节输入电位器,改变输入模拟量电压的大小,数码管显示将随之变化。
五、实验参考程序
;//******************************************************************* ;文件名: AD0809 FOR 51MCU ;功能:并行A/D转换实验
;接线:用导线对应连接并行模数转换模块的CS_0809、EOC到CPU模块的8000、P32; ;电位器模块的输出端接并行模数转换模块的IN-0; ;并行模数转换模块的VREF接+5V电源;
;CPU模块的P10、P11接串行静态数码显示模块DIN、CLK。
;//******************************************************************* DBUF TEMP
EQU 30H
EQU 40H
D0809 EQU 8000H ;通道0地址 DIN BIT P1.0 CLK BIT P1.1 ORG 0000H JMP START
ORG 0080H
START: MOV DBUF+3,#0AH MOV DBUF+2,#0DH MOV DPTR,#D0809 MOV A,#0 MOVX @DPTR,A
JNB P3.2,$ MOVX A,@DPTR ; 读入结果 MOV B,A SWAP A ANL A,#0FH
MOV DBUF+1,A
INC R0
MOV A,B ANL A,#0FH MOV DBUF,A ACALL DISP1 ACALL DELAY
AJMP START
DISP1: ; MOV R0,#DBUF MOV R1,#TEMP MOV R2,#4
DP10: MOV DPTR,#SEGTAB MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A INC R0
INC R1 DJNZ R2,DP10
MOV R0,#TEMP MOV R1,#4 DP12: MOV R2,#8 MOV A,@R0 DP13: RLC A MOV DIN,C CLR CLK SETB CLK DJNZ R2,DP13
INC R0
DJNZ R1,DP12 RET
SEGTAB: DB 3FH,6,5BH,4FH,66H,6DH ;0串行数码显示 ,1,2,3,4,5