#include<reg52.h> //51单片机头文件
#define uchar unsigned char //宏定义无符号字符
#define uint unsigned int //宏定义无符号整型
uchar led[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d}; //定义字模档数为1--5挡
uchar anjian[]={2,4,6,8,10}; //占空比20%,40%,60%,80%,100%的PWM
sbit jiasu=P2^0; //定义加速按键位
sbit jiansu=P2^1; //定义减速按键位
sbit maichong=P1^7; //定义脉冲输出
sbit shumaguan=P3^4; //定义数码管控制位
uchar time=0; //定时循环初始化
uchar i=1; //初始化
void deplay(uchar s) //延时函数声明
{
uint j=500; //定义自变量
for(;j>0;j--) //for循环,
for(;s>0;s--); //嵌套for循环
}
void itime ()interrupt 1 //定义中断函数
{
TH0=0xff; //重装计数初值
TL0=0x9c;
++time; //定时加1
if(time==anjian[i-1]) //高电平满足此条件变低电平
maichong=0;
if(time==10) //当循环到10次时,周期时间为1000us时变高电平
{
time=0; //定时初始化
maichong=1; //将脉冲设置为高电平
}
}
void main() //主函数
{
TMOD=0x01; //T0定时方式1
TH0=0xff; //计数初值设为100us
TL0=0x9c;
TR0=1; //启动T0
shumaguan=0; //数码管显示置零
while(1) { //死循环
shumaguan=1; //数码管开启
if(jiasu==0){ //软件消抖,检测加速按键是否按下
deplay(5); //延时
if(jiasu==0) //若按键按下
{
if(i<5)i++; //按键按下一次档位加一
else //若数值大于5,则速度控制在5档
i=5;
P1=led[i-1]; //数码管显示
while(jiasu==0); //等待松开按键
} }
if(jiansu==0){ //软件消抖,检测减速按键是否按下
deplay(5);
if(jiansu==0) //若按键按下
{
if(i>0) i--; //按键按下一次档位减一
if(i==0)i=1; //若数值等于0,则速度控制在1档
P1=led[i-1]; //数码管显示
while(jiansu==0); //等待松开按键
} }
ET0=1; //开T0中断
EA=1; //开启总中断
}
}
|