单灯闪烁程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ;长跳转

相关文档
最新文档