本程序適合單片機(jī)初學(xué)入門(新手)練習(xí)用,程序注解詳細(xì),非常容易看明白。資料免費(fèi),有需要者可以免費(fèi)獲取單片機(jī)Keil4軟件工程文件及仿真文件。
單片機(jī)源程序:
#include<reg52.h> //包含單片機(jī)寄存器的頭文件
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^1; //從上到下按鍵
sbit k2=P1^2; //從下到上按鍵
sbit k3=P1^3; //加速按鍵
sbit k4=P1^4; //減速按鍵
sbit GND=P1^0;
uint t; //定義延時(shí)變量
uchar n; //定義方向標(biāo)志位 n=1,從上到下;n=0,從下到上
/* 函數(shù)申明 -----------------------------------------------*/
void delay(uint z); //延時(shí)函數(shù)
void key(); //按鍵處理函數(shù)
/*
********************************************************************************
** 函數(shù)名稱 : main(void)
** 函數(shù)功能 : 主函數(shù)
********************************************************************************
*/
void main()
{
uchar num; //定義變量
delay(500); //延時(shí)
t=300; //初始速度 值大,速度慢,值小,速率快
n=1; //從上到下
GND=0; //置按鍵接地端低電平
while(1) //主循環(huán)
{
if(n==1) //從上到下
{
num++; //循環(huán)變量加1
if(num>=3) //判斷循環(huán)變量大于3時(shí) ,將循環(huán)變量置0
num=0; //將循環(huán)變量置0
if(num==0) //判斷循環(huán)變量等于0時(shí).點(diǎn)亮1,4,7
P0=0x6D; //點(diǎn)亮1,4,7 即01101101
else
if(num==1) //判斷循環(huán)變量等于1時(shí).點(diǎn)亮2,5,8
P0=0xB6; //點(diǎn)亮2,5,8 即10110110
else
if(num==2) //判斷循環(huán)變量等于1時(shí).點(diǎn)亮3,6
P0=0xDB; //點(diǎn)亮3,6 即11011011
delay(t); //延時(shí)
key(); //調(diào)用按鍵處理子程序
}
else //從下到上
{
num++; //循環(huán)變量加1
if(num>=3) //判斷循環(huán)變量大于3時(shí) ,將循環(huán)變量置0
num=0; //將循環(huán)變量置0
if(num==0) //判斷循環(huán)變量等于0時(shí).點(diǎn)亮3,6
P0=0xDB; //點(diǎn)亮3,6 即11011011
else
if(num==1) //判斷循環(huán)變量等于1時(shí).點(diǎn)亮2,5,8
P0=0xB6; //點(diǎn)亮2,5,8 即10110110
else
if(num==2) //判斷循環(huán)變量等于1時(shí).點(diǎn)亮1,4,7
P0=0x6D; //點(diǎn)亮1,4,7 即01101101
delay(t); //延時(shí)
key(); //調(diào)用按鍵處理子程序
}
}
}
/*
********************************************************************************
** 函數(shù)名稱 : delay(uint z)
** 函數(shù)功能 : 延時(shí)函數(shù)
********************************************************************************
*/
void delay(uint z)
{
uchar j; //定義延時(shí)變量
for(z;z>0;z--) //延時(shí)第一層循環(huán)
for(j=200;j>0;j--); //延時(shí)第二層循環(huán)
}
void key() //按鍵處理函數(shù)
{
if(k1==0) //按鍵按下
{
delay(20); //延時(shí)消除按鍵抖動(dòng)
while(k1==0); //等待按鍵松開
n=1; //從上到下
}
if(k2==0) //按鍵按下
{
delay(20); //延時(shí)消除按鍵抖動(dòng)
while(k1==0); //等待按鍵松開
n=0; //從下到上
}
if(k3==0) //按鍵按下
{
t=t+10; //延時(shí)速度加10
if(t>600) //限制延時(shí)速度最慢為1000
t=600; //限制延時(shí)系數(shù)1000
}
if(k4==0) //按鍵按下
{
t=t-10; //延時(shí)速度減10
if(t<200) //限制延時(shí)速度最快為10
t=200; //限制延時(shí)系數(shù)10
}
}