单片机制作呼吸灯的C语言程序怎样编写

单片机制作呼吸灯的C语言程序怎样编写,第1张

#include<reg51.h>

sbit LED0=P0^0

sbit wei=P1^1

sbit duan=P1^0

sbit lcden=P1^7

sbit dianzhen=P1^3

sbit leden=P1^2

void Delay(unsigned int t)

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0//定义周腔烂衫期并赋历袜值

lcden=0

P0=0x00

dianzhen=0

P0=0xff

wei=0

duan=0

while (1) //主循环

{

LED0=1

Delay(150000)//特意加伍腔延时,可以看到熄灭的过程

for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++)

{

LED0=0

Delay(PWM_LOW)

LED0=1

Delay(CYCLE-PWM_LOW)

}

for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--)

{

LED0=0

Delay(PWM_LOW)

LED0=1

Delay(CYCLE-PWM_LOW)

}

}

}

void Delay(unsigned int t)

{

while(t--)

}

呼吸灯的程序:

/**************************************************************************** 

       功能:LED灯慢慢变暗,再慢慢变亮。

                  用定时器模拟的PWM调制。

单片机:AT89S52                                                   

******************************************************************************/ 

#include <reg52.h> 

#define V_TH0  0XFF              //设定定时器0,高8位的初值              

#define V_TL0  0XF6              //设定定时皮芹器0,低8位的初值            

#define V_TMOD 0X01              //设定定时器0的工作方式为:方式1(计数位数是16位                                  //,由TL0作为低8位、TH0作为高8位)

#define uchar unsigned char 

#define uint unsigned int                

void init_sys()                         //系统初始化函数

void delay(uint)                        //延时函数

unsigned char ZKB                       //占空比

void main (void) 

   init_sys()                            搭樱//初始化

   while(1)

   {  

      for(ZKB=5ZKB<40ZKB=ZKB+2)         //每调节一次占空比,就延时大概8ms左右,这使得LED现象更明显

           {

                    delay(8) 

            }

      for(ZKB=40ZKB>5ZKB=ZKB-2)

           {

                delay(8) 

           }

    

   } 

}

void delay(uint z)

{

 uint x,y

 for(x=zx>0x--)

  for(y=100y>0y--) 

}

void init_sys()            /*系统初始化函数*/ 

  /*定时器初始化*/ 

  TMOD=V_TMOD         

  TH0=V_TH0 

  TL0=V_TL0 

  TR0=1 

  ET0=1 

  EA=1 

}

void timer0(void) interrupt 1 using 2              

 static uchar click=0    //中断次数计数器变量

 TH0=V_TH0               //重新恢复定时知握丛器初始值

 TL0=V_TL0 

 ++click                       //每计数10次,产生一个中断,并且click增加一个

 if (click>=100)

         click=0              //计满一百次,这重新计数。

                                         /*因为计一次数的时间是1us,10次产生一个中断,也就是一个中断10us。100个中断为1ms。

                                    则,可以在这100个数中随便取值,用于表示占空比的多少,占空比的范围为(1~100)*/

 

 if (click<=ZKB)          //当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整 

   P1=0x00                      //P1口接的是LED灯

 else 

   P1=0xff

}

 

此程序的总中断时间为100ms,即频率为:100KHZ,占空比从5 变为40(即5%~25%)。

#include<reg52.h>  

//端口定义

sbit RED    =    P2^0//红光控制端,0点亮 

sbit GREEN  =    P2^1//绿光控制端,0点亮 

sbit BLUE   =    P2^2//蓝光控制端,0点亮

//函数声明

void Delay(unsigned int t)  

void RGB(unsigned char R ,unsigned char G ,unsigned char B) 

//主函数

void main (void)

{   

    RED = 1  GREEN = 1  BLUE = 1 

    //开始时先关闭LED,当然由于单片机上电就输出 1 ,所以可不写               

    while (1)         //主循环

    {

        //7色光依陵坦次逐渐变亮

        //改变调用顺序可以改变颜色先后次序

        RGB(1,1,0)

        RGB(1,0,1)

        RGB(1,0,0)

        RGB(0,1,1)

        RGB(0,1,0)

        RGB(0,0,1)

        RGB(0,0,0)

    }

}

 

void Delay(unsigned int t)

{

 while(--t)

}

//7色光依次逐渐变亮

RGB(unsigned char R ,unsigned char G ,unsigned char B)

{

    unsigned int pwm , set = 500         

    for(pwm=1pwm<setpwm++)

    { 

             RED    = 1        //熄灭LED 

             GREEN  = 1

             BLUE   = 1 

             Delay(set-pwm)//延时长度,500次循环中从599减至1

             RED    = R        逗汪皮

             GREEN  = G

             BLUE   = B        

             Delay(pwm)//延时长度,500次循环中从1加至599

    }

}

//改变set可以改变变化快慢

//同理你可以写出7色逐渐变暗的程序

这里的程序只是提供一个思路,你如果直接复制粘贴的话会出现格式错误

把每两行中间的空行删掉一般就可消除格式错误

如果再有什么小问题根据编译信息提示稍作修改就行

串电阻的话一般这样算:

R = [ U - U(LED) ] / I

U是LED和电阻总的电压,U(LED)是LED工作电压,I 是LED工作电流,一般10--20mA

电流大小取的适山差中就行了,再计算要串联的电阻值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12342591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存