
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0
uint PWM=255//
void Timer_Init()
{
TMOD=0X12//t1工作在1模式,t0工作在8位自动重装初值模式
EA=1 //开总中断
ET1=1
TR1=1 //使能
ET0=1
TH1=-50000/256
TL1=-50000%256 //50ms定时
TH0=PWM
}
void main()
{
Timer_Init()
while(1)
{
PWM--//由暗变亮
if(PWM==0)
{PWM++; //由亮变暗
if(PWM==255)
PWM=255//重新开始
}
}
}
void t0_isr() interrupt 1 //t0控制占空比
{
led1=0;
TR0=0
}
void t1_isr() interrupt 3 //t1控制周期,这里以1s说明
{
uchar cnt;
cnt++
if(cnt==20) //1s到
{
cnt=0;
led1=1;
}
TR0=1
}
#include<reg52.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit LED0=P1^0// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
void Delay(unsigned int t)//函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned int CYCLE=600,PWM_LOW=0//定义周期并赋值
while (1) //主循环
{
P1=0xff
Delay(60000) //特意加延时,可以看到熄灭的过程
for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++){ //PWM_LOW表示低
//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
P1=0x00 //点亮LED
Delay(PWM_LOW)//延时长度,600次循环中从1加至599
P1=0xff //熄灭LED
Delay(CYCLE-PWM_LOW)//延时长度,600次循环中从599减至1
}
P1=0x00
for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--){ //与逐渐变亮相反的过程
P1=0x00
Delay(PWM_LOW)//变小
P1=0xff
Delay(CYCLE-PWM_LOW)//变大
}
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)