|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
#include<reg51.h>
unsigned char count; //记录0.5ms次数的变量
sbit pwm=P3^7; //PWM输出
sbit jia=P3^0; //角度增加按键
sbit jan=P3^1; //角度减少按键
unsigned char jd; //角度标记变量
void delay(unsigned char z)//延时函数
{
unsigned char x,y;
for(x=125;x>0;x--)
for(y=z;y>0;y--);
}
void Time0_Init() //定时器0的设定
{
TMOD=0x01; //16位自动重装 工作方式1 T0
IE=0x82;
TH0=0xff;
TL0=0xa3; //11.0592MHz定时0.5毫秒
TR0=1; //计时开始
}
void Time0_Int() interrupt 1//中断程序
{
TH0=0xff;
TL0=0xa3;
if(count<jd)
pwm=1;
else
pwm=0;
count=(count+1); //每进入中断程序一次 count变量的值+1
count=count%40; //20毫秒一个循环
}
void keyscan() //按键扫描函数
{
if(jia==0) //判断增加按键是否按下
{
delay(30);
if(jia==0) //如果确实按下
{
jd++;
count=0; //这句的功能:有按键按下后 才统计进入中断程序的次数
if(jd==20) // 这句不懂,进入中断后,这么写会产生10毫秒的高电平?为什么要这么写呢? 亲 可以帮我解释下么
jd=19;
while(jia==0);
}
}
if(jan==0)
{
delay(30);
if(jan==0)
{
jd--;
count=0;
if(jd==4)
jd=5;
while(jan==0);
}
}
}
void main()
{
jd=12; //还有这句,为什么jd的值要等于12啊?
count=0;
Time0_Init();
while(1)
{
keyscan();
}
}
|
| |