问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求16个流水灯程序,有模式还可以调节快慢的,急求,谢谢。7

发布网友 发布时间:2023-11-10 03:58

我来回答

1个回答

热心网友 时间:2024-03-11 13:44

《基于8051+Proteus仿真》案例

第01 篇基础程序设计

01    闪烁的LED

 

/*    名称:闪烁的LED

       说明:LED按设定的时间间隔闪烁

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED=P1^0;

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       while(1)

       {

              LED=~LED;

              DelayMS(150);

       }

}

 

02  从左到右的流水灯

 

/*    名称:从左到右的流水灯

       说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       P0=0xfe;

       while(1)

       {

              P0=_crol_(P0,1);//P0的值向左循环移动

              DelayMS(150);

       }

}

 

03  8只LED左右来回点亮

 

/*    名称:8只LED左右来回点亮

       说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       P2=0x01;

       while(1)

       {

              for(i=0;i<7;i++)

              {

                     P2=_crol_(P2,1);//P2的值向左循环移动

                     DelayMS(150);

              }

              for(i=0;i<7;i++)

              {

                     P2=_cror_(P2,1);//P2的值向右循环移动

                     DelayMS(150);

              }

       }

}

 

04  花样流水灯

 

/*    名称:花样流水灯

       说明:16只LED分两组按预设的多种花样变换显示

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code Pattern_P0[]=

{

 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

uchar code Pattern_P2[]=

{

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,

 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)

       {

              for(i=0;i<120;i++);

       }

}

//主程序

void main()

{

       uchari;

       while(1)

       {     //从数组中读取数据送至P0和P2口显示

              for(i=0;i<136;i++)

              {

                     P0=Pattern_P0[i];

                     P2=Pattern_P2[i];

                     DelayMS(100);

              }

       }

}

 

05  LED模拟交通灯

 

/*    名称:LED模拟交通灯

       说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0;    //东西向灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3;    //南北向灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

       switch(Operation_Type)

       {

              case1:     //东西向绿灯与南北向红灯亮

                            RED_A=1;YELLOW_A=1;GREEN_A=0;

                            RED_B=0;YELLOW_B=1;GREEN_B=1;

                            DelayMS(2000);

                            Operation_Type=2;

                            break;

              case2:     //东西向黄灯闪烁,绿灯关闭

                            DelayMS(300);

                            YELLOW_A=~YELLOW_A;GREEN_A=1;

                            if(++Flash_Count!=10)return; //闪烁5次

                            Flash_Count=0;

                            Operation_Type=3;

                            break;

              case3:     //东西向红灯,南北向绿灯亮

                            RED_A=0;YELLOW_A=1;GREEN_A=1;

                            RED_B=1;YELLOW_B=1;GREEN_B=0;

                            DelayMS(2000);

                            Operation_Type=4;

                            break;

              case4:     //南北向黄灯闪烁5次

                            DelayMS(300);

                            YELLOW_B=~YELLOW_B;GREEN_B=1;

                            if(++Flash_Count!=10)return;

                            Flash_Count=0;

                            Operation_Type=1;

       }

}

//主程序

void main()

{

       while(1)Traffic_Light();

}

 

06  单只数码管循环显示0~9

 

/*    名称:单只数码管循环显示0~9

       说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari=0;

       P0=0x00;

       while(1)

       {/* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);}  //注:另一方案 */

              P0=~DSY_CODE[i];

              i=(i+1)%10;

              DelayMS(300);

       }

}

 

07  8只数码管滚动显示单个数字

 

/*    名称:8只数码管滚动显示单个数字

       说明:数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,wei=0x80;

       while(1)

       {

              for(i=0;i<8;i++)

              {

                     P2=0xff;    //关闭显示

                     wei=_crol_(wei,1);

                     P0=DSY_CODE[i];  //发送数字段码

                     P2=wei;           //发送位码

                     DelayMS(300);

              }

       }

}

 

08  8只数码管动态显示多个不同字符

电路如上图

/*    名称:8只数码管动态显示多个不同字符

       说明:数码管动态扫描显示0~7。

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,wei=0x80;

       while(1)

       {

              for(i=0;i<8;i++)

              {    

                     P2=0xff;

                     P0=DSY_CODE[i];  //发送段码

                     wei=_crol_(wei,1);

                     P2=wei;           //发送位码

                     DelayMS(2);

              }

       }

}

 

09  8只数码管闪烁显示数字串

电路如上图

/*    名称:8只数码管闪烁显示数字串

       说明:数码管闪烁显示由0~7构成的一串数字

                本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//位码表

uchar codeDSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,j;

       while(1)

       {

              for(i=0;i<30;i++)

              {    

                     for(j=0;j<8;j++)

                     {

                            P0=0xff;

                            P0=DSY_CODE[j];  //发送段码

                            P2=DSY_IDX[j];    //发送位码

                            DelayMS(2);

                      }

              }

              P2=0x00;        //关闭所有数码管并延时

              DelayMS(1000);

       }

}

 

10  8只数码管滚动显示数字串

电路如上图

/*    名称:8只数码管滚动显示数字串

       说明:数码管向左滚动显示3个字符构成的数字串

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//段码表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏)

uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};

//延时

void DelayMS(uint x)

{

       uchart;

       while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

       uchari,j,k=0,m=0x80;

       while(1)

       {     //刷新若干次,保持一段时间的稳定显示

              for(i=0;i<15;i++)

              {    

                     for(j=0;j<8;j++)

                     {     //发送段码,采用环形取法,从第k个开始取第j个

                            P0=0xff;

                            P0=DSY_CODE[Num[(k+j)%11]]; 

                            m=_crol_(m,1);

                            P2=m;      //发送位码

                            DelayMS(2);

                      }

              }

              k=(k+1)%11;  //环形队列首支针k递增,Num下标范围0~10,故对11取余

       }

}

 

11  K1-K4 控制LED移位

 

/*    名称:K1-K4 控制LED移位

       说明:按下K1时,P0口LED上移一位;

                按下K2时,P0口LED下移一位;

                按下K3时,P2口LED上移一位;

                按下K4时,P2口LED下移一位;

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

       uchari;

       while(x--)for(i=0;i<120;i++);

}    

//根据P1口的按键移动LED

void Move_LED()

{

       if     ((P1&0x10)==0) P0=_cror_(P0,1);  //K1

       elseif((P1&0x20)==0) P0=_crol_(P0,1);     //K2

       elseif((P1&0x40)==0) P2=_cror_(P2,1); //K3

       elseif((P1&0x80)==0) P2=_crol_(P2,1);     //K4

}

//主程序

void main()

{

       ucharRecent_Key; //最近按键

       P0=0xfe;

       P2=0xfe;

       P1=0xff;

       Recent_Key=0xff;

       while(1)

       {

              if(Recent_Key!=P1)

              {

                     Recent_Key=P1;      //保存最近按键

                     Move_LED();

                     DelayMS(10);

              }

       }

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 如何把照片背景换成蓝色背景6 求怎样把一寸照片红底改为蓝底259 在天津上大学是一种怎样的体验?有什么需要注意的? 姓尹,辈分是诗,男孩,帮忙想想起什么名字,多几个选择,尹诗(... 求大家取个名字帮忙取个名字?男孩、女孩都要去,孩子老爸姓尹。 好听的男孩名字,姓尹,急需 请大师帮我的宝宝起个名字!男孩。姓尹。 给一个男孩起名字吧!姓尹 王之涣的送别表达了作者怎样情感13 去南华寺的情侣真的会分手吗,打算和男友去韶关玩,有点不敢去南...46 我用手机号申请的又绑定了别的,可原来的就没了,怎么... 起亚K3手动低配用U盘放音乐时放不出来,歌曲一直在循环列表,... 我新注册的,想修改下,怎么改不了啊5 关于单片机知识,请问下面程序中,为什么流水灯的只亮第一个灯,...2 怎样可以找回跟QQ绑定的49 一个号码注册了两个,怎么找回第一个? 法院与财政局谁权力大1 前男友分开后过得很不好,还要去关心吗? 前男友分手了怎么安慰 定州职教中心2023年地址在哪里 汉字为什么没有中断?5 西方经典法律故事:夏威夷的椰树为何不结果9 迅雷是什么软件啊..是用在什么地方的?使用方法是什么? 我用一个号码,创造了两个,现在小号密码忘记也没有SMI,怎么找回... 火麻一般生长在中国的什么地方? 社会主义本质理论提出的重大理论意义和现实意义是什么? 证件照如何换背景颜色588 把红底照片变成蓝底的?1 求助郑州专家,为什么经常会胃痛呢? 在天津大学读书是怎样的一种体验?2920 在天津大学读大一是一种怎样的体验? 在天津大学读大一是一种怎样的体验? ps照片红底怎么变蓝底1 中华汉字一直延续至今的原因29 如果你跟一个特别好的朋友突然因为一件事儿谁也不理谁了,他在学... 中国的文化为什么一直没有中断19 为什么夏威夷的椰树不长果子?1 [急]历史问题!古老文字为什么会消失?中国文字为什么能沿用至...12 中华文化延续至今而从未中断过的原因有哪些17 莆田湄洲湾东吴村石塔建筑工程介绍?