标题: 基于单片机与PWM的呼吸灯设计报告下载 [打印本页]

作者: lsj.    时间: 2018-4-3 14:48
标题: 基于单片机与PWM的呼吸灯设计报告下载
基于单片机与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台
(2)时钟电路:外部时钟方式是使用外部振荡脉冲信号。

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

2、程序运行时,出现LED闪烁过快,由于人眼的暂留效应看似LED全部一直亮着,经调试,修改延时时间,实现呼吸效果。
七、结论与心得
在本次设计中,C语言程序在开发板中得以实现应有的功能。在调试过程中,发现很多问题都是由于不细心导致的,因此在以后的设计方案中,要集中精力,莫粗心大意。再者就是知识量的不足,虽然是一个小小的设计方案,但是查阅了很多相关资料,在日后,要多充足自己的知识量,保证C程序的编写质量。
参考文献
[1]郭天祥,《新概念51单片机C语言教程》,电子工业出版社,2009年1月
[2]徐爱钧,《单片机高级语言C51应用程序设计》,电子工业出版社,2000年5月
附件A:呼吸灯设计电路图


附件B:C语言程序清单
  1. #include<reg51.h>
  2. /*-----------定义单片机引脚-----*/
  3. sbit LED0=P1^0;
  4. sbit LED1=P1^1;
  5. sbit LED2=P1^2;
  6. sbit LED3=P1^3;
  7. sbit LED4=P1^4;
  8. sbit LED5=P1^5;
  9. sbit LED6=P1^6;
  10. sbit LED7=P1^7;

  11. void Delay(unsigned int t); //函数声明
  12. unsigned int z,y;
  13. void main (void)//主函数
  14. {
  15.               unsigned int CYCLE=500,PWM_LOW=0;//定义周期并赋值
  16.               while (1)         //主循环
  17.               {

  18. /*--------整排LED灯呼吸---------*/
  19.                             P1=0x00;
  20.                             Delay(500);                                                                                                                 //加延时,可以看到熄灭的过程(下面程序同理)
  21.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)                 //PWM_LOW表示低
  22.                                           {
  23.                                                         P1=0x00;                                                               
  24.                                                         Delay(PWM_LOW);
  25.                                                         P1=0xff;
  26.                                                         Delay(CYCLE-PWM_LOW);
  27.                                           }
  28.                             P1=0xff;                                                                                                                                          
  29.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)               //与逐渐变亮相反的过程
  30.                                           {
  31.                                                            P1=0x00;                                                                                                  //点亮LED
  32.                                                            Delay(PWM_LOW);
  33.                                                            P1=0xff;                                                                                                  //熄灭LED
  34.                                                           Delay(CYCLE-PWM_LOW);                                                        //主循环中添加其他需要一直工作的程序,延时长度,600次循环中从599减至1
  35.                                           }


  36. /*--------第一颗LED灯呼吸---------*/
  37.                             LED0=1;
  38.                             Delay(500);        
  39.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)               
  40.                                           {
  41.                                                         LED0=0;                                                                                          
  42.                                                         Delay(PWM_LOW);
  43.                                                         LED0=1;                                                                                          
  44.                                                         Delay(CYCLE-PWM_LOW);
  45.                                           }
  46.                             LED0=0;                                                                                                                                          
  47.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)   
  48.                                           {
  49.                                                            LED0=0;
  50.                                                            Delay(PWM_LOW);
  51.                                                            LED0=1;
  52.                                                           Delay(CYCLE-PWM_LOW);                                            
  53.                                           }


  54. /*--------第二颗LED灯呼吸----------*/
  55.                             LED1=1;
  56.                             Delay(500);      
  57.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)   
  58.                                           {
  59.                                                            LED1=0;
  60.                                                            Delay(PWM_LOW);
  61.                                                            LED1=1;      
  62.                                                           Delay(CYCLE-PWM_LOW);
  63.                                           }
  64.                             LED1=0;
  65.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  66.                                           {
  67.                                                         LED1=0;
  68.                                                         Delay(PWM_LOW);
  69.                                                         LED1=1;
  70.                                                         Delay(CYCLE-PWM_LOW);
  71.                                           }


  72. /*--------第三颗LED灯呼吸----------*/
  73.                             LED2=1;
  74.                             Delay(500);
  75.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  76.                                           {
  77.                                                            LED2=0;      
  78.                                                            Delay(PWM_LOW);
  79.                                                         LED2=1;   
  80.                                                         Delay(CYCLE-PWM_LOW);                  
  81.                                           }
  82.                             LED2=0;
  83.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  84.                                           {
  85.                                                            LED2=0;
  86.                                                            Delay(PWM_LOW);
  87.                                                            LED2=1;
  88.                                                 Delay(CYCLE-PWM_LOW);
  89.                                              }

  90. /*--------第四颗LED灯呼吸----------*/
  91.                             LED3=1;
  92.                             Delay(500);
  93.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  94.                                           {
  95.                                                           LED3=0;      
  96.                                                         Delay(PWM_LOW);
  97.                                                         LED3=1;
  98.                                               Delay(CYCLE-PWM_LOW);
  99.                                           }
  100.                             LED3=0;
  101.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  102.                                           {
  103.                                                            LED3=0;
  104.                                                            Delay(PWM_LOW);
  105.                                                            LED3=1;
  106.                                                 Delay(CYCLE-PWM_LOW);
  107.                                 }

  108. /*--------第五颗LED灯呼吸----------*/
  109.                             LED4=1;
  110.                             Delay(500);   
  111.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  112.                                           {
  113.                                                            LED4=0;      
  114.                                                            Delay(PWM_LOW);
  115.                                                            LED4=1;      
  116.                                                 Delay(CYCLE-PWM_LOW);
  117.                                 }
  118.                             LED4=0;
  119.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  120.                                           {
  121.                                                            LED4=0;
  122.                                                            Delay(PWM_LOW);
  123.                                                            LED4=1;
  124.                                                 Delay(CYCLE-PWM_LOW);
  125.                                 }

  126. /*--------第六颗LED灯呼吸----------*/
  127.                             LED5=1;
  128.                             Delay(500);     
  129.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  130.                                           {
  131.                                                            LED5=0;     
  132.                                                            Delay(PWM_LOW);
  133.                                                            LED5=1;      
  134.                                                 Delay(CYCLE-PWM_LOW);
  135.                                 }
  136.                             LED5=0;
  137.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  138.                                           {
  139.                                                            LED5=0;
  140.                                                            Delay(PWM_LOW);
  141.                                                            LED5=1;
  142.                                                 Delay(CYCLE-PWM_LOW);
  143.                                 }

  144. /*--------第七颗LED灯呼吸----------*/
  145.                             LED6=1;
  146.                             Delay(500);     
  147.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  148.                                           {
  149.                                                            LED6=0;  
  150.                                                            Delay(PWM_LOW);
  151.                                                            LED6=1;      
  152.                                                 Delay(CYCLE-PWM_LOW);
  153.                                 }
  154.                             LED6=0;
  155.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  156.                                           {
  157.                                                            LED6=0;
  158.                                                            Delay(PWM_LOW);
  159.                                                            LED6=1;
  160.                                                 Delay(CYCLE-PWM_LOW);
  161.                                 }

  162. /*--------第八颗LED灯呼吸----------*/
  163.                             LED7=1;
  164.                             Delay(500);   
  165.                             for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
  166.                                           {
  167.                                                            LED7=0;   
  168.                                                            Delay(PWM_LOW);
  169.                                                            LED7=1;
  170.                                                 Delay(CYCLE-PWM_LOW);
  171.                                 }
  172.                             LED7=0;
  173.                             for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
  174.                                           {
  175. ……………………

  176. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


完整的Word格式文档51黑下载地址:
呼吸灯报告.doc (339 KB, 下载次数: 43)



作者: Kiralfred    时间: 2018-4-11 17:29
用不了,没啥用,连线之后一点反应都没




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1