收藏 分销(赏)

51单片机(呼吸灯)C语言版.doc

上传人:二*** 文档编号:4510665 上传时间:2024-09-26 格式:DOC 页数:16 大小:264.50KB 下载积分:5 金币
下载 相关 举报
51单片机(呼吸灯)C语言版.doc_第1页
第1页 / 共16页
本文档共16页,全文阅读请下载到手机保存,查看更方便
资源描述
基于单片机与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台 五、 硬件原理 (1) 主电路:8个LED分别连接AT89C51的P1口,使用共阳方式,并加以1kΩ的电阻接入电源。 (2)时钟电路:外部时钟方式是使用外部振荡脉冲信号。 六、 软件设计及系统仿真调试 (1) 调试方法:利用keil软件进行C语言程序编写及调试,再利用Proteus仿真软件进行仿真实验。 (2) 调试过程所遇问题: 1、由于呼吸灯的程序在仿真软件Proteus中实现的效果不明显,很难辨别LED是否具有呼吸的效果。所以边用keil调试程序边用STC烧写软件直接写入开发板,从而很明显看出LED是否具有呼吸效果; 2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。 七、结论与心得 在本次设计中,C语言程序在开发板中得以实现应有的功能。在调试过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。 参考文献 [1]郭天祥,《新概念51单片机C语言教程》,电子工业出版社,2009年1月 [2]徐爱钧,《单片机高级语言C51应用程序设计》,电子工业出版社,2000年5月 附件A:呼吸灯设计电路图 附件B:C语言程序清单 #include<reg51.h> /*-----------定义单片机引脚-----*/ 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<CYCLE;PWM_LOW++) //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灯呼吸---------*/ LED0=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED0=0; Delay(PWM_LOW); LED0=1; Delay(CYCLE-PWM_LOW); } LED0=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED0=0; Delay(PWM_LOW); LED0=1; Delay(CYCLE-PWM_LOW); } /*--------第二颗LED灯呼吸----------*/ LED1=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED1=0; Delay(PWM_LOW); LED1=1; Delay(CYCLE-PWM_LOW); } LED1=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED1=0; Delay(PWM_LOW); LED1=1; Delay(CYCLE-PWM_LOW); } /*--------第三颗LED灯呼吸----------*/ LED2=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED2=0; Delay(PWM_LOW); LED2=1; Delay(CYCLE-PWM_LOW); } LED2=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED2=0; Delay(PWM_LOW); LED2=1; Delay(CYCLE-PWM_LOW); } /*--------第四颗LED灯呼吸----------*/ LED3=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED3=0; Delay(PWM_LOW); LED3=1; Delay(CYCLE-PWM_LOW); } LED3=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED3=0; Delay(PWM_LOW); LED3=1; Delay(CYCLE-PWM_LOW); } /*--------第五颗LED灯呼吸----------*/ LED4=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED4=0; Delay(PWM_LOW); LED4=1; Delay(CYCLE-PWM_LOW); } LED4=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED4=0; Delay(PWM_LOW); LED4=1; Delay(CYCLE-PWM_LOW); } /*--------第六颗LED灯呼吸----------*/ LED5=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED5=0; Delay(PWM_LOW); LED5=1; Delay(CYCLE-PWM_LOW); } LED5=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED5=0; Delay(PWM_LOW); LED5=1; Delay(CYCLE-PWM_LOW); } /*--------第七颗LED灯呼吸----------*/ LED6=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED6=0; Delay(PWM_LOW); LED6=1; Delay(CYCLE-PWM_LOW); } LED6=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED6=0; Delay(PWM_LOW); LED6=1; Delay(CYCLE-PWM_LOW); } /*--------第八颗LED灯呼吸----------*/ LED7=1; Delay(500); for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++) { LED7=0; Delay(PWM_LOW); LED7=1; Delay(CYCLE-PWM_LOW); } LED7=0; for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--) { LED7=0; Delay(PWM_LOW); LED7=1; Delay(CYCLE-PWM_LOW); } P1=0x00; for(z=500;z>0;z--) for(y=110;y>0;y--); P1=0xff; for(z=500;z>0;z--) for(y=110;y>0;y--); P1=0x00; for(z=500;z>0;z--) for(y=110;y>0;y--); P1=0xff; for(z=500;z>0;z--) for(y=110;y>0;y--); } } void Delay(unsigned int t) { while(--t); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服