单片机实验报告
流水灯实验一
一:实验目的
1、掌握51单片机如何控制信号输出。
2、掌握Keil C集成开发环境的使用。
3、掌握51开发平台的使用。
二、实验内容
在开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象
三:实验程序
ORG 000H START: MOV A,#07FH
CLR
C
MOV R2,#08H
LOOP: RRC
A
;循环右移
MOV P1,A
;输出至P1口
LCALL DELAY
;调用延迟子程序(延迟100毫秒)
LCALL DELAY
;调用延迟子程序(延迟100毫秒)
DJNZ R2,LOOP
;循环转移
MOV R2,#07H
;设右移7次
LOOP1:RLC A
;带进位的循环左移指令
MOV P1,A
;输出至P1口
LCALL DELAY ;长调用指令
LCALL DELAY
DJNZ R2,LOOP1
JMP START
;跳回到START,再一次循环。
DELAY:MOV R4,#200
;延迟子程序(100毫秒)250*2*100=500*200us D1:
MOV R5,#248 ;=50*2ms=100ms
DJNZ R5,$ ;2us
DJNZ R4,D1 ;2us
RET END
功能:使两个相邻的灯同时亮,并向右循环移动,延时200ms。
流水灯实验二
一:实验目的
1、掌握51单片机如何控制信号输出。
2、掌握Keil C集成开发环境的使用。
3、掌握51开发平台的使用。
二、实验内容
查表法实现在开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象
三:实验程序
BEEP
BIT P2.0
BUFF_LED_LP
EQU 21H
;亮灯循环寄存器
org 000h
;org,指定一个地址,后面的程序或数据从这个地址值开始分配
JMP START
ORG 100H start:
mov
P1,#0ffh
;初始化MCU端口
MOV
A,#00H
;初始化寄存器
MOV
PSW,#00H
MOV
IE,#00H
MOV
SP,#30H
MOV
BUFF_LED_LP,#00H LOOP: MOV
DPTR,#TAB_A_LAMP
;设置亮灯花型列表地址(32种)
MOV
A,BUFF_LED_LP
;查询方式读取花型
MOVC A,@A+DPTR
CPL
A
;取反
MOV
P1,A
;LED小灯控制口
LCALL DEL1S
;长调用指令
INC
BUFF_LED_LP
;+1
MOV
A,BUFF_LED_LP
CJNE A,#32,LOOP
;比较条件转移指令
MOV
BUFF_LED_LP,#00H
JMP
LOOP TAB_A_LAMP:
DB 11111110B,11111100B,11111000B,11110000B,11100000B,11000000B,10000000B,00000000B
DB
10000000B,11000000B,11100000B,11110000B,11111000B,11111100B,11111110B,11111111B
DB
00011000B,00111100B,01111110B,11111111B,00000000B,10101010B,01010101B,11001100B
DB
00111100B,10000001B,11000011B,11100111B,11111111B,11100111B,11000011B,10000001B,00000000B
deL1S:
MOV
R5,#03H
;延时子程序(约0.5秒) DEL1S0: mov
R6,#0ffh DEL1S1: mov
R7,#0ffh
djnz
R7,$
djnz
R6,del1S1
DJNZ
R5,DEL1S0
;CPL
BEEP
ret
END
功能:通过查表法实现LED灯的点亮功能,低电平有效。首先是L8亮,继续是L
7、L8亮,继续是L
6、L
7、L8亮等等,从右往左,依次点亮;接着按照相反的顺序依次熄灭;全灭后,然后是L
4、L5灭,接着L
3、L
4、L
5、L6 灭,然后又全灭,接着全亮,再然后L
1、L
3、L
5、L7灭,L
2、L
4、L
6、L8亮,然后的亮灭与之相反,下面则是L
3、L
4、L
7、L8亮,其余灭;最后是L
3、L
4、L
5、L6灭,接着L1灭,然后L
3、L
4、L
5、L6亮,L
4、L5亮,接着全灭,然后又是L
4、L5亮,接着L
3、L
4、L
5、L6亮,L
1、L8灭,最后全灭。按此顺序循环执行。
按键实验三
一:实验目的
1.学习非编码键盘的工作原理和键盘的扫描方式。 2.学习键盘的去抖方法和键盘应用程序的设计。
二:实验内容
用按键控制发光管的亮或灭
三:实验程序 KEY BIT
P3.3
SW1 BIT
P2.7 ;P2.2
by htq
ORG 000H
START: mov sp,#40h
mov p2,#0ffh
mov p3,#0ffh
MOV P1,#0ffh;
clr key
WAIT: ;JB
KEY,$
;等候按键! by htq
JB
SW1,$
lcall delay
cpl
P1.0
JNB
SW1,$ ;wait key is released
lcall delay ;by htq
cpl
p1.1
JNB
SW1,$
lcall delay cpl
p1.2
JNB
SW1,$
lcall delay
JMP
wait
DELAY:
MOV R3,#200 D1:
MOV R4,#200
DJNZ R4,$
DJNZ R3,D1
RET END
功能:通过按键sw1实现L
1、L
2、L3的亮灭,按一下sw1,L
1、L
2、L3依次亮。
计时实验四
一:实验目的
用单片机89C51的定时/计数器实现倒计时。采用两位数码管静态显示倒计时秒值。 二:实验内容
实现0~39的倒计时。
三:实验程序
MIAO
EQU
21H
GEWEI
EQU
22H
SHIWEI
EQU
23H
SCANLED
BIT
01H
ORG 000H
;ORG伪指令使用于程序定位
JMP
START
ORG
0BH
JMP
TIMER0
;定时0中断入口地址 START:MOV SP,#40H
;设定堆栈指针
MOV TMOD,#01H
;设定定时器1为工作方式1
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0
MOV IE,#10000010B
MOV R7,#200
MOV MIAO,#39
AJMP $ TIMER0:PUSH
ACC
;定时器1中断服务子程序
PUSH
PSW
MOV
TH0,#HIGH(65536-5000)
MOV
TL0,#LOW(65536-5000)
DJNZ
R7,TIM0_LP
;not 1s
MOV
R7,#200
DJNZ
MIAO,TIM0_LP
MOV
MIAO,#39
; TIM0_LP: MOV
A,MIAO
LCALL BIN_BCD
MOV
SHIWEI,A
MOV
GEWEI,B
CPL
SCANLED
JB
SCANLED,SCAN_L1
JMP
SCAN_L2
SCAN_L1: MOV
P2,#10111111B
;显示十位
MOV
A,SHIWEI
JMP
END_SCAN SCAN_L2: MOV
P2,#11011111B
;显示个位
MOV
A,GEWEI END_SCAN: MOV
DPTR,#TABLE
MOVC A,@A+DPTR
MOV
P0,A
POP
PSW
POP
ACC
RETI BIN_BCD: MOV B,#10
DIV
AB
RET TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END 动能:实现0~39的倒计时,同时改变在数码管上显示的计数位置,居中显示计数结果。