生日快乐歌曲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次然后停止,程序步最少的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)