单片机入门之流水灯制作教程,从硬件角度用视频方法介绍了单片机流水灯制作详细过程,流水灯制作,是单片机入门级的制作,很多学习单片机的人都进行这这样的制作,下面介绍一下这个电子小制作的源程序、仿真文件、视频,供单片机学习爱好者进行学习,让爱好者自己动手,实践一下这样的电子小制作实例。由于视频较大,本坛上传不了,只好放在百度网盘。链接: https://pan.baidu.com/s/1lpKSP9xXZy9kHB_mwH-sMQ 提取码: qhts
流水灯仿真
#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
}
}
|