如何用C语言编写一个LED灯渐变的程序

如何用C语言编写一个LED灯渐变的程序,第1张

#include<reg51.h>

//设CPU是时钟12MHz的8051系列

data unsigned char ms

sbit K1=P0^0

void SetupTimer0()

{

    TMOD &= 0XF0 //仅保留T1信息

    TMOD |= 0X02 //设置T0: 定时功能,方式2,自动重载8位定时器/计数器

    TH0 = 256-250//定时每0.25ms中断一次

    TL0 = 256-250

    TR0 = 1      //开启定时器

    ET0 = 1      //定时器0中断打开

}

void Timer0_ISR() interrupt 1 //中断服务程序

{

    static data unsigned char us250

    if (++us250>=4) {++ms us250=0}

}

void main()

{

    data unsigned char p1,p2

    ms=0

    SetupTimer0()

    EA = 1               //全局中断打开

    K1 = 1

    while(1)

    {

        if (K1) {P1=p1=0XFF P2=p2=0x00 ms=0 continue}

        if (ms<150) continue

        ms=0

        p1<<=1        P1=p1

        p2<<=1 p2|=1 P2=p2

    }

}

这个要用到软件的pwm,因为51的没有硬件的pwm所以只好自己写软件的了。首先,要做一个软件三角波发生器子程序,频率自己定,就是变亮变暗的周期。此函数的返回值作为pwm的输入值。再做一个pwm的模拟程序,占空比(0-100)是三角波发生器的输出,pwm模拟程序控制某个端口输出1和0的占空比来控制灯 的明暗。pwm的思路是:检查设置值是否不等于0,是则端口置1,程序开始加1计数,计数后检查计数值是否等于设置值,如果等于则跳转,不等则继续加一,如果到100或者计数值等于设置值则使端口置0,一个pwm周期结束,如此重复就可以了。pwm周期自己看实际情况定义。如果要控制电灯泡的话,频率不用太高,50hz可以了。关键是要做隔离,用光电隔离加双向可控硅来控制。

呵呵,声明两点:1 源程序网上应该有的,或者自己买本书就什么也有了。2 不鼓励直接给别人源程序,给你思路再动手就应该很好弄了,总看别人的,不自己思考永远都是别人的。

http://www.programsalon.com/downloads88/sourcecode/embed/detail337156.html


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存