本程序适合单片机初学入门(新手)练习用,程序注解详细,非常容易看明白。资料免费,有需要者可以免费获取单片机Keil4软件工程文件及仿真文件。
单片机源程序:
#include<reg52.h> //包含单片机寄存器的头文件
#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; //定义延时变量
uchar n; //定义方向标志位 n=1,从上到下;n=0,从下到上
/* 函数申明 -----------------------------------------------*/
void delay(uint z); //延时函数
void key(); //按键处理函数
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main()
{
uchar num; //定义变量
delay(500); //延时
t=300; //初始速度 值大,速度慢,值小,速率快
n=1; //从上到下
GND=0; //置按键接地端低电平
while(1) //主循环
{
if(n==1) //从上到下
{
num++; //循环变量加1
if(num>=3) //判断循环变量大于3时 ,将循环变量置0
num=0; //将循环变量置0
if(num==0) //判断循环变量等于0时.点亮1,4,7
P0=0x6D; //点亮1,4,7 即01101101
else
if(num==1) //判断循环变量等于1时.点亮2,5,8
P0=0xB6; //点亮2,5,8 即10110110
else
if(num==2) //判断循环变量等于1时.点亮3,6
P0=0xDB; //点亮3,6 即11011011
delay(t); //延时
key(); //调用按键处理子程序
}
else //从下到上
{
num++; //循环变量加1
if(num>=3) //判断循环变量大于3时 ,将循环变量置0
num=0; //将循环变量置0
if(num==0) //判断循环变量等于0时.点亮3,6
P0=0xDB; //点亮3,6 即11011011
else
if(num==1) //判断循环变量等于1时.点亮2,5,8
P0=0xB6; //点亮2,5,8 即10110110
else
if(num==2) //判断循环变量等于1时.点亮1,4,7
P0=0x6D; //点亮1,4,7 即01101101
delay(t); //延时
key(); //调用按键处理子程序
}
}
}
/*
********************************************************************************
** 函数名称 : delay(uint z)
** 函数功能 : 延时函数
********************************************************************************
*/
void delay(uint z)
{
uchar j; //定义延时变量
for(z;z>0;z--) //延时第一层循环
for(j=200;j>0;j--); //延时第二层循环
}
void key() //按键处理函数
{
if(k1==0) //按键按下
{
delay(20); //延时消除按键抖动
while(k1==0); //等待按键松开
n=1; //从上到下
}
if(k2==0) //按键按下
{
delay(20); //延时消除按键抖动
while(k1==0); //等待按键松开
n=0; //从下到上
}
if(k3==0) //按键按下
{
t=t+10; //延时速度加10
if(t>600) //限制延时速度最慢为1000
t=600; //限制延时系数1000
}
if(k4==0) //按键按下
{
t=t-10; //延时速度减10
if(t<200) //限制延时速度最快为10
t=200; //限制延时系数10
}
}