单灯闪烁程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一单灯闪烁实验
一、实验要求
发光二极管按照设定的时间间隔闪烁。
二、实验目的
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 ;长跳转