?? 30-14-4.c
字號:
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一個52標準內核的頭文件
sbit P10=P1^0; //要控制的LED燈
sbit K1=P3^0; //按鍵K1,占空比增大
sbit K2=P3^1; //按鍵K2,占空比減小
sbit K3=P3^2; //按鍵K3,周期增大
sbit K4=P3^3; //按鍵K4,周期減小
static uchar Tosc;//一個周期的時間
static uchar Duty;//占空比
void main(void)
{
TMOD=0x11; //T0和T1均選擇工作方式1,16位定時器
TH0=0x3C;
TL0=0xB0; //定時時間為0.1s/周期
TH1=0x3C;
TL1=0xB0; //定時時間為0.1s/周期
ET0=1; //使能T0溢出中斷
ET1=1;
EA=1; //使能CPU中斷
TR0=0; //T0禁止運行
TR1=1; //喚醒T1,T1開始計數
while(1) //無限循環
{
;
}
}
timer0(void) interrupt 1 //T0中斷服務函數,占空比
{
if(Duty==0 && Tosc==0)Tosc=1; //消除都等于0時的Duty無限增長死循環
if(!K1)Duty++;
if(Duty==Tosc)
{
Duty=0;
P10=~P10; //矩形波中的高低電平反轉
TR1=1; //開始T1計數
TR0=0; //禁止T0計數,等待T1將其喚醒
}
if(!K2)
{
Duty--;
P10=~P10;
TR1=1; //開始T1計數
TR0=0; //禁止T0計數,等待T1將其喚醒
}
if(Duty==0)
{
Duty=Tosc;
P10=~P10; //矩形波中的高低電平反轉
TR1=1; //開始T1計數
TR0=0; //禁止T0計數,等待T1將其喚醒
}
}
timer1(void) interrupt 3 //T1中斷服務函數,頻率
{
if(!K3)
{
if(Tosc==10)Tosc=0; //定時時間為1s
Tosc++;
TR0=1; //開始T0計數
TR1=0; //禁止T1計數,等待T0將其喚醒
}
if(!K4)
{
if(Tosc==0)Tosc=10; //定時時間為1s
Tosc--;
TR0=1; //開始T0計數
TR1=0; //禁止T1計數,等待T0將其喚醒
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -