编写程序控制电调:
#include<reg52.h>
sbit Ppm=P2^0;
sbit Up=P2^1;
sbit Down=P2^2;
sbit Led_Up=P2^3;
sbit Led_Down=P2^4;
unsigned char k=0;
unsigned char a=0;
void Control()
{
if(Up==0&&k<99)
k++;
else if(Down==0&&k>0)
k--;
else ;
}
void Led ()
{
if(k==99) //如果油门加到最大,灯亮
Led_Up=0;
else if(k==0) //如果油门减到最小,灯亮
Led_Down=0;
else
{
Led_Up=1;
Led_Down=1;
}
}
/**************************************************************
函数功能:主函数
**************************************************************/
void main(void)
{
EA=1; //开总中断
ET1=1; //定时器T1中断允许
TMOD=0x10; //TMOD=0001 000B,使用定时器T1的模式1,16位
TH1=0xfc-k*12/256; //定时器T1的高8位赋初值
TL1=0x89-k*12%256; //定时器T1的高8位赋初值
TR1=1; //启动定时器T1
while(1)//无限循环等待中断
{
while(TF1==0) ;
TF1=0;
Control();
Led ();
}
}
/**************************************************************
函数功能:定时器T1的中断服务程序
在此函数中严重禁止使用如下格式赋值!!!!!!!!!!!!!!!
TH1=(65536-k)/256; //定时器T1的高8位赋初值
TL1=(65536-(125-k))%256; //定时器T1的高8位赋初值
不然输出来的计时长度就会变长!!!!!!!!!!!!!!!!!!
**************************************************************/
void Time1(void) interrupt 3 using 0 //“interrupt”声明函数为中断服务函数
{
unsigned char b;
TR1=0; //关闭定时器T1
b=k; //防止在给TH1和TL1赋值时,k发生变动
if(a==0)
{
a=1;
Ppm=1; //高电平
TH1=0xfc-k*12/256; //定时器T1的高8位赋初值
TL1=0x89-k*12%256; //定时器T1的低8位赋初值
}
else if(a==1)
{
a=0;
Ppm=0; //低电平
TH1=0xb7+k*12/256; //定时器T1的高8位赋初值
TL1=0x88+k*12%256; //定时器T1的低8位赋初值
}
else ;
TR1=1; //启动定时器T1
}
完整资料打包: