当前位置:首页 > 单片机 > 单片机
[导读]使用定时器T0产生PWM方波,用按键调整占空比,20级可调控制led灯的亮度等级.C代码#include"my51.h"#include"timer0.h"#definegrading20//亮度20级变化sbitkeyS3=P3^5;//按键调整占空比,PWM_keyChange++sbitkeyS4=P3^6;

使用定时器T0产生PWM方波,

用按键调整占空比,20级可调

控制led灯的亮度等级.

C代码

#include"my51.h"

#include"timer0.h"

#definegrading20//亮度20级变化

sbitkeyS3=P3^5;//按键调整占空比,PWM_keyChange++

sbitkeyS4=P3^6;//PWM_keyChange--

u8PWM_keyChange=10;//初值,按键调整在1~20之间变化

//占空比PWM_keyChange/grading

voidT0_work()//本函数由T0定时器中断函数调用

{

if(timeMultiple1Flag)

{

led=off(7);//关闭7号灯

timeMultiple1Flag=0;//清定时器复用置位标志

}

if(timeMultiple2Flag)

{

led=on(7);//打开7号灯

timeMultiple2Flag=0;//清定时器复用置位标志

}

}

voidmain()//测试

{

u8keyFlag=1;//程序中没有消抖处理,只是简易的按键进出自锁标志

led0=ledon;//先打开0号灯,用于和7号灯对比亮度

initT0(1,10,grading);//1毫秒的基本定时,亮的时间1*10毫秒,暗1*(grading-10)毫秒

while(1)

{

if(0==keyS3)

{

if(keyFlag)//防止一次按键中多次执行

{

keyFlag=0;//清标志,类似同步锁

if(++PWM_keyChange>grading)

{

PWM_keyChange=grading;//占空比最大100%

}

initT0(1,PWM_keyChange,grading);

}

}

elseif(0==keyS4)

{

if(keyFlag)

{

keyFlag=0;

if(0==--PWM_keyChange)//占空比减小

{

PWM_keyChange=1;//最小占空比1/20

}

initT0(1,PWM_keyChange,grading);//占空比减小

}

}

else

{

keyFlag=1;//按键锁释放标志,下一次按键时允许调整占空比

}

}

}

C代码

#ifndef_MY51_H

#define_MY51_H

#include

//#include

#include

#include

#include"mytype.h"

#ifndef_51LED_

#define_51LED_

#defineledP1//P1总线连8个led灯,灯连573锁存器,P1置低电平点亮

#defineLEDled

#defineON(x)P1&(~(1<<(x)))//打开某个灯,开多个灯用ON(m)&ON(n)

#defineOFF(x)P1|(1<<(x))//关闭某个灯,关多个灯用OFF(m)|OFF(n)

#defineon(x)ON(x)//包含大小写

#defineoff(x)OFF(x)

#defineledon0//某个灯,打开

#defineledoff1//某个灯,关闭

sbitled0=P1^0;

sbitled1=P1^1;

sbitled2=P1^2;

sbitled3=P1^3;

sbitled4=P1^4;

sbitled5=P1^5;

sbitled6=P1^6;

sbitled7=P1^7;

sbitledLock=P2^5;//锁定当前8个led的状态,0锁定,1不锁定

#endif

/*************二进制输入宏****************************/

#ifndef_LongToBin_

#defineLongToBin(n)

(

((n>>21)&0x80)|

((n>>18)&0x40)|

((n>>15)&0x20)|

((n>>12)&0x10)|

((n>>9)&0x08)|

((n>>6)&0x04)|

((n>>3)&0x02)|

((n ) & 0x01)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

单片机定时器通过晶振频率来产生精准的计数脉冲,从而实现微秒级别的时间控制。 单片机定时器依托于一个稳定的计数器,该计数器与单片机上的晶振部件相连。晶振经过12分频后,为单片机提供稳定且精准的1MHZ脉冲。由于晶振的频率极...

关键字: 单片机 定时器

采用51单片机最小开发板,由8位自制独立按键控制。单片机芯片为STC89C52RC,晶振为@12.000 mhz。8X8LED点阵屏模块由MAX7219驱动,MAX7219包含一个自动扫描电路。你只需要把要显示的数据发送...

关键字: 51单片机 MAX7219 寄存器

编码器‌是一种传感器,主要用于测量旋转运动的角度、角速度和位移等参数。常见的编码器类型包括增量式编码器和绝对值编码器,前者通过检测脉冲的增加或减少来测量旋转方向和距离,后者则直接输出当前的绝对位置信息‌。

关键字: 编码器‌ 定时器

一款语音控制的番茄时间定时器,内置Seeed Studio XIAO ESP32S3感测和圆形显示。用免提时间管理保持高效!

关键字: 定时器 ESP32S3 语音控制

【2025年3月20日, 德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码: IFNNY)近日宣布,其旗下ModusToolboxTM开发平台中的AIROC™...

关键字: MCU 物联网 定时器

众所周知,说到延时,很多人都会想到用软件件来实现,比如定时器之类的。今天就来说说用硬件来实现定时的方式,虽说没有那么准,但是有些场合还是用得到的。

关键字: CD4060 定时器

如果定时器的重装值和分频设置不正确,会导致PWM输出的频率和占空比不准确,从而产生误差‌1。

关键字: 定时器 分频

在嵌入式系统开发的广阔领域,51单片机和STM32无疑是两种极具代表性的微控制器。对于初学者而言,选择学习路径时往往会面临一个抉择:是直接跨越51单片机,挑战更高层次的STM32,还是从51开始,逐步进阶?本文旨在探讨直...

关键字: 51单片机 STM32

SysTick定时器的工作原理主要基于一个递减计数器的机制。以下是对SysTick定时器工作原理的详细解释:

关键字: SysTick 定时器

pwm控制的基本原理随着电力需求的不断增加,电源管理技术愈加重要。开关电源作为一种高效能、可靠性高的电源,找到广泛的应用。

关键字: pwm 控制 电源
关闭