标题: 单片机入门之流水灯制作 [打印本页]

作者: 51mcu    时间: 2020-5-29 20:50
标题: 单片机入门之流水灯制作
       单片机入门之流水灯制作教程,从硬件角度用视频方法介绍了单片机流水灯制作详细过程,流水灯制作,是单片机入门级的制作,很多学习单片机的人都进行这这样的制作,下面介绍一下这个电子小制作的源程序、仿真文件、视频,供单片机学习爱好者进行学习,让爱好者自己动手,实践一下这样的电子小制作实例。由于视频较大,本坛上传不了,只好放在百度网盘。链接: 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
        }
}


作者: 派大叔    时间: 2020-5-29 22:08
学习了,不错         




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1