⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51

📁 51单片机大量源码
💻
字号:
/****************************************************************************** 
*                                                                            * 
*关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数 * 
*设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样* 
*可以设定占空比可从1-100变化。即0.01ms*100=1ms                               * 
******************************************************************************/ 
#include <REGX51.H> 
#define uchar unsigned char      
/***************************************************************************** 
* TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;         * 
* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器* 
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时 * 
* 间为1ms*65536=65.536ms                                                     * 
******************************************************************************/ 
#define V_TH0  0XFF                  
#define V_TL0  0XF6                  
#define V_TMOD 0X01                  

void init_sys(void);            /*系统初始化函数*/ 
void Delay5Ms(void); 

unsigned char ZKB1,ZKB2; 

void main (void) 
{ 
init_sys(); 
  ZKB1=40;            /*占空比初始值设定*/ 
  ZKB2=70;            /*占空比初始值设定*/ 
  while(1) 
  { 
       if (!P1_4) //如果按了+键,增加占空比 
      { 
       Delay5Ms(); 
       if (!P1_4) 
         { 
         ZKB1++; 
         ZKB2=100-ZKB1; 
         } 
      } 

       if (!P1_5) //如果按了-键,减少占空比 
      { 
       Delay5Ms(); 
       if (!P1_5) 
         { 
         ZKB1--; 
         ZKB2=100-ZKB1; 
         } 
      } 
/*对占空比值限定范围*/ 
if (ZKB1>99) ZKB1=1; 
if (ZKB1<1) ZKB1=99; 
 
  }
  

   
} 


/****************************************************** 
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/ 
void init_sys(void)            /*系统初始化函数*/ 
{ 
  /*定时器初始化*/ 
  TMOD=V_TMOD; 
  TH0=V_TH0; 
  TL0=V_TL0; 
  TR0=1; 
  ET0=1; 
  EA=1; 
} 


//延时 
void Delay5Ms(void) 
{ 
unsigned int TempCyc = 1000; 
while(TempCyc--); 
} 

/*中断函数*/ 
void timer0(void) interrupt 1 using 2 
{ 
static uchar click=0;                  /*中断次数计数器变量*/ 
TH0=V_TH0;                                    /*恢复定时器初始值*/ 
TL0=V_TL0; 
++click; 
if (click>=100) click=0; 

if (click<=ZKB1)      /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/ 
  P1_0=0; 
else 
  P1_0=1; 

if (click<=ZKB2)                        
  P1_1=0; 
else 
  P1_1=1; 

} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -