<AT89X51.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_1)
//如果按了+键,增加占空比
{
Delay5Ms()
if
(!P1_1)
{
ZKB1++
ZKB2=100-ZKB1
}
}
if
(!P1_2)
//如果按了-键,减少占空比
{
Delay5Ms()
if
(!P1_2)
{
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_3=0
else
P1_3=1
if
(click<=ZKB2)
P1_4=0
else
P1_4=1
}只是调占空比的,希望对你有帮助,调试好的
给个我自己写的程序你,我试过了,通过!#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
P0_0=P0^0
uchar
a
/*********************************************
*
TH0和TL0是计数器0的高8位和低8位计数器,
*
计算办法:TL0=(65536-C)%256
*
TH0=(65536-C)/256,
*
其中C为所要计数的次数即多长时间产生一次中断;
*
TMOD是计数器工作模式选择,0X01表示选用模式1,
*
它有16位计数器,最大计数脉冲为65536,最长时间
*
为1ms*65536=65.536ms
*
*********************************************/
void
init_sys(void)
/*系统初始化函数*/
void
main
(void)
{
init_sys()
while(1)
}
void
init_sys(void)
{
TMOD=0x01
TH0=(65536-10000)/256
TL0=(65536-10000)%256
EA=1
ET0=1
TR0=1
}
void
timer0(void)
interrupt
1
{
TH0=(65536-100)/256
TL0=(65536-100)%256
a++
if(a<=3)
{
P0_0=1
if(a==3)
//改变低电平持续时间
{
//也即改变占空比
P0_0=~P0_0
}
}
else
{
P0_0=0
if(a==5)
//改变周期
{
a=0
}
}
}