|
#include <reg51.h>
#include "delay.h"
sbit PWM=P2^1; //PWM輸出
sbit key_s=P3^2;
unsigned char PWM_bz=100; //0-100 改變脈沖寬度
unsigned char PWMFF; //定義變量,計(jì)算周期
void Timer0Init(void); //聲明定時(shí)計(jì)數(shù)器0
void EX0_Init(void); //聲明外部中斷0
void main()
{
EX0_Init(); //外部中斷0初始化
Timer0Init(); //初始化定時(shí)計(jì)數(shù)器0
EA=1; //中斷總開關(guān)
while(1)
{
}
}
void EX0_Init(void) //外部中斷0設(shè)置
{
IT0=1;
EX0=1;
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x9C; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
ET0=1;
//EA=1; //總中斷
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
void EX0_isr(void) interrupt 0 //外部中斷0入口
{
static unsigned char PWM_KEY; //定義脈寬調(diào)整變量
if(key_s==0) //按鍵判斷
{
delayms(10);
if(key_s==0)
{
PWM_KEY++; //每進(jìn)入一次中斷加一
}while(key_s==0); //松手運(yùn)行
}
switch(PWM_KEY)
{
case 1:PWM_bz=25;break;
case 2:PWM_bz=50;break;
case 3:PWM_bz=75;break;
case 4:PWM_bz=100;break;
case 5:PWM_bz=0;PWM_KEY=0;break; //清零
default:break;
}
}
void Timer0_isr(void) interrupt 1 //定時(shí)1ms
{
TR0 = 0;
TL0 = 0x9C; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
PWMFF++;
if(PWMFF>=100)
{
PWMFF=0;
}
if(PWMFF<PWM_bz)
PWM=1;
else
PWM=0;
TR0 = 1;
}
|
-
-
仿真.7z
2022-12-1 04:25 上傳
點(diǎn)擊文件名下載附件
31.26 KB, 下載次數(shù): 38
評(píng)分
-
查看全部評(píng)分
|