|
#include<reg52.h> //51單片機(jī)頭文件
#define uchar unsigned char //宏定義無(wú)符號(hào)字符
#define uint unsigned int //宏定義無(wú)符號(hào)整型
uchar led[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d}; //定義字模檔數(shù)為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; //定義數(shù)碼管控制位
uchar time=0; //定時(shí)循環(huán)初始化
uchar i=1; //初始化
void deplay(uchar s) //延時(shí)函數(shù)聲明
{
uint j=500; //定義自變量
for(;j>0;j--) //for循環(huán),
for(;s>0;s--); //嵌套for循環(huán)
}
void itime ()interrupt 1 //定義中斷函數(shù)
{
TH0=0xff; //重裝計(jì)數(shù)初值
TL0=0x9c;
++time; //定時(shí)加1
if(time==anjian[i-1]) //高電平滿(mǎn)足此條件變低電平
maichong=0;
if(time==10) //當(dāng)循環(huán)到10次時(shí),周期時(shí)間為1000us時(shí)變高電平
{
time=0; //定時(shí)初始化
maichong=1; //將脈沖設(shè)置為高電平
}
}
void main() //主函數(shù)
{
TMOD=0x01; //T0定時(shí)方式1
TH0=0xff; //計(jì)數(shù)初值設(shè)為100us
TL0=0x9c;
TR0=1; //啟動(dòng)T0
shumaguan=0; //數(shù)碼管顯示置零
while(1) { //死循環(huán)
shumaguan=1; //數(shù)碼管開(kāi)啟
if(jiasu==0){ //軟件消抖,檢測(cè)加速按鍵是否按下
deplay(5); //延時(shí)
if(jiasu==0) //若按鍵按下
{
if(i<5)i++; //按鍵按下一次檔位加一
else //若數(shù)值大于5,則速度控制在5檔
i=5;
P1=led[i-1]; //數(shù)碼管顯示
while(jiasu==0); //等待松開(kāi)按鍵
} }
if(jiansu==0){ //軟件消抖,檢測(cè)減速按鍵是否按下
deplay(5);
if(jiansu==0) //若按鍵按下
{
if(i>0) i--; //按鍵按下一次檔位減一
if(i==0)i=1; //若數(shù)值等于0,則速度控制在1檔
P1=led[i-1]; //數(shù)碼管顯示
while(jiansu==0); //等待松開(kāi)按鍵
} }
ET0=1; //開(kāi)T0中斷
EA=1; //開(kāi)啟總中斷
}
}
|
|