#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; //開啟總中斷
}
}
|