51单片机呼吸灯c语言,51单片机呼吸灯C语言版.doc

基于单片机与PWM的呼吸灯设计

实训指导教师:

班 级:

设 计 人姓名:

设 计 日 期:

设 计 地 点:

完 成 时 间:

摘要

本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。

关 键 词

AT89C51,PWM(脉宽调制)

一、设计要求:

呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。

二、设计原理:

用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐亮再渐暗再渐亮再渐暗……如此往复,再利用LED的余辉和人眼的暂留效应,看上去就和人的呼吸一样。

三、整体方案设计

8个LED按照顺序逐个实现呼吸效果。加以其他闪烁花样增加更炫彩的效果。

四、实验元件及器材

(1)元件: LED(发光二极管)8个

1KΩ电阻8个

1nf电容2个

晶振1个

AT89C51芯片1个

(2)器件:Atmega128开发板1块

计算机1台

硬件原理

主电路:8个LED分别连接AT89C51的P1口,使用共阳方式,并加以1kΩ的电阻接入电源。

(2)时钟电路:外部时钟方式是使用外部振荡脉冲信号。

软件设计及系统仿真调试

调试方法:利用keil软件进行C语言程序编写及调试,再利用Proteus仿真软件进行仿真实验。

调试过程所遇问题:

1、由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果;

2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。

七、结论与心得

在本次设计中,C语言程序在开发板中得以实现应有的功能。在调试过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。

参考文献

[1]郭天祥,《新概念51单片机C语言教程》,电子工业出版社,2009年1月

[2]徐爱钧,《单片机高级语言C51应用程序设计》,电子工业出版社,2000年5月

附件A:呼吸灯设计电路图

附件B:C语言程序清单

#include

/*-----------定义单片机引脚-----*/

sbit LED0=P1^0;

sbit LED1=P1^1;

sbit LED2=P1^2;

sbit LED3=P1^3;

sbit LED4=P1^4;

sbit LED5=P1^5;

sbit LED6=P1^6;

sbit LED7=P1^7;

void Delay(unsigned int t); //函数声明

unsigned int z,y;

void main (void)//主函数

{

unsigned int CYCLE=500,PWM_LOW=0;//定义周期并赋值

while (1) //主循环

{

/*--------整排LED灯呼吸---------*/

P1=0x00;

Delay(500); //加延时,可以看到熄灭的过程(下面程序同理)

for(PWM_LOW=1;PWM_LOW

{

P1=0x00;

Delay(PWM_LOW);

P1=0xff;

Delay(CYCLE-PWM_LOW);

}

P1=0xff;

for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) //与逐渐变亮相反的过程

{

P1=0x00;//点亮LED

Delay(PWM_LOW);

P1=0xff;//熄灭LED

Delay(CYCLE-PWM_LOW);//主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1

}

/*--------第一颗LED灯呼吸---------*/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于呼吸灯C语言编程Options 1,0,0 // Target 'Target 1' Device (AT89C51) Vendor (Atmel) Cpu (IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)) FlashUt () StupF ("LIB\STARTUP.A51" ("Standard 8051 Startup Code")) FlashDR () DevID (2976) Rgf (REGX51.H) Mem () C () A () RL () OH () DBC_IFX () DBC_CMS () DBC_AMS () DBC_LMS () UseEnv=0 EnvBin () EnvInc () EnvLib () EnvReg (Atmel\) OrgReg (Atmel\) TgStat=16 OutDir (.\) OutName (a9) GenApp=1 GenLib=0 GenHex=1 Debug=1 Browse=1 LstDir (.\) HexSel=0 MG32K=0 TGMORE=0 RunUsr 0 0 RunUsr 1 0 BrunUsr 0 0 BrunUsr 1 0 SVCSID MODEL5=0 RTOS5=0 ROMSZ5=2 DHOLD5=0 XHOLD5=0 T51FL=80 XT51FL=0 CBANKS5=0 XBANKS5=0 RCB51 { 0,0,0,0,0,0,0,1,0 } RXB51 { 0,0,0,0,0,0,0,0,0 } OCM51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } OCR51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IRO51 { 1,0,0,0,0,0,16,0,0 } IRA51 { 0,0,0,0,0,128,0,0,0 } XRA51 { 0,0,0,0,0,0,0,0,0 } XRA512 { 0,0,0,0,0,0,0,0,0 } IROM512 { 0,0,0,0,0,0,0,0,0 } C51FL=21630224 C51VA=0 C51MSC () C51DEF () C51UDF () INCC5 () AX51FL=4 AX51MSC () AX51SET () AX51RST () INCA5 () PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IncBld=1 AlwaysBuild=0 GenAsm=0 AsmAsm=0 PublicsOnly=0 StopCode=3 CustArgs () LibMods () BankNo=65535 LX51FL=292 LX51OVL () LX51MSC () LX51DWN () LX51LFI () LX51ASN () LX51RES () LX51CCL () LX51UCL () LX51CSC () LX51UCS () LX51COB () LX51XDB () LX51PDB () LX51BIB () LX51DAB () LX51IDB () LX51PRC () LX51STK () LX51COS () LX51XDS () LX51BIS () LX51DAS () LX51IDS () OPTDL (S8051.DLL)()(DP51.DLL)(-p51)(S8051.DLL)()(TP51.DLL)(-p51) OPTDBG 48125,-1,()()()()()()()()()() ()()()() FLASH1 { 0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0 } FLASH2 () FLASH3 () FLASH4 () EndOpt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值