当前位置:文档之家› 单灯闪烁程序

单灯闪烁程序

实验一单灯闪烁实验
一、实验要求
发光二极管按照设定的时间间隔闪烁。

二、实验目的
1、了解单片机内部结构和最小系统。

2、掌握单片机与LED的硬件连接。

3、掌握单片机C51语言的程序框架。

4、了解Keil软件和Proteus软件的使用。

5、参考电路图一般最小系统
包括单片机、电源、时钟
电路、复位电路四部分。

根据编写的程序P1.0 口
接发光二极管。

三、实验说明
Proteus仿真时注意与LED连接的电阻阻值,若阻值过大LED 将没有反应。

编写程序时,注意for语句于简单延时语句的运用。

四、实验框图
LED
LED
五、实验程序
ORG 0
START: CLR P1.0 LCALL DELAY SETB P1.0
LCALL DELAY LJMP START DELAY: MOV R5,#20 D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
实验二LED流水灯实验
一、实验要求
编写一段流水灯控制程序,用P1 口作为输出控制端,实现八只发光二极管从左至右循环亮灭。

二、实验目的
1、进一步熟悉keil仿真软件、proteus仿真软件的使用。

2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。

3、掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。

三、参考电路图复位电路、时钟电路的基础连线。

P1端口分
别连接八只发光二极管。

四、实验说明编写程序时注意对延时子程序的使用,以及了
解_crol函数的使用。

unsigned char _crol_(unsigned char c,unsigned char b); 描述:
将字符c循环左移b位。

_crol_函数有返回值,返回的是将c循环左移之后
的值。

这是c51库自带函数,包含在intrins.h文件中。

五、实验框图
单片机初始
六实验程序
ORG 0
MOV A,#00000001B
LOOP:MOV P2,A
RL A
ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1 DJNZ R1,DEL2
RET
End
实验四蜂鸣器的应用实验
一、实验要求
利用单片机P3.7口实现用蜂鸣器播放一首歌曲。

二、实验目的
掌握通过控制蜂鸣器音乐的发声。

三、参考电路图蜂鸣器一端接地
一端接P3.7口。

四、实验说明
频率的倒数是周期。

根据音频频率可以计算出改音频频率的半周期。

再编出一个延时子函数(有形参),调用时给出不同的实参,使之发出不同周期(频率)的脉冲方波,就能发出不同频率的音频。

音符单一节拍时间相同,但一个节拍内的脉冲概述是不同的。

因此,每个音符在一拍内的循环次数与半周期参数之积应基本相同(约25200)。

据此,就编制了音符节拍长度组数。

利用延时函数控制音频半周期,会有误差,使音频失真。

五、实验框图
大循环
六、实验程序
OUT BIT P2.3 //该引脚接蜂鸣器
ORG 0000H ;主程序起始地址
LJMP START ;长跳转到主程序
ORG 000BH ;TIMERO中断起始地址
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H ;T0赋初值
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断 RETI ;中断返回
START: MOV SP,#50H ;堆栈从五十开始
MOV TH0,#0D8H ;T0赋初值
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
MOV TMOD,#01H ;设置定时器0工作方式为1即16位定时器
MOV IE,#82H ;中断使能
MUSIC0:NOP ;延时
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1:NOP ;延时
CLR A ;清零A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行 LJMP MUSIC3 ;长跳转
MUSIC5:NOP ;延时
MOV R6,A ;RH=18H音符的频率
INC DPTR ;DPTR加一
MOV A,B ;传送指令,把B的内容传送到A
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A ;R7=30H音符发音的时间
SETB TR0 ;启动计数
MUSIC2:NOP ;延时
CPL OUT ;频率产生
MOV A,R6 ;把寄存器R6的内容送到累加器A中 MOV R3,A ;R3=R6=18H
LCALL DEL ;调用DEL函数
MOV A,R7 ;把寄存器R7的内容送到累加器A中 CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?
;不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR ;DPTR加一
INC B ;B加一
LJMP MUSIC1 ;长跳转
MUSIC3:NOP ;延时
CLR TR0 ;休止100毫秒
MOV R2,#0DH ; R2=13
MUSIC4:NOP ;延时
MOV R3,#0FFH ;R3=255
LCALL DEL ;调用DEL函数
DJNZ R2,MUSIC4 ;延音程序
INC DPTR ;DPTR加一
LJMP MUSIC1 ;长跳转
END0: NOP ;延时
MOV R2,#64H ;歌曲结束,延时1秒后继续
MUSIC6:MOV R3,#00H ;和低字节清零
LCALL DEL
DJNZ R2,MUSIC6 ;延音程序
LJMP MUSIC0
DEL: NOP ;延时
DEL3: MOV R4,#02H ;延时子程序,12M晶振延时约1秒
DEL4: NOP ;延时
DJNZ R4,DEL4 ;延时程序
NOP ;延时
DJNZ R3,DEL3 ;延时程序
RET ;子程序返回
NOP ;延时程序
DAT: ;歌谱
DB 32,32,32,32,32,32,32,32,32,32,32,32,32,48,16,64 DB 32,32,32,32,32,32,32,32,32,32,32,32,48,16,64
DB
32,32,32,32,32,16,16,32,32,32,16,16,32,32,32,32,
32,64
DB 32,32,32,32,32,32,32,32,32,32,32,32,16,16,64
END ;结束
实验六外部中断实验
一、实验要求
通过按键使用外部中断1方式控制LED灯的亮灭。

二、实验目的
1、掌握使用外部中断的使用方法。

三、参考电路图
P1.0接LED,P3.3口(INT1)接外部开关。

四、实验说明
每次按键都会触发INT1中断,中断发生时将LED状态取反,产生LED状态由按键控制的效果。

五、实验框图
LED
1
LED
六、实验程序
ORG 0000H
AJMP START
ORG 0003H
AJMP EXINT1
ORG 0013H
AJMP EXINT2
ORG 0030H
START:
MOV SP,#60H ;设置堆栈
SETB IT0 ;分别开启T0和T1的中断
CLR IE0
SETB EX0
SETB IT1
CLR IE1
SETB EX1
SETB EA
MOV R1,#02H ;设置操作标志
LOOP:
MOV R0,A
MOV A,R1
SUBB A,#00H ;判断是否是00H
JZ TTRL
SUBB A,#01H ;判断是否是01H
JZ TTRR
MOV A,#0FCH
MOV P1,A
AJMP LOOP
TTRL:
MOV A,R0 ;左移的操作
RL A
MOV P1,A
ACALL DELAY
AJMP LOOP
TTRR:
MOV A,R0 ;右移的操作
RR A
MOV P1,A
ACALL DELAY
AJMP LOOP ;未接到中断的时候循环等待EXINT1:
MOV R1,#00H
RETI
EXINT2:。

相关主题