锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

51单片机占空比设计

时间:2024-05-25 09:07:10

Proteus仿真
P3.0输出占空比
T+、T-设置占空比时间,每按一次加或减100ms
R+、R-设置占空比加减1% 初始为100ms 占空比50%
前两位显示时间单位s,后两位显示占空比单位%
显示



使用定时器,避免了数码管显示和按键扫描延时,实现占空比实时输出。避免因延时等待。 12MHz晶振程序如下

#include                                          #define        CLOCK        12000L#define        Fosc        12000000L#define        TMR        1#define        TMR_BASE        (unsigned int)(65536-(Fosc*TMR/CLOCK))#define        TMR_BASEH        TMR_BASE/0x100#define MASK 0xaa#define AddT 0xa8 #define CutT 0xa2#define AddR 0x8a#define CutR 0x2asbit OUT=P3^0;code unsigned char Num[10]={0xc0,0xf9,0xa4,0x30,0x99,0x92,0x82,0xf8,0x80,0x90};bit        T1ms_Fg;void Timer0_interrupt(void)  interrupt 1{        TR0=0;        TH0=TMR_BASEH;        TL0+=TMR_BASE;        TR0=1;        T1ms_Fg=1;}void TMR0_Init(void){        TMOD=0x01;        TH0=TMR_BASEH;        TL0=TMR_BASE;        TR0=1;        ET0=1;}        bit        Tmr_1ms_Fg,                Tmr_10ms_Fg,                Tmr_100ms_Fg;unsigned char        T100ms_count=10;         void timer(void){          Tmr_1ms_Fg=0;          Tmr_10ms_Fg=0;                Tmr_100ms_Fg=0;                if (T1ms_Fg)        {                T1ms_Fg=0;                        Tmr_1ms_Fg=1;                --T100ms_count;                        if (T100ms_count%10==0)                {                        Tmr_10ms_Fg=1;                         }                if (T100ms_count==0)                {                        T100ms_count=10;                        Tmr_100ms_Fg=1;                         }        }}        unsigned char T=1,R=50;void diaplay(void){   static unsigned char status=0;   if(!Tmr_10ms_Fg)return;   P0=0xff;    P2=0x01<30)T=1;            break;           case CutT:            T--;                if(T<1)T=30;            break;           case AddR:            R++;                if(R>99)R=1;            break;           case CutR:            R--;                if(R<1)R=99;            break;        }}bit Duty_fg=1;void duty(void){   static unsigned int r=50;   if(!Tmr_1ms_Fg)return;   if(--r)return;   OUT=Duty_fg;   if(Duty_fg)r=R*T;   else r=(100-R)*T;   Duty_fg=~Duty_fg; }void main(void){    TMR0_Init();   EA=1;        while(1)        {          timer();          diaplay();          duty();          key();        }}

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章