51单片机呼吸灯实验报告Word下载.docx
《51单片机呼吸灯实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《51单片机呼吸灯实验报告Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
整个系统的搭建,由以下元器件组成:
1、12MHz晶振一个;
2、stc89c51单片机一个;
3、30pf无极性电容2个;
4,、按钮一个;
5、10K电阻一个;
6、10uf有极性电容一个;
7、洞洞板一个;
8、LED灯若干。
2.1基于51单片机的最小系统的设计
STC89C51RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
组成部分包括:
1、一个八位中央处理器CPU;
2、一个片内震荡电路,时钟电路产生时钟信号,频率越高,速度越快;
3、128B的RAM。
51中共有256BRAM单元,后面128B是寄存器;
4、4KB的ROM;
5、2个16位定时器/计数器;
6、32条可编程的I/O线,4个8位并行I/O端口P0、P1、P2、P3;
7、一个全双工串行口;
8、5个中断源,两个外部中断源、两个定时器/计数器、中断源、一个串行中断源。
2.2时钟电路
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
stc89C51单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是放大器的输入端和输出端。
放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C3和C4构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。
2.3
复位电路
复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式。
2.4
电源电路
STC89c51的工作电压为5v,本任务中采用USB转串口供电,方便。
其中有两个引脚是数据通信的。
2.5
呼吸灯
采用普通蓝色雾状LED小灯泡,电压范围2.7V—4V之间。
电流约为20mA。
为保护LED灯,每个LED灯均串联了一个10K的电阻。
2.6
程序下载电路
用USB转串口线把电脑的USB口和单片机的串口连接;
USB的rxd接单片机的txd,USB的txd接单片机的rxd。
3软件基础与设计
3.1KeiluVision4集成开发环境的认识
2009年2月发布KeiluVision4,KeiluVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。
新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。
新版本支持更多最新的ARM芯片,还添加了一些其他新功能。
2011年3月ARM公司发布最新集成开发环境RealViewMDK开发工具中集成了最新版本的KeiluVision4,其编译器、调试工具实现与ARM器件的最完美匹配。
KeiluVision4的主要特点如下:
最新的KeiluVision4IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。
uVision4引入了灵活的窗口管理系统,能够拖放到视图内的任何地方,包括支持多显示器窗口。
uVision4在μVision3IDE的基础上,增加了更多大众化的功能。
·
多显示器和灵活的窗口管理系统
系统浏览器窗口的显示设备外设寄存器信息
调试还原视图创建并保存多个调试窗口布局
多项目工作区简化与众多的项
3.2KeiluVision4项目的创建
与其他软件开发类似,在呼吸灯项目开发中,首先在KeiluVision4集成开发环境中创建一个项目。
新建一个项目,选择对应的cup型号,本例程中选择AT89C51。
然后在新建一个文件,保存格式为.c格式。
如图所示:
项目新建好以后可以编写相应的代码程序。
3.3程序的编写
3.3.1延时函数
呼吸灯的形成原理是呼吸灯开的时候,以非常快的速度开-关-开-关,并逐渐加大开的时间比率,减小关的时间比率。
呼吸灯关的时候,以非常快的速度开-关-开-关,并逐渐加大关的时间比率,减小开的时间比率。
涉及到开关的时间,就需要一个延时函数。
voidDelay(unsignedintt)
{
while(--t);
}
主函数中传递一个值给延时函数,然后通过while循环,参数一直自减。
cup一直在处理这个参数的值,从而形成一段延时。
延时的长短取决于参数值的大小。
每执行一次9us。
3.3.2逐渐变暗
通过for循环控制LOW和CYCLE的值,逐渐增大低电平的延时时长,直到500,总耗时4.5*10^3us。
for(PWM_LOW=1;
PWM_LOW<
CYCLE;
PWM_LOW++)//PWM_LOW表示低
{
P0=0x00;
P1=0X00;
P2=0X00;
Delay(PWM_LOW);
P0=0XFF;
P1=0xff;
P2=0XFF;
Delay(CYCLE-PWM_LOW);
}
3.3.3逐渐变亮
同逐渐变暗原理相同,逐渐减小变暗的时间即可实现。
for(PWM_LOW=CYCLE-1;
PWM_LOW>
0;
PWM_LOW--)
{
P1=0x00;
P2=0x00;
//点亮LED
//熄灭LED
//主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1
4代码
#include<
reg51.h>
voidDelay(unsignedintt);
//函数声明
unsignedintz,y;
voidmain(void)//主函数
unsignedintCYCLE=500,PWM_LOW=0;
//定义周期并赋值
while
(1)//主循环
{
/*--------整排LED灯呼吸---------*/
P0=0x00;
P1=0x00;
P2=0x00;
Delay(200);
//加延时,可以看到熄灭的过程(下面程序同理)
PWM_LOW++)//PWM_LOW表示低
P0=0xff;
P2=0xff;
}
P0=0xff;
P1=0xff;
P2=0xff;
for(PWM_LOW=CYCLE-1;
PWM_LOW--)//与逐渐变亮相反的过程
P2=0xff;
}
}
}【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】