划句顾 发表于 2022-4-7 00:27:35

单片机作业:流水灯1.0

本帖最后由 划句顾 于 2022-4-11 16:23 编辑

本次的实验,我没有考虑很多问题,我唯一的目的就只是把它搞出来,然后明天实验课可以早一点出来哈哈哈哈哈。
【写了两天了,就这个运行出来了,它的几个兄弟姐妹都流产了,泪目了{:5_100:} 】

8号做了流水灯2.0,有兴趣可以看一下流水灯2.0


/*
*Time:2022/4/06
*Author:LaoGu
*Purpose:参考教材的第1和2项目,实现一种自定义的智能流水灯控制系统设计,
               利用按键在线修改流水灯的花样。请提前做好实验准备。
提示:如利用4个按键操作,其中有两个按键用于实现花样模式的切换,
                      另外两个按键用于调节花样变化的速度。
*/
#include "reg51.h"

//设置按键
sbit K0=P1^0; //改变流水方向
sbit K1=P1^1; //增加时间
sbit K2=P1^2; //减少时间
sbit K3=P1^3; //改变流水灯花样

//设置花样数组
char hy1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char hy2[]={0x3f,0xcf,0xf3,0xfc,0x60,0x30,0x0c,0x06};
char hy3[]={0x0f,0xf0,0xcc,0x33,0xAA,0x55,0x99,0x66};
char hy4[]={0xe0,0x70,0x38,0x1c,0x0e,0x07,0xa8,0x54};

//延迟函数【时间可以自定义】
void Delay(int n)
{
       int i,j;
       
       for(i=0;i<n;i++)
           for(j=0;j<1000;j++);
}

//消除按键抖动函数
void Delay10ms()
{
       int i,j;
       for(i=0;i<100;i++)
           for(j=0;j<10;j++);
}

//主函数
void main()
{
        char i=0;
        bitdir=0,key_mark=0;       
      int n=5,j=1;
       
        while(1)
        {
               if((!K0 || !K1 || !K2 || !K3) && !key_mark)
               {
                       Delay10ms();
                       if(!K0 || !K1 || !K2||!K3)
                   {
                               if(!K0)
                                   dir=!dir;
                               else if(!K1)
                                  n+=10;
                                else if(!K2)
                                n-=10;
                               else
                               {
                                j+=1;
                                  if(j>4)   //之前我写的是j>=5 这个条件是错的,我老师说它的条件不可能大于等于5
                                        j=1;
                               }
                               key_mark=1;
                       }       
               }
               else if(K0)
                       key_mark=0;
               
                switch(j)
        {       
                case 1:P3=hy1;break;
                   case 2:P3=hy2;break;
               case 3:P3=hy3;break;
                case 4:P3=hy4;break;
        }
       
         Delay(n);
       if(dir==0)
   {                       
       if(++i>7)
         i=0;
   }
   else
   {                       
       if(--i<0)
         i=7;
   }                
        }               
}

static/image/hrline/5.gif

电路图:

小伤口 发表于 2022-4-7 13:59:39

厉害支持{:9_232:}

shiyouroc 发表于 2022-4-7 15:02:09

厉害支持

hornwong 发表于 2022-4-7 19:01:46

{:5_95:}
页: [1]
查看完整版本: 单片机作业:流水灯1.0