您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页单片机实验报告上交稿

单片机实验报告上交稿

来源:意榕旅游网
实 实验课程:学生姓名:学 号:专业班级:

验 报 告

单片机原理与应用实验

2013年 12 月 24 日

1

实验一:I/O 口输入、输出实验

一、实验目的

掌握单片机P1口、P3口的使用方法。 二、实验内容

以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。 三、实验说明与电路原理图

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区),八位逻辑电平输出电路原理图参见图1-1。八位逻辑电平显示电路原理图参见图1-2。

2

2

四、实验步骤

1)系统各跳线器处在初始设置状态。用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。 五、实验程序

DIR BIT P3.0

ORG 0000H LJMP START ORG 0100H

START: Output1:

mov a, #0fEH mov r5, #8

loop1: CLR C

mov C,DIR JC Output2 mov P1, a

rl a Acall Delay djnz r5, loop1

Sjmp Output1

Output2:

mov a, #07fH mov r5, #8

3

loop2:

CLR C mov C,DIR JNC Output1 mov P1, a

rr a Acall Delay djnz r5,loop2 Sjmp Output2

Delay:

mov r6,#0 DelayLoop1:

mov r7,#0 DelayLoop2: NOP

NOP djnz r7,DelayLoop2 djnz r6,DelayLoop1 ret 六、实验现象

当ko处于低电平时,跑马灯从当前位置左移;当ko处于高电平时,跑马灯从当前值右移。

七、程序分析

本程序运行后,拨动开关ko,可以实现左移和右移的灯方式。这主要是由语句JC Output2和JNC Output1语句实现的。当ko拨到下面时,其状态为0跳转到Output1,所以跑马灯从右向左一次点亮。当ko拨到上面时,其状态为1,跳转到Output2,所以跑马灯为从左向右一次点亮。综合分析,本实验主要有三个模块:左移模块,右移模块,延时模块。 八、实验心得

从这个实验中我们了解到如何用PI口输出来点亮二极管,也学会了如何根据具体的单片机的原理图进行编写程序,及线路的连接。通过这次实验我了解到单片机芯片的结构及编程方法,巩固了汇编语言编程的能力。通过实验和学会了流水灯的实验方法和实现延时的程序编写方法,为下面的实验做好了充分的准备。

4

实验二:外部中断实验

一、实验目的

学习外部中断技术的基本使用方法。 二、实验内容

INT0 端接单次脉冲发生器。按一次脉冲产生一次中断,CPU 使P1.0 状态发生一次反转,P1.0接LED 灯,以查看信号反转。 三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明

1) 外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。

2)中断服务的关键:

a、保护进入中断时的状态。堆栈有保护断点和保护现场的功能使用PUSH 指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

b、必须在中断服务程序中设定是否允许中断重入,即设置EX0 位。 c、用POP 指令恢复中断时的现场。

3)中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51 系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

4)中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0 或IE1 置“1”;否则继续为“0”。所谓查询就是由CPU 测试TCON 和SCON 中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。

本实验需要用到CPU 模块(F3 区)和八位逻辑电平显示模块(B5 区)、单次脉冲模块(E3 区)。

五、实验步骤

1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU 模块的P32;CPU 模块的P10 接八位逻辑电平显示模块的灯。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)连续按动单次脉冲产生电路的按键,发光二极管L0 每按一次状态取反,即隔一次点亮。

六、实验程序

LED BIT P1.0 LEDBuf BIT 20H org 0 ljmp Start org 3 Interrupt0:

push PSW

5

cpl LEDBuf mov c, LEDBuf mov LED, c

pop PSW reti Start:

clr LEDBuf clr LED

mov TCON, #01h mov IE, #81h OK: ljmp OK

end 七、实验现象

程序运行,没按下脉冲产生键时,LED灯没有变化,以后每按一次脉冲产生键时,LED灯的状态取反一次,即每隔一次点亮。。 八、程序分析

本实验主要有两个模块:中断模块和主程序模块,主程序主要是用来初始化中断的,包括中断模式的选择,中断开关的打开,当脉冲变化时触发中断,硬件自动产生ACALL指令,跳转到中端口执行程序。 九、实验心得

从这个实验中,我们了解到单次脉冲产生电路,也学会了如何通过外部的控制,达到对中端的处理。通过这次实验我了解了单片机芯片的结构及编程的方法,巩固了汇编语言编程的能力,进一步加深了对汇编语言的认识,以及软件、硬件的结合有了深入的理解。

6

实验三:定时/计数器实验

一、实验目的

学习MCS-51 内部计数器的使用和编程方法。 二、实验内容

使用MCS-51 内部定时/计数器,定时一秒钟,CPU 运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。 三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明

关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器,定时为一秒钟。

定时器有关的寄存器有工作方式寄存器TMOD 和控制寄存器TCON。TMOD 用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。

内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12 个振荡器周期。假设实验系统的晶振是12MHZ,程序工作于方式2,即8 位自动重装方式定时器, 定时器100uS中断一次, 所以定时常数的设置可按以下方法计算: 机器周期=12÷12MHz=1uS

(256-定时常数)×1uS=100uS

定时常数=156。然后对100uS 中断次数计数10000 次,就是1 秒钟。

在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。

本实验需要用到CPU 模块(F3 区)和八位逻辑电平显示模块(B5 区)。 五、实验步骤 1)系统各跳线器处在初始设置状态,用导线连接CPU 模块P10 到八位逻辑电平显示模块的L0。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。 六、实验程序

Tick equ 10000

T100us equ 156

C100us equ 30h LEDBuf bit 20h

org 0 ljmp Start org 000bh T0Int:

push PSW

mov a, C100us+1 jnz Goon dec C100us

7

Goon:

dec C100us+1 mov a, C100us orl a, C100us+1

jnz Exit mov C100us, #27H mov C100us+1, #10H cpl LEDBuf Exit:

pop PSW reti Start:

mov TMOD, #02h mov TH0, #t100us mov TL0, #t100us

mov IE, #10000010b setb TR0 clr LEDBuf clr P1.0

mov C100us, #27H mov C100us+1, #10H Loop:

mov c, LEDBuf mov P1.0, c ljmp Loop

end 七、实验现象

程序运行后,发光二极管LO每隔一秒点亮一次。 八、程序分析

本实验主要有两个模块:定时初始化模块和中断模块。主程序主要是用来初始化定时的,包括定时模式的选择,为方式2模式,该模式精度高能够准确定时,还包括定时器的初值设定,设定为100us。当定时标志位高电位自动跳转到中断程序中,如果未满10000次就得继续返回主程序,无法实现CPL LEDBuf指令。而要实现本功能,最重要的是orl a,C100us+1这条语句,只有当计数单元的高位和地位都位0才使得a为0,也就是说只有计满10000次才能调转。否则跳转到exit. 九、实验心得

通过本次实验,我对单片机的定时\\计数功能有了一定的了解,熟悉了定时\\计数的设置。 另外我也掌握了它的控制和最基本的应用,初步获悉了定时\\计数器的内部结构,再结合上一次实验对中断的了解,二者配合,巩固了对中断和定时\\计数的知识,为下一步的学习打下坚实的基础。

8

实验四:交通灯控制实验

一、实验目的

掌握十字路口交通灯控制方法。 二、实验内容

利用系统提供的双色LED 显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。4 位LED 数码管显示时间,LED 显示红绿灯状态。 三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明与电路原理图

交通信号灯控制逻辑如下:假设一个十字路口为东西南北走向。开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20 秒),东西路口的绿灯,闪烁若干次后(3 秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2 秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20 秒),南北路口的绿灯闪烁若干次后(3 秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2 秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。

双色LED 是由一个红色LED 管芯和一个绿色LED 管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。本实验需要用到CPU 模块(F3 区)、静态数码管/双色LED 显示模块(B4 区)双色LED显示电路原理参见下图。

五、实验程序框图

实验示例程序框图如图4-2。

9

图4-2 程序流程图

六、实验步骤

1)系统各跳线器处在初始设置状态。P10 同时接G1、G3;P11 同时接R1、R3;P1.2 同时接G2、G4;P1.3 同时接R2、R4;P1.6、P1.7 分别接静态数码显示的DIN、CLK。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)观察十字路口交通灯效果。 七、实验程序

SECOND1 EQU 30H SECOND2 EQU 31H DBUF EQU 40H TEMP EQU 44H LED_G1 BIT P1.0 LED_R1 BIT P1.1 LED_G2 BIT P1.2 LED_R2 BIT P1.3

Din BIT P1.6

CLK BIT P1.7

ORG 0000H LJMP START

ORG 0100H

10

START: LCALL STATE0 LCALL DELAY

MOV TMOD,#01H MOV TH0, #3CH MOV TL0, #0B0H

SETB TR0

CLR EA

LOOP: MOV R2,#20 MOV R3,#20 MOV SECOND1,#25 MOV SECOND2,#25 LCALL DISPLAY

LCALL STATE1

WAIT1: JNB TF0,WAIT1 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H SETB TR0 DJNZ R2,WAIT1

MOV R2,#20 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT1

MOV R2,#5

MOV R3,#3 MOV R4,#4 MOV SECOND1,#5 MOV SECOND2,#5 LCALL DISPLAY

WAIT2: LCALL STATE2 JNB TF0,WAIT2 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H

DJNZ R4,WAIT2 CPL LED_G1 MOV R4,#4

11

DJNZ R2,WAIT2 MOV R2,#5 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT2

MOV R2,#20 MOV R3,#2 MOV SECOND1,#2 MOV SECOND2,#2 LCALL DISPLAY

WAIT3: LCALL STATE3 JNB TF0,WAIT3 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H DJNZ R2,WAIT3

MOV R2,#20 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT3

MOV R2,#20 MOV R3,#20 MOV SECOND1,#25 MOV SECOND2,#25 LCALL DISPLAY

WAIT4: LCALL STATE4 JNB TF0,WAIT4 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H DJNZ R2,WAIT4 MOV R2,#20 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT4

12

MOV R2,#5 MOV R4,#4 MOV R3,#3 MOV SECOND1,#5 MOV SECOND2,#5 LCALL DISPLAY

WAIT5: LCALL STATE5 JNB TF0,WAIT5 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H

DJNZ R4,WAIT5 CPL LED_G2 MOV R4,#4

DJNZ R2,WAIT5

MOV R2,#5 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT5

MOV R2,#20 MOV R3,#2 MOV SECOND1,#2 MOV SECOND2,#2 LCALL DISPLAY

WAIT6: LCALL STATE6 JNB TF0,WAIT6 CLR TF0

MOV TH0, #3CH MOV TL0, #0B0H DJNZ R2,WAIT6 MOV R2,#20 DEC SECOND1 DEC SECOND2 LCALL DISPLAY

DJNZ R3,WAIT6

LJMP LOOP

13

STATE0: MOV P1,#0 CLR LED_G1

SETB LED_R1 CLR LED_G2

SETB LED_R2 RET

STATE1: SETB LED_G1 CLR LED_R1 CLR LED_G2

SETB LED_R2 RET

STATE2: CLR LED_R1

CLR LED_G2 SETB LED_R2 RET

STATE3: SETB LED_G1

SETB LED_R1 CLR LED_G2

SETB LED_R2 RET

STATE4: CLR LED_G1

SETB LED_R1 SETB LED_G2 CLR LED_R2 RET

STATE5: CLR LED_G1

SETB LED_R1 CLR LED_R2 RET

STATE6: CLR LED_G1

SETB LED_R1

14

SETB LED_G2

SETB LED_R2 RET

DISPLAY: MOV A, SECOND1 MOV B, #10 DIV AB

MOV DBUF+1,A MOV A,B MOV DBUF, A

MOV A, SECOND2 MOV B, #10 DIV AB

MOV DBUF+3, A MOV A,B

MOV DBUF+2, A

MOV R0,#DBUF MOV R1,#TEMP MOV R7,#4

DP10: MOV DPTR,#LEDMAP MOV A,@R0 MOVC A,@A+DPTR MOV @R1,A INC R0 INC R1

DJNZ R7,DP10 MOV R0,#TEMP MOV R1,#4 DP12: MOV R7,#8 MOV A,@R0 DP13: RLC A MOV DIN,C CLR CLK SETB CLK DJNZ R7,DP13 INC R0

DJNZ R1,DP12 RET

LEDMAP: DB 3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,B

15

DB 58H,5EH,7BH,71H,0,40H ;C,D,E,F, , -

Delay: mov r5, #5 DLoop0:mov r6, #0 DLoop1:mov r7, #0 DLoop2: NOP NOP

djnz r7, DLoop2 djnz r6, DLoop1

djnz r5, DLoop0 ret END 八、实验现象

运行程序后,开始四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,路口方向通车。延时一段时间后(20s),东西路口的绿灯,闪烁若干次后(3s),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2s),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20s),南北路口的绿灯闪烁若干次后(3s),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2s),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。 九、程序分析

本实验共分为五个模块,交通灯初始模块,6种交通状态的调用模块,6种交通状态和1个初始状态模块,显示模块,以及延时模块,每一个状态的原理如下:首先调用交通状态模块中的各状态,以此达到个I/O端口的设置,然后进行延时,设置定时器的工作方式,初值,接着采用中断查询的方式来判断状态是否结束,最后调用显示模块。在每个状态也是需要进行循环设置和显示的。另外显示模块中,采用动态显示的方式,利用数据线和控制线船型显示数码管,节约了导线成本,只有2个输入端。 十、实验心得

通过本次实验,我对交通灯有了更进一步的了解。交通灯是有6种状态的。本实验让我学会和巩固了以前的知识。另外我对数码管的显示原理也有了进一步的理解,收获很大。

16

实验五:串转并与并转串实验

一、实验目的

1.掌握使用74LS164 扩展输出的方法。 2.掌握使用74LS165 扩展输入的方法。 二、实验内容

使用74LS165 扩展输入数据,使用74LS164 扩展输出数据。74LS165 的并行口接八位逻辑电平输出(开关),CPU 使用P1.0、P1.1 和P1.2 串行读入开关状态;74LS164 的并行口接一只数码管,CPU 使用P1.3 和P1.4 串行输出刚读入的开关状态,使之在数码管上显示出来。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明与电路原理图

1)74LS165 为8 位移位寄存器,其引脚功能如下: S/L:移位/置数端,低电平有效。 P0~P7:并行数据输入端。 QH、QH:串行数据输出端。

CLK、CKLINH:时钟信号输入端。

2)74LS164 为串行输入并行输出移位寄存器,其引脚功能如下: A、B:串行输入端; Q0~Q7:并行输出端; MR:清零端,低电平有效;

CLK:时钟脉冲输入端,上升沿有效。

3)用P1 端口输出数据时,要编程位移数据,每操作一个数据位,对应一个移位脉冲。 4)本实验需要用到CPU 模块(F3 区)、八位逻辑电平输出模块(E4 区)和静态数码管显示模块(B4 区)。74LS165 电路原理图参见图5-1,74LS164 电路原理图参见图8-2。

注:74LS164 集成电路芯片在主板反面。

图5-1 74LS165 电路 16

17

图5-2 74LS164电路

五、实验步骤

1)系统各跳线器处在初始设置状态。

用导线对应连接八位逻辑电平输出模块的QH165、CLK165、SH/LD 到CPU 模块的P10、 P11、P12。用导线对应连接静态数码管显示模块的DIN、CLK 到CPU 模块的P13、P14。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)观察数码(八段码)管的亮灭与拨动开关的状态是否一致。拨动开关拨上输出为高电平,段码点亮。 六、实验程序

QH165 BIT P1.0 CLK165 BIT P1.1 SH_LD BIT P1.2

DAT164 BIT P1.3 CLK164 BIT P1.4 MEMORY EQU 30H

ORG 0000H

AJMP START ORG 00B0H

START: setb CLK165 clr SH_LD setb SH_LD mov r7, #8 Input: rr a mov c, QH165 mov ACC.7, c

18

clr CLK165 nop

setb CLK165

djnz r7, Input

mov MEMORY,A mov A,MEMORY

mov r6,#8 Output:

rrc A mov DAT164,C clr CLK164 setb CLK164

djnz r6, Output

acall DELAY

sjmp START DELAY:

mov R0,#5 DD2: mov R1,#0FFH djnz R1,$ djnz R0,DD2

RET

END 七、实验现象

程序运行后,波动开关,对应的发光二极管发光,且波动开关拨下的时候输出低电平。 八、程序分析

本实验主要是74LS165与74LS164这两块芯片的使用,CPU使用P1.0、P1.1、P1.2串行读入开关状态。74LS164的并行口接一只数码管,CPU使用P1.3、P1.4串行输出刚读入的开关状态,使之在数码管上显示出来。实验流程主要是先将并行口的开关通过74LS165进行转换成串行输出,然后经过单片机的控制,再在74LS164的作用下将串行数据转换成并行数据,从而使得对应的静态数码管点亮。 九、实验心得

通过本次实验,我对串行并和并转串的原理和结构有了进一步的了解。通过单片机的控制可以使得74LS165与74LS164进行完美的结合,二结构主要是个芯片的连接。在实验室当中我们体会到了实验的神奇,激励我们不断学习。

19

实验六:8255 控制键盘与显示实验

一、实验目的

1.掌握8255 输入、输出编程方法。

2.掌握阵列键盘和数码管动态扫描显示的控制方法。 二、实验内容

用8255 可编程并行口做一个键盘、显示扫描实验,把按键输入的键值,显示在8255 控制的七段数码管上。8255 PB 口做键盘输入线,PC 口做显示扫描线,PA 口做显示数据线。 三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明

本实验需要用到 CPU 模块(F3 区)、8255 模块(C6 区)、8279 键盘与显示模块(E7 区)。CS_8255 接8000H,则8255 状态/命令口地址为8003H,PA 口地址为8000H,PB 口地址为8001H、PC 口地址为8002H。8255 键盘与显示电路原理图参见图7-1A、图7-1B。

图7-1A 键盘显示电路1 22

20

图7-1B 键盘显示电路2

五、实验步骤

1)系统各跳线器处在初始设置状态,S11E 和S12E 红开关全部打到下方(OFF)。 2)用8 位数据线对应连接8255 模块的JD3C(PA 口)、JD4C(PB 口)、JD5C(PC 口)到8279 模块的JD3E、JD2E、JD4E;用导线连接8255 模块的CS_8255 到地。

3)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

4)在键盘上按任一单键,观察数码管的显示,数码管低位显示按键值。 六、实验程序

D8255A EQU 8000H D8255B EQU 8001H D8255C EQU 8002H D8255 EQU 8003H LEDBUF EQU 50H KEYVAL EQU 60H

ORG 0000H LJMP START ORG 0100H START: MOV SP,#80H

MOV DPTR,#D8255 MOV A,#90H MOVX @DPTR,A

21

MOV LEDBUF,#10H MOV LEDBUF+1,#11H MOV LEDBUF+2,#11H MOV LEDBUF+3,#11H MOV LEDBUF+4,#5 MOV LEDBUF+5,#5 MOV LEDBUF+6,#2 MOV LEDBUF+7,#8 KB_DIS: LCALL RD_KB MOV A,#0FFH

CJNE A,KEYVAL,TOSHOW SJMP SHOW TOSHOW: MOV LEDBUF,KEYVAL SHOW: LCALL DISPLAY

SJMP KB_DIS RD_KB: MOV A,#02H MOV DPTR,#D8255C MOVX @DPTR,A

MOV DPTR,#D8255A MOVX A,@DPTR MOV R1,#00H

CJNE A,#0FFH,KEYCAL MOV A,#01H MOV DPTR,#D8255C MOVX @DPTR,A

MOV DPTR,#D8255A MOVX A,@DPTR MOV R1,#08H

CJNE A,#0FFH,KEYCAL SJMP NOKEY

KEYCAL: MOV R0,#08H SHIFT: RRC A JNC TORET INC R1

DJNZ R0,SHIFT

SJMP NOKEY TORET: MOV KEYVAL,R1 RET

NOKEY: MOV KEYVAL,#0FFH RET

Display:MOV R7,#8 MOV R5,#0

MOV R0,#LEDBUF

22

DLOOP: MOV A,R5 RL A RL A RL A

ANL A,#11111011B INC R5

MOV DPTR,#D8255C

MOVX @DPTR,A 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 七、实验现象

运行程序后,本次实验共有2排键盘,各个键盘上面都有数字,在键盘上按任意键,可以看到数码管上显示了按键的数字。 八、程序分析

程序通过对输入量的识别,跳转到不同的程序段执行来实现不同按键输出。并且通过查表来实现不同字符的显示。实验通过8255芯片来对键盘的输入和显示,并采用扫描法对键盘输入进行识别,并采用动态显示结果。通过程序的编写和电路的连接基本上实现实验的要求。 九、实验小结

通过本次实验我基本上掌握了键盘输入和显示的方法。通过实验基本上掌握了8255的使用方法,并且掌握了键盘按键识别的方法,可以为以后的电路设计提供方法。

23

实验七:LCD 显示实验

一、实验目的

掌握点阵式(128×64点)带汉字字库液晶显示屏的程序设计方法。 二、实验内容

根据系统提供的电路,掌握128×64 点阵LCD 的工作原理,编程实现显示字符、汉字和图片。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明

系统使用OCMJ4X8C_3型液晶显示屏(奥可拉中文集成模块)。此模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。内置2M-位中文字型ROM (CGROM) 总共提供8192个中文字型(16x16点阵),16K位半宽字型ROM(HCGROM) 总共提供126 个符号字型(16x8点阵),64x16位字型产RAM(CGRAM),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。提供多功能指令:画面清除(Display clear)、光标归位(Return home)、显示打开/关闭(Display on/off)、光标显示/隐藏(Cursor on/off)、显示字符闪烁(Displaycharacter blink)、光标移位(Cursor shift)、显示移位(Displayshift)、垂直画面卷动(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standbymode)。 本实验需要用到CPU模块(F3区)、LCD液晶显示模块(B3区)。 五、实验步骤

1)系统各跳线器处在初始设置状态,JT2B 跳线器的两只短路帽置位上端。用导线对应连接液晶显示模块的RS、R/W、E、PSB、RST 到CPU 模块的P10~P14。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)LCD 将显示字符和汉字及图形。 六、实验程序 ;RS=CS=D/I ;R/W=STD=STD ;E=SCLK=SCLK

CS BIT P1.0 STD BIT P1.1 SCLK BIT P1.2 PSB BIT P1.3 RES BIT P1.4

START EQU 30H COM EQU 31H HDATA EQU 32H LDATA EQU 33H ASC EQU 34H

24

XPOS EQU 35H YPOS EQU 36H ORG 0000H MAIN:

MOV SP,#60H CLR RES

SETB RES SETB CS CLR PSB CALL LCDRESET CALL HZKDIS MOV START,#0F8H MOV COM,#80H CALL LCDWRITE

MOV START,#0FAH MOV COM,#10H CALL LCDWRITE

MOV COM,#11H CALL LCDWRITE

MOV COM,#1EH CALL LCDWRITE

MOV COM,#1FH CALL LCDWRITE

MOV START,#0F8H MOV COM,#34H CALL LCDWRITE

MOV COM,#05H CALL LCDWRITE

CALL DL40MS CALL DL40MS CALL DL40MS

MOV A,#055H CALL LCDFILL

CALL CLEAR JMP MAIN

CLEAR: MOV A,#00H CALL LCDFILL RET LCDRESET:

LCALL DL1MS MOV START,#0F8H MOV COM,#30H LCALL LCDWRITE

25

MOV COM,#0CH

LCALL LCDWRITE MOV COM,#01H LCALL LCDWRITE LCALL DL1MS

MOV COM,#06H LCALL LCDWRITE LCALL DL1MS RET

LCDWRITE: MOV A,COM ANL A,#0F0H MOV HDATA,A MOV A,COM SWAP A ANL A,#0F0H

MOV LDATA,A MOV A,START LCALL SENDBIT LCALL DL1MS MOV A,HDATA LCALL SENDBIT LCALL DL1MS MOV A,LDATA LCALL SENDBIT LCALL DL1MS RET

HZKDIS: MOV R5,#2

MOV START,#0F8H MOV COM,#80H LCALL LCDWRITE MOV DPTR,#TAB

MOV A,#00H DIS_1: MOV R6,#8 DIS_2: MOV START,#0FAH CLR A

MOVC A,@A+DPTR MOV COM,A

CALL LCDWRITE INC DPTR CLR A

MOVC A,@A+DPTR MOV COM,A

26

CALL LCDWRITE INC DPTR CALL DL40MS

DJNZ R6,DIS_2 MOV START,#0F8H MOV COM,#90H CALL LCDWRITE DJNZ R5,DIS_1 MOV R5,#2

MOV START,#0F8H MOV COM,#88H CALL LCDWRITE DIS_4: MOV R6,#08H DIS_3:

MOV START,#0FAH CLR A

MOVC A,@A+DPTR MOV COM,A

CALL LCDWRITE INC DPTR CLR A

MOVC A,@A+DPTR MOV COM,A

CALL LCDWRITE INC DPTR CALL DL40MS

DJNZ R6,DIS_3 MOV START,#0F8H MOV COM,#98H CALL LCDWRITE

DJNZ R5,DIS_4 RET LCDFILL:

MOV R4,A MOV XPOS,#0 MOV YPOS,#0 MOV START,#0F8H

MOV COM,#30H CALL LCDWRITE

MOV COM,#01H CALL LCDWRITE

MOV COM,#36H CALL LCDWRITE

27

LCD_A1:

MOV YPOS,#0 LCD_A2:

MOV START,#0F8H

MOV A,XPOS ADD A,#80H MOV COM,A CALL LCDWRITE

MOV A,YPOS ADD A,#80H MOV B,A MOV COM,A CALL LCDWRITE

MOV START,#0FAH MOV COM,R4 CALL LCDWRITE CALL LCDWRITE INC YPOS MOV A,B

CJNE A,#87H,LCD_A2 INC XPOS MOV A,XPOS

CJNE A,#20H,LCD_A1 MOV XPOS,#0 LCD_A3:MOV YPOS,#0 LCD_A4:

MOV START,#0F8H

MOV A,XPOS ADD A,#80H MOV COM,A CALL LCDWRITE

MOV A,YPOS

ADD A,#80H MOV B,A MOV COM,A CALL LCDWRITE

MOV START,#0FAH MOV COM,R4 CALL LCDWRITE CALL LCDWRITE INC YPOS MOV A,B

28

CJNE A,#8FH,LCD_A4 INC XPOS MOV A,XPOS

CJNE A,#20H,LCD_A3 RET

SENDBIT: MOV R7,#08H SEND_1:

RLC A

MOV STD,C CLR SCLK SETB SCLK

DJNZ R7,SEND_1 RET

DL1MS: PUSH 00H PUSH 01H PUSH 02H MOV R2,#01H WA_PA: MOV R0,#0FH WA_PB: MOV R1,#0FH DJNZ R1,$ DJNZ R0,WA_PB DJNZ R2,WA_PA POP 02H POP 01H POP 00H RET NOP RET

DL40MS: ;延时子程序40MS

SETB PSW.3 MOV R2,#03H DL_PA: MOV R0,#0FFH DL_PB: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,DL_PB DJNZ R2,DL_PA CLR PSW.3 RET TAB:

DB '----天煌教仪----'

29

DB '----中文图形----' DB '--液晶显示模块--' DB '电话571-85222070' DB 00H END

七、实验现象

液晶显示屏上依次出现'----天煌教仪----''----中文图形----''--液晶显示模块--''电话571-85222070'四行汉字,然后屏幕从上到下开始黑屏,整个屏幕变黑后再从上到下开始变亮,然后又开始出现汉字,重复进行。 八、程序分析

本实验使用OCMJ4X8C_3型液晶显示屏。首先进行初始化,调用汉字显示子程序。由于模块自带有汉字图案库,通过模块功能对查表所得的汉字图案先转换成二进制码,再通过二进制码在库中找到对应汉字和图案。进行坐标绘图时首先设定好起始坐标,再绘图。 九、实验心得

本实验与实际生活联系较为密切,是单片机实际应用的简单实例。通过本次实验,有助于我们对单片机向外扩展的认识,同时加深了我们对程序的分析能力。

30

实验八:并行A/D 转换实验

一、实验目的

1.掌握ADC0809 模/数转换芯片与单片机的连接方法及ADC0809 的典型应用。 2.掌握用查询方式、中断方式完成模/数转换程序的编写方法。 二、实验内容

利用系统提供的ADC0809 接口电路,实现单片机模数转换。模拟信号为0~5V 电位器分压输出,单片机控制ADC0809 读取模拟信号,并在数码管上用十六进制形式显示出来。 三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。 四、实验说明和电路原理图

1.本实验使用ADC0809 模数转换器,ADC0809 是8 通道8 位CMOS 逐次逼近式A/D 转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D 转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。 芯片的引脚如图8-1,各引脚功能如下:

IN0~IN7:八路模拟信号输入端。

ADD-A、ADD-B、ADD-C:三位地址码输入端。

CLOCK:外部时钟输入端。CLOCK 输入频率范围在10~ 1280KHz,典型值为640KHz,此时A/D 转换时间为100us。 51 单片机ALE 直接或分频后可与CLOCK 相连。 D0~D7:数字量输出端。

OE:A/D 转换结果输出允许控制端。

当OE 为高电平时,允许A/D 转换结果从D0~D7端输出。 ALE:地址锁存允许信号输入端。

八路模拟通道地址由A、B、C 输入,在ALE 信号有效时将该八路地址锁存。 START:启动A/D 转换信号输入端。

当START 端输入一个正脉冲时,将进行A/D 转换。 EOC:A/D 转换结束信号输出端。

当 A/D 转换结束后,EOC 输出高电平。 Vref(+)、Vref(-):正负基准电压输入端。 基准正电压的典型值为+5V。

2.本实验需要用到CPU 模块(F3 区)、电位器模块(E2 区)、并行模数转换模块(D7 区)、串行静态数码显示模块(B4 区)。ADC0809 并行模数转换电路原理参见图8-2。

图8-1 0809 引脚 27

31

图8-2 ADC0809 并行模数转换电路

五、实验步骤

1)系统各跳线器处在初始设置状态。

用导线对应连接并行模数转换模块的CS_0809、EOC 到CPU 模块的8000、P32; 电位器模块的输出端接并行模数转换模块的IN-0; 并行模数转换模块的Vref 接+5V 电源;

CPU 模块的P10、P11 接串行静态数码显示模块DIN、CLK。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)数码管以十六进制形式显示模拟量,手动调节输入电位器,改变输入模拟量电压的大小,数码管显示将随之变化。 六、实验程序

DBUF EQU 30H TEMP EQU 40H

D0809 EQU 8000H DIN BIT P1.0 CLK BIT P1.1

ORG 0000H JMP START ORG 0080H START:

MOV DBUF+3,#0AH MOV DBUF+2,#0DH

32

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

33

SEGTAB: DB 3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,B DB 58H,5EH,79H,71H,0,00H ;C,D,E,F,- DELAY:

MOV R4,#80H AA1: MOV R5,#0FFH AA: NOP NOP

DJNZ R5,AA DJNZ R4,AA1 RET

END

七、实验现象与实验数据

调节电位器,万用表测得的电压与数码管数值变化。 模拟量是通过万用表测得,理论值是通过将模拟量与5V基准电压比较乘以255计算所得,实际值是数码管显示。 模拟量 数字量实际值 数字量理论值 0 00 00 0.1 0.3 0.5 0.8 1.0 1.3 1.5 2.0 2.5 3.2 3.5 4.0 4.4 4.71 05 05 10 0F 1B 1B 2E 29 36 33 48 42 51 4D 6C 66 88 80 AB 99 BC B3 D8 CC EE E6 FF F2 八、程序分析

本实验通过0809的IN_0与电位器相连将所得电压与基准电压,即与VREF相连的5V比较,通过芯片将所得模拟量电压转换数字量。将数字量通过0809的输出端口与单片机相连,存入寄存器A,通过程序将数据高四位与低四位分别取出,通过查表将对应表中数值在数码管上显示,即实际的数字量。 九、实验小结

本实验通过AD0809的功能实现了A/D转换,将电压转换为数字量在数码管上显示。让我们对A/D转换有了更深的认识。

34

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务