PWM控制亮度的流水灯c51程序

发布者:数据之翼最新更新时间:2020-02-19 来源: 51hei关键字:PWM  控制亮度  流水灯  c51程序 手机看文章 扫描二维码
随时随地手机看文章

#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++;
}

关键字:PWM  控制亮度  流水灯  c51程序 引用地址:PWM控制亮度的流水灯c51程序

上一篇:详解51单片机控制步进电机
下一篇:理解一下单片机的I2C和SPI通信

推荐阅读最新更新时间:2024-11-10 19:11

c51写的日历时钟程序2
********************************************************************************************************* * FORMAT CURRENT TIME INTO STRING * * Description : Formats the current time into an ASCII string. * Arguments : mode is the format type: * 1 will format the time as HH:MM:SS
[单片机]
飞思卡尔单片机DZ60---边沿对齐PWM
#include hidef.h /* for EnableInterrupts macro */ #include derivative.h /* include peripheral declarations */ /*************************************************************/ /* 初始化总线时钟PEE模式 */ /* 外部晶振频率为4MHz,总线频率16MHz */ /*************************************************************/ void
[单片机]
[51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC _ :i2c.c 1 /*----------------------------------------------- 2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器 4 周期,即晶振频率要小于12MHZ) 5 ------------------------------------------------*/ 6 #include i2c.h 7 #define _Nop() _nop_() //定
[单片机]
NO.15 MSP432定时器使用实例——流水灯
  上一篇文章我们讲了定时器Timer的基本概念和如何调用定时器。这次我们来尝试在MSP432中使用定时器完成流水灯这个小实验。   流水灯是我们从真正意义上进行对单片机进行时间控制。   这个实验主要是控制我们开发板上的LED进行1s亮,1s灭,循环进行。   首先,我们打开CCS中ResourceExplorer的TiDrivers下的案例——timerled。   我们将其导入到我们的工作区中,我们再打开timerled.syscfg这个文件,查看本工程的相关配置。      我们要增加其他Timer也非常简单,只要点击ADD这个按钮就可以配置相关内容。   我们其次打开timerled.c这个主文件,
[单片机]
NO.15 MSP432定时器使用实例——<font color='red'>流水灯</font>
STM32F407的定时器1之7路PWM输出
实验现象:输出频率为10K /**************************************************************************************** *函 数 名:bsp_InitTimer1GPIO *函数功能:初始化定时器1相关IO *形 参:无 *返 回 值:无 *****************************************************************************************/ void bsp_InitTimer1GPIO(void) { GPIO_InitTypeDef GPIO_InitStru
[单片机]
STC单片机PCA产生PWM程序
stc12 15单片机的pca模块产生pwm的完整例程,测试成功。完整代码下载: http://www.51hei.com/f/stcpcaPWM.zip #include reg51.h #include "PCA.h" void PWM(unsigned int num,int cex); void main() { CMOD=0x02; CL=0x00; CH=0x00; PWM(10,0); PWM(20,1); PWM(50,2); PWM(70,3); PWM(90,4); CR=1; while(1); } void PWM(unsigned int num,int cex) { double i=256*(1
[单片机]
foc电机控制需要几个pwm foc控制算法介绍
foc电机控制需要几个pwm FOC(Field-Oriented Control)电机控制需要使用两个PWM信号来控制电机,具体分为一般PWM和扩展PWM两种。 一般PWM用于控制电机的直流母线电压,其输出频率一般为几千赫兹,可以有效地抑制电机的噪声和震动。通过PWM的占空比来调节直流电压,从而实现对电机的调速和调转矩。一般PWM一般由开发板或者控制芯片的内置模块实现。 扩展PWM用于控制电机的电流,其输出频率的设置一般要远远低于一般PWM的频率,以保证电路的稳定性和控制精度。扩展PWM的任务是将控制算法的电流控制命令转换为电机的相电流,从而实现对电机的转矩和速度控制。在FOC控制中,扩展PWM一般需要由开发者根据自身电
[嵌入式]
c51超长时间延时程序1小时到1000...小时
;;///////////////////////////////////////////////////////////;; ;; c51超长时间延时程序1小时到1000...小时。 ;;19:44 2007-3-10;; ;;6MHZ晶振为100ms;若晶振为12mhz时则50ms;进入一次定时中断;; ;;你用定时中断0方式1,进一次中断,中断内加1如:inc 40h; ;;RUN COMMAND;;执行命令;; ;;///////////////////////////////////////////////////////////;; ORG 0000H AJMP MAIN ORG 000BH AJMP ET0_0 RE
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved