📄 pwmnew.c
字号:
#include <reg52.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define CT0 XBYTE[0x0000]//8254计数器地址
#define CT1 XBYTE[0x1000]
#define CT2 XBYTE[0x2000]
#define CTW XBYTE[0x3000]
sbit WDI=P2^7;
sbit stop=P3^3;//S1
sbit zhengzhuan=P2^3;//S2
sbit fanzhuan=P2^2;//S3
sbit speedup=P2^1;//S4
sbit speeddown=P2^0;//S5
sbit en=P1^0;
sbit zheng=P1^1;
sbit fan=P1^2;
uint speed=50;
uint v=5;
uint b;
uchar count = 0;
uint mark=0xf0;
void PWM8254()
{
WDI=!WDI;
CTW=0x16;//计数器0,只写低字节,方式3
CT0=100;//周期
CTW=0x92;//计数器2,只写低字节,方式1
CT2=speed; //可调整占空比,speed越大,速度越慢
}
void Up()
{
speed=speed-v;
if(speed<=5) speed=5;
CTW=0x92;
CT2=speed;
}
void Down()
{
speed=speed+v;
if(speed>=95) speed=95;
CTW=0x92;
CT2=speed;
}
void Stop()
{
en=1;
}
void delay()
{
TR2=1;
do{ }while(count<=3);
TR2=0;
count = 0;
}
void main()
{
PWM8254();
WDI=!WDI;
RCAP2H=0x10;
RCAP2L=0x00;
TR2=0;
ET2=1;
EA=1;
while(1)
{
WDI=!WDI;
if(!zhengzhuan)
{
for(b=0;b<1000;b++);
while(!zhengzhuan);
for(b=0;b<1000;b++);
if(mark==0x5a)
{
Stop();
delay();
}
en=0;
zheng=1;
fan=0;
mark=0xa5;
}
if(!fanzhuan)
{
for(b=0;b<1000;b++);
while(!fanzhuan);
for(b=0;b<1000;b++);
if(mark==0xa5)
{
Stop();
delay();
}
en=0;
fan=1;
zheng=0;
mark=0x5a;
}
if(!stop)
{
for(b=0;b<1000;b++);
while(!stop);
for(b=0;b<1000;b++);
en = 1;
mark=0xf0;
}
if(!speeddown)
{
for(b=0;b<1000;b++);
while(!speeddown);
for(b=0;b<1000;b++);
Down();
}
if(!speedup)
{
for(b=0;b<1000;b++);
while(!speedup);
for(b=0;b<1000;b++);
Up();
}
}
}
timer2() interrupt 5
{
static uchar t=0;
TF2=0;
t++;
if(t>=15)
{
t=0;
count++;
}
WDI=!WDI;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -