用KEIL 为89S51单片机写个C语言音乐程序

作者&投稿:逮田 (若有异议请与网页底部的电邮联系)
用c语言在单片机AT89C51编写音乐程序~

谁给你的程序啊,把你的程序贴出来看看。

什么单片机也不知道,自己找杜娘个例子程序修改一下 吧
~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~

//此程序在硬件上调试通过
//本程序的单片机晶振采用11.0592M
#include <reg51.h>
sbit speaker=P1^1;
unsigned char timer0h,timer0l,time;
//世上只有妈妈好数据表
code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
// 音阶频率表 高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
void delay(unsigned char t)
{
unsigned char t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++)
{
;
}
}
TR0=0;
}
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}

void main(void)
{
unsigned char k,i;
TMOD=1; //置CT0定时工作方式1
EA=1;
ET0=1;//IE=0x82 //CPU开中断,CT0开中断
while(1)
{
i=0;
while(i<100){ //音乐数组长度 ,唱完从头再来
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=sszymmh[i+2];
i=i+3;
song();
}
}
}

//此程序在硬件上调试通过
//本程序的单片机晶振采用11.0592M
#include
<reg51.h>
sbit
speaker=P1^1;
unsigned
char
timer0h,timer0l,time;
//世上只有妈妈好数据表
code
unsigned
char
sszymmh[]={
6,2,3,
5,2,1,
3,2,2,
5,2,2,
1,3,2,
6,2,1,
5,2,1,
6,2,4,
3,2,2,
5,2,1,
6,2,1,
5,2,2,
3,2,2,
1,2,1,
6,1,1,
5,2,1,
3,2,1,
2,2,4,
2,2,3,
3,2,1,
5,2,2,
5,2,1,
6,2,1,
3,2,2,
2,2,2,
1,2,4,
5,2,3,
3,2,1,
2,2,1,
1,2,1,
6,1,1,
1,2,1,
5,1,6,
0,0,0
};
//
音阶频率表
高八位
code
unsigned
char
FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,
//1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
}
;
//
音阶频率表
低八位
code
unsigned
char
FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,
//1,2,3,4,5,6,7,8,i
0xEE,0x44,
0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
void
delay(unsigned
char
t)
{
unsigned
char
t1;
unsigned
long
t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<8000;t2++)
{
;
}
}
TR0=0;
}
void
t0int()
interrupt
1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void
song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}
void
main(void)
{
unsigned
char
k,i;
TMOD=1;
//置CT0定时工作方式1
EA=1;
ET0=1;//IE=0x82
//CPU开中断,CT0开中断
while(1)
{
i=0;
while(i<100){
//音乐数组长度
,唱完从头再来
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=sszymmh[i+2];
i=i+3;
song();
}
}
}


贾汪区15786149892: 用KEIL 为89S51单片机写个C语言音乐程序 -
恭丁阿法: //此程序在硬件上调试通过 //本程序的单片机晶振采用11.0592M #include <reg51.h> sbit speaker=P1^1; unsigned char timer0h,timer0l,time; //世上只有妈妈好数据表 code unsigned char sszymmh[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1, 6,2,...

贾汪区15786149892: 怎么用keil写汇编程序并且下载到51单片机中去,我试了但硬件没反应,求详细过程? -
恭丁阿法: Keil写汇编程序与写c程序差不多,写一个汇编程序步骤如下.一,运行keil,建一个工程.二,新建一个文件,另存为后缀为asm的汇编文件.三,将这个文件载入刚建的工程.四,现在可以录入代码了.五,录入完成后编译调试直到没有错误和警告,生成HEX文件.六,将HEX文件下载到单片机,运行看效果.七,修改软件直到达到预期效果.

贾汪区15786149892: 我用的单片机是89s51,烧写是debug吗?debug后用run测单片机信号正确.烧写后怎么让单片机加电自动运行程 -
恭丁阿法: 程序按Debug是软件仿真.需要用烧写器吧代码少写道单片机的FLash中.现在常用的是ISP下载器 你有没有接外部的硬件仿真头?51是不支持在线仿真的.除非使用单独的仿真器或是软件仿真.验证逻辑功能正确后在将代码烧写到单片机中,可以上电自动运行.

贾汪区15786149892: 用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上. -
恭丁阿法: 按照你的要求写的程序如下,你拿去测试吧!#include "REG52.H" sbit SHUG_01 = P2^0; //数码管1 sbit SHUG_02 = P2^1; //数码管2 sbit SHUG_03 = P2^2; //数码管3 sbit SHUG_04 = P2^3; //数码管4 sbit SHUG_05 = P2^4; //数码管5 ...

贾汪区15786149892: 51汇编程序的烧录过程 -
恭丁阿法: keil 不是烧录程序的吧 它可以模拟调试 但是不是烧录软件 你在网上可以搜一下烧录软件 我用的是宏晶科技的STC-ISP V39

贾汪区15786149892: 怎样用keil编写单片机的计数程序 -
恭丁阿法: 如果你的计数过程不是非常快的话,可以不用外部中断. include <reg51.h> void xianshi(long unsigned int i) //显示子函数,用来显示数字. { } void delay() //延迟函数 { int x,y; for(x=0;x<100;x++) //修改数值,可改变延迟时间 for(y=0;y<10;y++)...

贾汪区15786149892: 写一个有关单片机AT89C51的程序
恭丁阿法: ORG 0000H ;单片机上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H MOV A,#0FEH ;ACC中先装入LED1亮的数据(二进制的...

贾汪区15786149892: AT89C51怎么把程序写进去 -
恭丁阿法: 第一步、先安装AT89C51单片机的开发工具软件,如 Keil UV2第二步、在Keil中创建51单片机的工程,并编写相应的控制代码,之后生成HEX文件第三步、打开51单片机专用的串口烧写工具软件,如 STC_ISP,并设置型号以及其它参数第四步、用STC_ISP调入Keil 生成的HEX文件,准备下载程序第五步、使用电脑的9针串口,并利用串口数据线连接至51单片机开发板,并将开发板通电第六步、先点击STC_ISP的下载按钮,之后再将开发板复位,开发板都有复位按键的哦至此,便可完成AT89C51单片机的程序烧写步骤了

贾汪区15786149892: 怎么将KEIL C的C代码烧到STC89C51中?
恭丁阿法: 编译产生hex或者bin文件 (十六进制或二进制)ROM映像文件. 然后找个编程器(烧写器)写入C51芯片即可.

贾汪区15786149892: 怎么把用keil编写的单片机程序烧写到单片机中,有那几种方法,是不是用到一个软件,在线烧写是怎么回事? -
恭丁阿法: 用keil编写的单片机程序要编译成目标文件.具体要看你用的芯片.一般编译成十六进制文件或二进制文件.烧写的的方法也和芯片有关.有的要烧写器,有的就是在线.在线烧写就是不用把芯片卸下来直接烧写.一般用串行口或并行口.具体要咨询芯片厂家.每家用到软件都不同.一般都是厂家提供的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网