历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | PWM控制亮度的流水灯c51程序

2020-02-19 来源:51hei

#include

//--重定义函数变量--//
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
        
/* 定义常量 */
#define FOSC 12000000L                //主时钟
#define T50us (65536-FOSC/12/1000000*50)        //12T 模式下,50us 时间的计算方法
#define T10ms (65536-FOSC/12/1000*10)                //12T 模式下,10ms 时间的计算方法

//--定义全局变量--//
uchar uTime1 = 0;                //脉冲宽度数值
uchar uMove = 0;                //移动标志
uchar uCount = 0;                //每 10ms 计数值
uchar LightLevel[8] = {64,32,16,8,4,2,1,0};//亮度级别表:PWM的脉冲宽度
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
uchar code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
                         0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

void TimeConfig();

void main(void)
{
        TimeConfig();
        while(1)
        {
                uchar Led = 0x00;                //当前点亮的Led的值
                uchar i = 0;
        
                if (uCount >= 10)
                {
                        uCount = 0;
                        uMove++;
                }

                uTime1 %= 64;
                uMove %= 8;
                for(i = 0; i < 8; i++)
                {
                        if (uTime1 < LightLevel[(i+uMove)%8])        
                                Led |= 0x01 << i;
                        else
                                Led &= ~(0x01 << i);
                }
                P0 = Led;
        }
}

void TimeConfig()
{
        TMOD = 0x11;                //设置定时计数器0和定时计数器1工作模式1

        //--定时器0赋初始值,12MHZ下定时10ms--//  
        TL0 = T10ms; 
        TH0 = T10ms >> 8;

        //--定时器1赋初始值,12MHZ下定时50us--//  
        TL1 = T50us; 
        TH1 = T50us >> 8;

        TF0 = 0;                //清除TF0标志
        ET0 = 1;                //开启定时器0中断

        TF1 = 0;                //清除TF1标志
        ET1 = 1;                //开启定时器1中断
        
        EA  = 1;
        TR0 = 1;                //开启定时器 0        
        TR1 = 1;                //开启定时器        1
}

void Time0(void) interrupt 1    //0:外部中断1; 1:定时器0中断; 2:外部中断2; 3:定时器1中断; 4:串口中断
{
        TL0 = T10ms;  //重新赋初值
        TH0 = T10ms >> 8;
        
        uCount++;
}

void Time1(void) interrupt 3    //0:外部中断1; 1:定时器0中断; 2:外部中断2; 3:定时器1中断; 4:串口中断
{
        TL1 = T50us;  //重新赋初值
        TH1 = T50us >> 8;
        
        uTime1++;
}

推荐阅读

史海拾趣

Anachip公司的发展小趣事

品质一直是Anachip公司非常重视的一环。为了确保产品的稳定性和可靠性,公司建立了严格的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格控制。同时,公司还加大了品牌建设的力度,通过广告宣传、赞助活动等方式提升品牌知名度。这些举措不仅提升了公司的市场竞争力,也赢得了客户的信任和忠诚。

DALLAS公司的发展小趣事

Dallas公司一直将技术研发作为公司发展的核心驱动力。公司投入大量资源用于半导体领域的技术研发,不断探索新的技术方向和产品应用。这种持续的技术研发投入使得Dallas公司能够不断推出具有创新性和竞争力的产品,保持了在市场中的领先地位。

GTE Microcircuits公司的发展小趣事
优化复合放大器的增益稳定性主要涉及到选择合适的放大器类型(如低噪声、高精度运算放大器)、精确的电路设计(如使用温度系数低的电阻和电容)、以及适当的电源去耦和滤波技术。此外,采用反馈网络来稳定增益也是一种常见的方法。
Gennum ( Semtech )公司的发展小趣事
如NE555,用于实现定时、振荡等功能。
C-MEDIA公司的发展小趣事

在2000年代初,C-MEDIA以其在音频处理领域的专业技术而知名。然而,随着市场竞争的加剧和技术的快速发展,公司意识到需要调整战略以适应市场变化。于是,C-MEDIA在与瑞昱(Realtek)达成收购协议后,决定将AC97、HD Audio板载音频芯片技术转让给Realtek,并退出板载声卡领域。这一决策使得C-MEDIA能够专注于中高端音频处理芯片的研发,进一步巩固了其在独立声卡市场的地位。

Headland Technology Product Group公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的基石。HBControls深知这一点,因此始终将品质管理放在首位。公司建立了完善的质量管理体系,从原材料采购、生产加工到成品检验,每一个环节都严格把关。此外,HBControls还定期对员工进行质量意识培训,确保每一位员工都能将品质理念融入到日常工作中。正是凭借卓越的产品质量和优质的服务,HBControls赢得了众多客户的信赖和好评。

问答坊 | AI 解惑

拆一个国产造工精巧的电源插座bykinneng

作者 kinneng 拆一个国产造工精巧的插座。 雪白的外观,用料不错。 完美的结构,符合标准。 像纸一样的厚度体现塑料模具工艺的精巧。 仿古的焊接工艺,令人赞叹。 未去水边,可见注塑压力的强大。 一拆就脱焊散架,节省拆解的 ...…

查看全部问答>

【FPGA问题】如何将chipscope的数据导出?

Xilinx的ChipScope工具就相当于Altera的SignalTap II,能够捕捉FPGA内部的信号,方便了调试过程。下面就以一个简单的实例描述一下使用ChipScope的过程 Step1:打开一个以后的ISE工程,进行管脚约束,并进行综合。 Step2:添加ChipScope Definitio ...…

查看全部问答>

解释一下下面这一语句

__asm         {                 MOV        r0,0x53                 MSR        CPSR_cxsf ...…

查看全部问答>

单片机LED显示问题

我想实现单片机LED动态显示,有六个数码管,能够任意实现我要显示的数, 如12\\1.234\\65.87\\897.435等等.不知道程序该如何去写,请高手指教.…

查看全部问答>

51下面对串口的编程如何移植到Linux环境下的串口编程

买了一个rfid读写模块,通过rs232串口线接到开发板上,开发板上跑的是linux,读写模块提供的源码是51的,以前没做过51,在linux下面读写/dev/ttyS1来访问rfid读写模块,写能够写入,读总是读不出来。请问那位高手能帮忙解决,提点建议,谢谢。 或 ...…

查看全部问答>

哪位高手用TI的8962移植UCOS 2.52成功的,共享下,学习学习

哪位高手用TI的8962移植UCOS 2.52成功的,共享下,学习学习 我用周立功的怎么下载都不成功,来时提示 Load \"E:\\\\LM3S_uCOS2_Keil_V1.1d\\\\Object\\\\LM3S_uCOS2.AXF\" No Algorithm found for: 00000000H - 00000F87H Erase skipped!…

查看全部问答>

血压计语音芯片资料,与大家分享下

 现在做血压计和血糖仪生家都加一个语音,人体测温计也在慢慢有这个意向,所以大家多学着点,开发也容易点 …

查看全部问答>

求09年F题的论文和MPLAB的编程

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 09年F题:数字幅频均衡功率放大器的论文及程序,可以的话用MPLAB  …

查看全部问答>

CCS软件下载申请的一个小技巧

这几天跟着视频一起看MSP430 LaunchPad ,MSP430 LaunchPad 的开发可以选用IAR或者CCS。 关于IAR,网上相关介绍很多了。 CCS网上的下载链接很少,无奈,只好到TI官网去下载,但是下载的时候,却要先申请,申请通过后才能下载。 于是只好老老实实 ...…

查看全部问答>

CCS有时候没有引出

一直来喜欢CCS就是他能够自动导出功能,但是不知道为什么有些工程建立的时候不能制动导出,有没有孩子遇到过这种情况啊?求解…

查看全部问答>