×

51单片机流水灯设计

消耗积分:0 | 格式:zip | 大小:0.38 MB | 2022-12-28

香香技术员

分享资料个

方案介绍

       本程序适合单片机初学入门(新手)练习用,程序注解详细,非常容易看明白。资料免费,有需要者可以免费获取单片机Keil4软件工程文件及仿真文件。

单片机源程序:
#include    //包含单片机寄存器的头文件
#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
    }
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !