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

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方向流动亮

 

}

}



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

热门文章 更多
51单片机基础计算器