单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

Python016

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS),第1张

单片机流水灯C语言程序的源代码如下:

#include //51系列单片机定义文件

#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void delay(uint)//声明延时函数

void main(void)

{

uint i

uchar temp

while(1)

{

temp=0x01

for(i=0i<8i++) //8个流水灯逐个闪动

{

P1=~temp

delay(100)//调用延时函数

temp<<=1

}

temp=0x80

for(i=0i<8i++) //8个流水灯反向逐个闪动

{

P1=~temp

delay(100)//调用延时函数

temp>>=1

}

temp=0xFE

for(i=0i<8i++) //8个流水灯依次全部点亮

{

P1=temp

delay(100)//调用延时函数

temp<<=1

}

temp=0x7F

for(i=0i<8i++) //8个流水灯依次反向全部点亮

{

P1=temp

delay(100)//调用延时函数

temp>>=1

}

void delay(uint t) //定义延时函数

{

register uint bt

for(tt--)

for(bt=0bt<255bt++)

}

扩展资料

51单片机流水灯的源代码如下

#include<reg51.h>

#include<intrins.h>

void delay(int a)

{

int i

while(a--)for(i=0i<110i++)

}

main()

{

int i

while(1)

{

P0=0xfe

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

{

P0=_crol_(P0,1)

delay(500)

}

}

}

C语言流水灯程序是学习的基础,一定要搞懂!给你发两个!\x0d\x0a(一)\x0d\x0a#include //51系列单片机定义文件\x0d\x0a#define uchar unsigned char //定义无符号字符\x0d\x0a#define uint unsigned int //定义无符号整数\x0d\x0avoid delay(uint) //声明延时函数\x0d\x0avoid main()\x0d\x0a{\x0d\x0a uint i\x0d\x0a uchar temp\x0d\x0a while(1)\x0d\x0a {\x0d\x0a temp=0x01\x0d\x0a for(i=0i>=1\x0d\x0a}\x0d\x0a temp=0xFE\x0d\x0a for(i=0i>=1\x0d\x0a }\x0d\x0a }\x0d\x0a}\x0d\x0avoid delay(uint a) //延时函数,毫秒级别\x0d\x0a{\x0d\x0a uint i\x0d\x0a while(--a!=0) //执行空操作循环,其中a为形参,由调用该函数的函数语句提供值\x0d\x0a {\x0d\x0a for(i=0i\x0d\x0a#define uint unsigned int\x0d\x0a#define uchar unsigned char\x0d\x0a#define ulong unsigned long\x0d\x0a sbit p2=P2^0\x0d\x0avoid main()\x0d\x0a{\x0d\x0a TMOD=0x01\x0d\x0a TR0=1\x0d\x0a ET0=1\x0d\x0a EA=1\x0d\x0a while(1)\x0d\x0a {\x0d\x0a \x0d\x0a }\x0d\x0a}\x0d\x0a\x0d\x0atimer0() interrupt 1\x0d\x0a{\x0d\x0a TH0=0x00\x0d\x0a TL0=0x06\x0d\x0a p2=!p2\x0d\x0a}\x0d\x0a\x0d\x0a(三)\x0d\x0a定时流水灯//\x0d\x0a#include\x0d\x0a#define uint unsigned int\x0d\x0a#define uchar unsigned char\x0d\x0a#define ulong unsigned long\x0d\x0abit ldelay=0\x0d\x0avoid main()\x0d\x0a{\x0d\x0a uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}\x0d\x0a uchar leda\x0d\x0a TMOD=0x00\x0d\x0a TR0=1\x0d\x0a ET0=1\x0d\x0a EA=1\x0d\x0a while(1)\x0d\x0a {\x0d\x0a if(ldelay)\x0d\x0a {\x0d\x0a ldelay=0\x0d\x0a P2=led[leda]\x0d\x0a leda++\x0d\x0a if(leda==9)leda=0 \x0d\x0a }\x0d\x0a }\x0d\x0a}\x0d\x0atimer2() interrupt 1\x0d\x0a{\x0d\x0a static uchar t\x0d\x0a TF0=0\x0d\x0a t++\x0d\x0a if(t==10)\x0d\x0a {\x0d\x0a t=0\x0d\x0a ldelay=1\x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a(四)\x0d\x0a变速流水灯//\x0d\x0a#include\x0d\x0a#define uint unsigned int\x0d\x0a#define uchar unsigned char\x0d\x0a#define ulong unsigned long\x0d\x0abit ldelay=0\x0d\x0auchar speed=100\x0d\x0avoid main()\x0d\x0a{\x0d\x0a uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}\x0d\x0a uchar leda\x0d\x0a TMOD=0x00\x0d\x0a TR0=1\x0d\x0a ET0=1\x0d\x0a EA=1\x0d\x0a while(1)\x0d\x0a {\x0d\x0a if(ldelay)\x0d\x0a {\x0d\x0a ldelay=0\x0d\x0a P2=led[leda]\x0d\x0a leda++\x0d\x0a if(leda==9)\x0d\x0a {\x0d\x0a leda=0\x0d\x0a speed-=10\x0d\x0a if(speed==0)speed=100\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a}\x0d\x0atimer2() interrupt 1\x0d\x0a{\x0d\x0a static uchar t\x0d\x0a TF0=0\x0d\x0a t++\x0d\x0a if(t==speed)\x0d\x0a {\x0d\x0a t=0\x0d\x0a ldelay=1\x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a(五)\x0d\x0a//每2两圈改变一次亮度\x0d\x0a#include\x0d\x0a#define uint unsigned int\x0d\x0a#define uchar unsigned char\x0d\x0a#define ulong unsigned long\x0d\x0abit ldelay=0\x0d\x0auchar speeda=30\x0d\x0auint k=0\x0d\x0avoid main()\x0d\x0a{\x0d\x0a uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}\x0d\x0a uchar leda\x0d\x0a uchar speed[10]={5,80,70,60,50,40,30,20,10,5}\x0d\x0a uint i\x0d\x0a uint k\x0d\x0a TMOD=0x00\x0d\x0a TR0=1\x0d\x0a ET0=1\x0d\x0a EA=1\x0d\x0a while(1)\x0d\x0a {\x0d\x0a if(ldelay)\x0d\x0a {\x0d\x0a ldelay=0\x0d\x0a P2=led[leda]\x0d\x0a leda++\x0d\x0a if(leda==9)\x0d\x0a {\x0d\x0a leda=0\x0d\x0a k++\x0d\x0a if(k==2){\x0d\x0a k=0\x0d\x0a speeda=speed[i]\x0d\x0a i++\x0d\x0a if(i==9)i=0\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a}\x0d\x0atimer2() interrupt 1\x0d\x0a{\x0d\x0a static uchar t\x0d\x0a TF0=0\x0d\x0a t++\x0d\x0a if(t==speeda)\x0d\x0a {\x0d\x0a t=0\x0d\x0a ldelay=1\x0d\x0a }\x0d\x0a} \x0d\x0a\x0d\x0a(六)\x0d\x0a//在上面基础上调灯的亮度(调占空比)\x0d\x0a#include\x0d\x0a#define uint unsigned int\x0d\x0a#define uchar unsigned char\x0d\x0a#define ulong unsigned long\x0d\x0abit ldelay=0\x0d\x0auchar speeda=30\x0d\x0auint k=0\x0d\x0auchar scale \x0d\x0avoid main()\x0d\x0a{\x0d\x0a uchar led[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff}\x0d\x0a uchar leda\x0d\x0a uchar speed[10]={5,80,70,60,50,40,30,20,10,5}\x0d\x0a uint i\x0d\x0a uint k\x0d\x0a TMOD=0x00\x0d\x0a TR0=1\x0d\x0a ET0=1\x0d\x0a EA=1\x0d\x0a while(1)\x0d\x0a {\x0d\x0a if(ldelay==1)\x0d\x0a {\x0d\x0a ldelay=0\x0d\x0a P2=led[leda]\x0d\x0a leda++\x0d\x0a scale++\x0d\x0a if(scale==10)scale=0\x0d\x0a if(leda==9)\x0d\x0a {\x0d\x0a leda=0\x0d\x0a k++\x0d\x0a if(k==2){\x0d\x0a k=0\x0d\x0a speeda=speed[i]\x0d\x0a i++\x0d\x0a if(i==9)i=0\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a }\x0d\x0a}\x0d\x0atimer2() interrupt 1\x0d\x0a{ \x0d\x0a static uchar t\x0d\x0a TH0=0x1c\x0d\x0a TL0=0xbf\x0d\x0a TF0=0\x0d\x0a t++\x0d\x0a if(t==speeda)\x0d\x0a {\x0d\x0a t=0\x0d\x0a ldelay=1\x0d\x0a }\x0d\x0a if(scale==10)P2=0\x0d\x0a if(scale==0)P2=1\x0d\x0a}

和你说一句关键的(别告我你整个程序一句都看不懂):

P1=0xfe

0xfe是十六进制表示的数,二进制就是1111 1110,通过你的程序和相关注释可以看出,硬件上你有8个led灯连接P1口,且这些led是低电平亮。P1=0xfe(1111 1110)也就是表示七个灯灭,一个灯亮。接下来的代码就是让P1数据0xfe左移且低位补1,移一次就是1111 1101,、两次就是1111 1011,三次是1111 0111。。。以此类推,可以看出它是0由最低位到最高位依次移过去的,而刚说了0表示led亮,这也就是led从一边到另一边依次点亮的效果。

后面的代码按我上面说的自己理解,完全对你解释太麻烦,对你也没多大好处,只有你自己理解了才能学好单片机