c51单片机发光二极管实例程序集-皇冠最新app版本

×
单片机 > 单片机程序设计 > 详情

c51单片机发光二极管实例程序集

发布时间:2025-02-11 发布时间:
|

1、

程序实现功能:让8个排列的led来回流动着亮1—》...——》8 1《——...《——8     箭头代表led流动方向,先从1-8然后从8到1依次循环。程序已经测试过,运行正常//大家如果用此代码测试的话注意你的led接在单片机的那个端口,本代码用的是p2口

#include

#define uint unsigned int

#define uchar unsigned char

uchar a,b;

uchar code led_array[]={

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

};    //led显示编码数组,从0xfe——0x7f为从第一个led管到第8个led管一次亮一个格式为0fff fffff0ff ffffff0f ffff...ffff fff0 led从1开始亮,到第8个led时开始反向以次流动着亮ffff fff0ffff ff0fffff f0ff...0fff ffff(注:0代表亮;1代表不亮)不知道大家看懂我写的意思了没....

void delay(uint x)

{

uint z,y;

for(z=x;z>0;z--)

for(y=110;y>0;y--);

}//延时函数

 

void sumup_ini()

{

p2=0xfe;//

}//总初始化函数,本人喜欢模块化写程序,不过这个模块一太小了..咳咳咳!!!

void main()

{

 

sumup_ini();//调用总初始化函数

while(1)这个不用说了吧!

{

                

for(a=0;a<8;a )

    {

p2=led_array[a];

if(p2!=led_array[7])    //这里用if判断led是否亮到了最后一个,如果已经是最后一个,则不执行延时函数,否则led每移动一位都要执行以下延时

 

 

/*(这里解释以下为什么判断led是否亮到最后一个,因为如果led已经是最后一个亮了还执行延时的话,就会与反向流动函数的初始值相同led_array[7]是led反向流动亮的第一位是led反向流动的最后一位,所以如果不用if判断的话就相当于在led_array[7]是延时了2倍的其它led亮的时间...为了让每个led亮的时间长短相等所以我就用if判断了以下)*/

delay(500);

 

 

    }    //led正向流动亮

for(b=7;b>0;b--)

                    {

                        p2=led_array[b];

                        delay(500);

                    }    //led方向流动亮

 

}

}



『本文转载自网络,皇冠最新app版本的版权归原作者所有,如有侵权请联系删除』

网站地图