最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-25 03:18:46
文档

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

基于单片机与PWM的呼吸灯设计实训指导教师:班级:设计人姓名:设计日期:设计地点:完成时间:摘要本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。关键词ATC51,PWM(脉宽调制)一、设计要求:呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。二、设计原理:用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐
推荐度:
导读基于单片机与PWM的呼吸灯设计实训指导教师:班级:设计人姓名:设计日期:设计地点:完成时间:摘要本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。关键词ATC51,PWM(脉宽调制)一、设计要求:呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。二、设计原理:用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐
基于单片机与PWM的呼吸灯设计

         实训指导教师: 

         班              级:     

         设 计 人姓名:    

         设 计  日 期: 

         设 计  地 点: 

         完 成  时 间: 

摘            要

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

关  键  词

ATC51,PWM(脉宽调制)

一、设计要求:

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

二、设计原理:

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

三、整体方案设计

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

四、实验元件及器材

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

           1KΩ电阻                        8个

           1nf电容                        2个

           晶振                            1个

           ATC51芯片                1个

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

                计算机                        1台

五、硬件原理

(1)主电路:8个LED分别连接ATC51的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

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

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灯呼吸---------*/

        LED0=1;

        Delay(500);         

     for(PWM_LOW=1;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            {

                   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            {

                   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            {

                  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            {

                   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            {

                   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            {

                   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            {

                   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);

}

文档

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

基于单片机与PWM的呼吸灯设计实训指导教师:班级:设计人姓名:设计日期:设计地点:完成时间:摘要本设计是基于单片机的原理与接口设计,采用单片机I/O口,加以C语言编程实现LED渐亮再渐暗类似人的呼吸一样的效果。关键词ATC51,PWM(脉宽调制)一、设计要求:呼吸灯就是让LED灯的闪烁像呼吸一样,时呼时吸,时亮时暗,利用LED的余辉和人眼的暂留效应,看上去和人的呼吸一样。二、设计原理:用C语言编程实现PWM(脉宽调制)输出驱动LED,逐渐增加PWM的占空比从而实现LED模拟呼吸的过程,即渐
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top