10-PWM脉宽调制信号
#include "reg52.h"
sbit L1 = P0^0;
sbit S7 = P3^0;
void delay(unsigned char t)
{
while(t--);
}
void HC573()
{
P2 = (P2 & 0x1f) | 0x80;
}
//=============PWM===========
unsigned char count = 0;
unsigned char pwm_duty = 0;
void InitTimer0()
{
TMOD = 0x01;
TH0 = (65535 - 100)/256;
TL0 = (65535 - 100)%256;
ET0 = 1;
EA = 1;
}
void Timer0() interrupt 1
{
TH0 = (65535 - 100)/256;
TL0 = (65535 - 100)%256;
count ++;
if(count == pwm_duty)
{
L1 = 1;
}
else if(count == 100)
{
L1 = 0;
count = 0;
}
}
//===========按键相关函数============
unsigned char state = 0;
void scan()
{
if(S7 == 0)
{
delay(100);
if(S7 == 0)
{
switch(state)
{
case 0:
L1 = 0;
TR0 = 1;
pwm_duty = 10;
state = 1;
break;
case 1:
L1 = 0;
TR0 = 1;
pwm_duty = 50;
state = 2;
break;
case 2:
L1 = 0;
TR0 = 1;
pwm_duty = 90;
state = 3;
break;
case 3:
L1 = 1;
TR0 = 0;
state = 0;
break;
}
while(S7 == 0);
}
}
}
void main()
{
HC573();
InitTimer0();
L1 = 1;
while(1)
{
scan();
}
}