求单片机LED灯闪烁生日快乐代码。谢谢

求单片机LED灯闪烁生日快乐代码。谢谢,第1张

生日快乐歌曲C代码

//

#include <reg51h>

#define uint unsigned int

#define uchar unsigned char

sbit beep = P1^5;

uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,

212,212,106,126,159,169,190,119,119,126,159,142,159,0};

uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,

9,3,12,12,12,12,12,9,3,12,12,12,24,0};

//延时

void DelayMS(uint x)

{

uchar t;

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

}

void PlayMusic()

{

uint i=0,j,k;

while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)

{ //播放各个音符,SONG_LONG 为拍子长度

for(j=0;j<SONG_LONG[i]20;j++)

{

beep=~beep;

//SONG_TONE 延时表决定了每个音符的频率

for(k=0;k<SONG_TONE[i]/3;k++);

}

DelayMS(10);

i++;

}

}

void main()

{

beep=0;

while(1)

{

PlayMusic(); //播放生日快乐

DelayMS(500); //播放完后暂停一段时间

}

}

如果能看到的数字跟期望的一致,

根据经验,这种情况一般程序是对的,是仿真的问题

建议下载到实际电路板上跑跑看,如果数字有闪动,可调整动态扫描的速度。

实在要仿真,也可以尝试调整一下显示器件的 最小触发时间

LED1               BIT            P17

                     ORG          0000H

                     LJMP         MAIN

                     ORG         0100H

MAIN:              MOV         R7,#3                ;设置控制小灯 闪亮的循环次数为3

LL1:               CLR          LED1                 ;LED小灯 亮

                     LCALL      YS500MS           ;延时500毫秒

                     SETB        LED1                 ;LED小灯 灭

                     LCALL      YS500MS           ;延时500毫秒

                     DJNZ         R7, LL1             ;闪亮的循环次数减1,不为0,转LL1继续循环

LLEDN:          SJMP        LLEDN             

YS500MS:       MOV         R6,#15       ;延时05秒子程序

YSLL1:           MOV          R5,#200

YSLL2:           DJNZ          R5, YSLL2

                     DJNZ         R6,  YSLL1

                     RET

          如果满意   请替俺选择:满意回答

#include<reg51h>

void delay(unsigned int i);

main() //主函数

{

P2=0x55; //P2口:0101 0101 从左到右:第一个口低电平,第二个口高电平。。。。

delay(600); //延时600,不延时你来不及看见灯亮

P2=0xaa; /P2口输出端取反,1010 1010 高电平变低电平,低电平变高电平,(原来亮的关掉,原来不亮的亮)/

delay(600);

}

void delay(unsigned int i) //这个是延时函数

{

unsigned char j;

for(i;i>0;i--)

for(j=255;j>0;j--) ;

}

这样应该明白了吧!不过你这个程序,按一下复位(或者打开一次电源)只亮一下。加个循环就可以不停的闪啦!

给你参考,可按你的要求自行更改。

;101229     外部中断1按键按下,P1流水灯(跑马灯),P2鸳鸯戏水灯(交叉点亮)

ORG 00H

AJMP MAIN

ORG 03H

AJMP EX0INT

ORG 0030H

MAIN: MOV SP,#60H

SETB EA

SETB EX0

SETB IT0

MOV R0,#8

JNB F0,$

MOV A,#0FEH

LED: MOV P1,A

MOV P2,#0AAH

ACALL DLY

MOV P2,#55H

ACALL DLY

RL A

DJNZ R0,LED

MOV R0,#8

AJMP LED

EX0INT: SETB F0

RETI

DLY:    MOV R7,#20

MOV  R6,#20

MOV  R5,#250

DJNZ  R5,$

DJNZ  R6,$-4

DJNZ R7,$-8

RET

END

用AT89C2051单片机(可以换成任意的51单片机)仿真,控制一个LED灯闪烁,LED灯接在P17脚上。程序如下

LED1 BIT P17

MAIN:CPL LED1

ACALL  DELAY

SJMP  MAIN

DELAY:MOV R7,#0;延时子程序

MOV  R6,#0

LOP:DJNZ R6,$

DJNZ R7,LOP

RET

END

仿真图如下

你这有两个按键,k6,k7,用哪个。

你这程序怎么也是数码管显示的,你这不是有显示程序吗,上一个提问的6个按键,怎么不会呢?

你这程序是从哪抄来的吗,也不全啊,缺很多行啊。

主程序呢,在哪里,也没有main()。这都是什么哪?????

那个LED灯在哪呀,也没有啊。这也是用在你的学习板上的程序吗?

你学习板上有LED灯吗,接在哪个脚啦,怎么接的,又不说明,等写完了程序又不行了。

这肯定又不能与你的学习板相符,这程序又没有办法写。

#include <reg51h>

#include <intrinsh>

void delayms(unsigned char ms)

// 延时子程序

{

unsigned char i;

while(ms--)

{

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

}

}

main()

{

unsigned char LED;

LED = 0xfe; //0xfe = 1111 1110

while(1)

{

P2 = LED;

delayms(250);

LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位

if(LED == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110

}

}

以上就是关于求单片机LED灯闪烁生日快乐代码。谢谢全部的内容,包括:求单片机LED灯闪烁生日快乐代码。谢谢、关于C代码,51单片机用定时器实现LED灯间隔闪烁和数码管前两位59s循环计时的问题、如何让51单片机在3秒内让灯闪3次然后停止,程序步最少的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9809166.html

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

发表评论

登录后才能评论

评论列表(0条)

保存