C语言C51单片机花样流水灯程序分析注释

C语言C51单片机花样流水灯程序分析注释,第1张

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

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从一边到另一边依次点亮的效果。

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

设一个标志位flag, 以标志位的5种状态对应发光二极管的5种工作状态,如当flag=1发光二极管工作在1,当flag=2发光二极管工作在2,......!然后根据定时器定时功能,5秒到,刷新flag的值,程序如下

/*程序功能:定时5S到切换LED显示状态.

作者:w418781840.2008.5.29 */

FLAG BIT 30H 定义标志位

ORG 0

LJMP MAIN

ORG 0BH

LJMP AGA

主程序

ORG 0030H

MAIN: MOV FLAG,#01H 标志位清0

MOV TMOD,#01H 赋值50MS

MOV TH0,#3CH

MOV TL0,#0B0H

MOV R0,#100 中断100*50=5S

SETB EA

SETB ET0

SETB TR0

SJMP $

中断服务程序

AGA: MOV TH0,#3CH

MOV TL0,#0B0H

DJNZ R0,LOOP 5S到否?否,返回

INC FLAG 到,标志加1

MOV A,FLAG

CJNE A,#05,L1 扫描5种状态了否?

MOV FLAG,#01H 是,归0,重新开始

切换程序

L1: CJNE A,#01H,L2 判断是否是状态1?否,转判断2

LCALL LED1 是,调有状态1

SJMP LOOP 返回

L2: CJNE A,#02H,L3 以下跟上面判断相同

LCALL LED2

SJMP LOOP

L3: CJNE A,#03H,L4

LCALL LED3

SJMP LOOP

L4: CJNE A,#04H,L5

LCALL LED4

SJMP LOOP

L5: CJNE A,#05H,LOOP

LCALL LED5

LOOP: RETI

LED子程序区

LED1: RET

LED2: RET

LED3: RET

LED4: RET

LED5: RET

/////////////////

///////////////////////////////

/*程序功能:定时5S到切换LED显示状态.

作者:w418781840.2008.5.29 */

//========声明区===========

#include <reg51.h>

unsigned char count=0

unsigned char flag=1

void led1(void)

void led2(void)

void led3(void)

void led4(void)

void led5(void)

//=========函数=========

main()

{ TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

while(1)

{ switch(flag)

{ case 1:led1()break

case 2:led1()break

case 3:led1()break

case 4:led1()break

case 5:led1()break

}

}

}

//==========中断服务============

void timer0(void) interrupt 1

{ TH0=(65536-50000)/256

TL0=(65536-50000)%256

if(++count==100)

{ count=0

flag++

if(flag==5)

flag=1

}

}

//========5种状态函数区=========

单片机学的就是程序,根据硬件电路写程序的

你的两排灯应该是P0和P1的吧

如果你想学我可以教你,手上也没有花样程序,也懒得写了,花样也是一个一个的闪烁程序堆积起来,就是用~(P0<<j),然后再用些P0=0xfe,什么什么的,再加for循环,加延迟,最好有水滴下落的效果,用pwm占空比在去控制灯的亮度


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/11432130.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存