找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6277|回复: 1
收起左侧

单片机入门之流水灯制作

[复制链接]
ID:34643 发表于 2020-5-29 20:50 | 显示全部楼层 |阅读模式
       单片机入门之流水灯制作教程,从硬件角度用视频方法介绍了单片机流水灯制作详细过程,流水灯制作,是单片机入门级的制作,很多学习单片机的人都进行这这样的制作,下面介绍一下这个电子小制作的源程序、仿真文件、视频,供单片机学习爱好者进行学习,让爱好者自己动手,实践一下这样的电子小制作实例。由于视频较大,本坛上传不了,只好放在百度网盘。链接: https://pan.baidu.com/s/1lpKSP9xXZy9kHB_mwH-sMQ 提取码: qhts
流水灯实物照片.jpg

流水灯仿真

流水灯仿真


#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
        }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:764663 发表于 2020-5-29 22:08 | 显示全部楼层
学习了,不错         
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表