实验五 串并转换实验
一、实验目的
1、掌握串并行转换的原理及采用74LS164扩展端口的方法。
2、掌握数码管显示的原理及方法。
3、学习用任意两根I/O口线进行数据传输的方法。
二、实验要求
利用实验箱的显示电路,在数码管上循环显示0-9这10个数,每个数显示1秒。完成后修改程序,仅在一个数码管上显示0-F这16个数(其它三个数码管不显示)。
三、实验原理
实验设备中数码管为共阴接法,接线确定了各段从左至右的排列顺序为:abcdefgh。如果要显示数字1,应该是b c段发光,所以b c段对应的位写1,其它不发光的位写0。因此1的显示码为60H。其它显示码可按此规律得出。
实验原理图见图二,串并转换芯片74LS164的A、B端为串行数据输入端,将其接到数据线P1.0上,CLK为时钟端接到时钟线P1.1上,Q0~Q7为并行输出端接数码管。在P1.1产生的时钟脉冲的作用下,数据的显示码从74LS164输入端一位一位的输入,经164转换后,串行数据变为8位并行数据经其输出端Q0~Q7加到数码管上,数码管就能显示相应的数字。
下面是数据60H的传输及显示过程:
1、 将A中数据的最低位送到串口的数据线P1.0上。
2、 在时钟线P1.1上产生一个脉冲。
3、 在这个脉冲的作用下,P1.0上的数据被打入164的Q0输出端,原来Q0上的数据移到Q1, Q1的数移到Q2…,完成一位数的传输。
4、 第1步到第3步重复8次,这样一个字节的数据就输出完毕,同时74LS164将接收到的串行数据转换成并行数据在数码管上显示出来。
四、实验框图
实验框图见图一。
五、实验连线及步骤
1、DIN接P1.0,CLK接P1.1,打开实验箱电源,打开串并转换数码管显示模块上的开关。
2、启动KEIL软件界面,根据框图编程。
在初始化框中有两个内容,它们分别是:
* 送表指针初值---寄存器
MOV R1,#0
* 送表首地址---DPTR16进制字符串转16进制数组 图一 串并转换程序框图
MOV DPTR,#TAB
显示子程序如下,其中R4中的初值为8。
S164: RRC A
MOV P1.0,C
CLR P1.1
SETB P1.1
DJNZ R4,S164
RET
3、调试运行程序。
4、如出现问题,出原因,修改程序,直至运行成功。
六、实验作业
1、将片外RAM7000中的数据用串并转换的方式在数码管上显示出来。
2、将自己学号的后4位在数码管上显示出来。
七、实验原理图
实验原理图见图二。其中,P1.0到DIN、P1.1到CLK的两根连线需要自己接。其它连线均已接好,开关应在接通状态才能工作。
图二 串并转换实验原理图
实验六 键盘显示实验
一、实验目的
1、了解键盘和显示器的接口方法和编程方法。
2、了解键盘扫描和LED八段数码管动态显示器的工作原理。
3、掌握8155芯片的使用方法。
二、实验要求
利用实验箱提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来,并有删除功能。
三、实验说明
从原理图中可以看出,键盘显示电路主要由8155并口芯片与164串并转换芯片构成,其中81
55PA口控制数码管的位线及键盘的列线,PB口低两位与164为数码管提供字形码输出,8155的PC口与键盘行线相连。它们的地址如下:
8155命令口地址: 0E100H
8155PA口地址: 0E101H
8155PB口地址: 0E102H
8155PC口地址: 0E103H
键盘显示程序可用多种方式编写,也比较复杂,本次实验的参考程序采用基本的键盘扫描方式编写,程序主要分成三个部分:
1、读键部分:扫描键盘、判断是否有键按下,包括按键的防抖处理。
2、确定键值部分:计算键值存入显示缓冲单元。
3、显示部分:将显示单元的内容在数码管上显示出来。
实验的程序流程见下图,但是由于键盘显示程序比较长,其编程思想的细节不能全部在流程图上表现出来(例如键盘防抖部分、判断按键抬起部分等),流程图中只给出了程序的主要部分。
四、程序流程图
图一 主程序流程图 图二 键盘扫描程序流程图
五、实验原理图
实验原理图见图三。
六、实验作业
修改参考程序,增加一个功能键,使之按下该键后,数码管全部熄灭。
图三 键盘显示实验原理图
七、实验参考程序:
;键盘显示程序, 显示区:10H~15H "RTACE":删除键
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV 10H,#18 ;显示区送初值
MOV 11H,#18
MOV 12H,#18
MOV 13H,#18
MOV 14H,#18
MOV 15H,#16
MOV DPTR,#0E100H ;8155方式(命令口)
MOV A,#03 ;A、B口输出,C口输入
MOVX @DPTR,A
SDISP: LCALL DISP ;调显示子程序
OFFDISP:MOV A,#0H ;关显示器
MOV DPTR,#0E101H ;8155A口,数码管位选输出及键盘列线
MOVX @DPTR,A ;PA口输出0,关显示器同时键盘列线输出0
MOV DPTR,#0E103H ;判断8155C口是否有键输入?
MOVX A,@DPTR ;读键盘行线
ANL A,#0FH
CJNE A,#0FH,HK ;有键按下,转延时抗抖程序
AJMP SDISP ;无键按下,转显示
HK:
LCALL DELAY
MOV DPTR,#0E101H ;再次判断是否有键按下?
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#0E103H
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,READK ;确实有键,转读键程序
AJMP SDISP ;是干扰,转显示程序
READK:
MOV R4,#0 ;键盘列数初值
MOV R5,#0FEH ;扫描键盘第一列
SCAN: MOV A,R5
MOV DPTR,#0E101H ;
MOVX @DPTR,A
RL A ;准备扫下一列
MOV R5,A
MOV DPTR,#0E103H ;读行线(8155C口)
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,KEYOP0 ;是这一列, 再确定是哪一行
INC R4 ;不是这一列,列数+1
CJNE R4,#6,SCAN ;没有扫描完列线,继续
LJMP SDISP
KEYOP0: JB ACC.3,KEYOP1 ;不是第0行,再判断第1行
MOV A,#0
AJMP KEYCAL
KEYOP1: JB ACC.2,KEYOP2
MOV A,#06
AJMP KEYCAL
KEYOP2: JB ACC.1,KEYOP3
MOV A,#12
AJMP KEYCAL
KEYOP3: JB ACC.0,SDISP
MOV A,#18
KEYCAL: ADD A,R4 ;A中的值为行数×6,R4,的值为列数
;键值为(行数×6+列数)
MOV DPTR,#KEYC ;查表确定键名
MOVC A,@A+DPTR
MOV 1EH,A ;暂存键名
CJNE A,#10H,PD ;判断是否是功能键
ACALL CANCEL ; =10H,删除功能
CK1: MOV DPTR,#0E103H ;查键是否抬起
CKEYON: MOVX A,@DPTR
ANL A,#0FH
CJNE A,#0FH,CKEYON1 ;没有抬起,调显示子程序
AJMP SDISP
PD: JC KEYNAM ;是数字键转显示前处理
BACK: AJMP SDISP
CKEYON1:LCALL DISP
AJMP CK1
CANCEL: MOV R0,#10H
MOV R1,#11H
MOV 16H,#17
CAN1: MOV A,@R1
MOV @R0,A
INC R0
INC R1
CJNE R1,#17H,CAN1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论