单片机音符Java代码 单片机音符java代码怎么写

能提供几首单片机的歌曲代码?用蜂鸣器唱的#include reg52.h
#include intrins.h
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
//所以拿出谱子, 试探编吧!
sbit out=P2^3;
unsigned char n=0;//n为节拍常数变量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
0x20, 0x40, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,
0x20, 0x15, 0x20 , 0x1C,
0x20, 0x20, 0x20 , 0x26,
0x40, 0x20, 0x20 , 0x2B,
0x20, 0x26, 0x20 , 0x20,
0x20, 0x30, 0x80 , 0xFF,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x80,
0x20, 0x30, 0x1C , 0x10,
0x20, 0x10, 0x1C , 0x10,
0x20, 0x20, 0x26 , 0x20,
0x2B, 0x20, 0x30 , 0x20,
0x2B, 0x40, 0x20 , 0x15,
0x1F, 0x05, 0x20 , 0x10,
0x1C, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x30,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,
0x20, 0x20, 0x26 , 0x40,
0x13, 0x60, 0x18 , 0x20,
0x15, 0x40, 0x13 , 0x40,
0x18, 0x80, 0x00
};
void int0()interrupt 1//采用中断0 控制节拍
{TH0=0xd8;
TL0=0xef;
【单片机音符Java代码 单片机音符java代码怎么写】n--;
}
void delay (unsigned char m)//控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延时子程序
{
while(--a);//采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}
void main()
{ unsigned char p,m;//m为频率常数变量
unsigned char i=0;
TMOD=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00){ i=0, delayms(1000); goto play;}//如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff){ i=i 1;delayms(100),TR0=0; goto a;}//若碰到休止符,延时100ms,继续取下一音符
else{m=music_tab[i], n=music_tab[i];}//取频率常数 和 节拍常数
TR0=1;//开定时器1
while(n!=0) out=~out,delay(m);//等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0;//关定时器1
}
}
java解析单片机的代码从C语言到单片机的汇编(或者说是机器代码)是需要编译的,这个编译的过程本身是需要最早开发的人做大量的基础工作,比如要让电脑知道C语言中的if是“如果”的意思,编译时要根据情况、适当的转为汇编中的判断或跳转指令 。
所以,简单说,就是没有人做基于JAVA的单片机开发环境 。但是单片机的BASIC语言的开发环境却不少,像主流的PIC、AVR都有好几种 。单片机音符Java代码我用过PIC的,写起来很有意思 , 拿来做单片机入门不错 。复杂程序不行 。
你能问出这个问题,说明你还是没有理解编程语言的本质和单片机音符Java代码他们的关系 。
如何编写51单片机音乐程序设计的相关音乐说明
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期时间 。利用半周期时间定时这个半周期时间,每当计时到后就将输出的I/O反向,然后重复计时此半周期再对I/O反向,就可以在I/O脚上得到此频率的脉冲 。
记数脉冲值与频率的关系公式如:N=Fi/2/Fr 。N:记数值;Fi:内部计时依次为1us,故其频率为1 MHZ;Fr:要产生的频率 。
其记数值的求法如:T=65536-N=65536-Fi/2/Fr 。例:设K=65536 , F=1000000=Fi=1 MHZ 。求低音DO(26HZ),中音DO(523HZ),高音DO(1046HZ)的记数值 。
每个音符使用1个音节,字节的高四位代表音符的高低 , 低四位代表音符的节拍 。如果1拍为0.4秒,1/4拍为0.1秒,假设1/4拍为 DELAY , 则1拍为4 DELAY 。
扩展资料:
功能特性
1,可以仿真63K程序空间,接近64K 的16位地址空间;
2,可以仿真64Kxdata 空间,全部64K 的16位地址空间;
3,可以真实仿真全部32 条IO脚;
4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;
5,可以使用C51语言或者ASM汇编语言进行调试 ;
6,可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
7 , 可选 使用用户晶振,支持0-40MHZ晶振频率;
8,片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真;
9,可以仿真双DPTR 指针;
10,可以仿真去除ALE 信号输出. ;
11,自适应300-38400bps 的所有波特率通讯;
12 , 体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障;
13,仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座 , 保护仿真插针,同时不会损坏目标板上的插座. ;
14,仿真时监控和用户代码分离,不可能产生不能仿真的软故障;
15,RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比 。
参考资料来源:百度百科-51单片机
Java C语音 程序 单片机/ /项目名称:Car_Demo
/ /说明:参与实施汽车语音控制
/ /库:CMacro1016.lib
/ / bsrv222SDL.lib
/ / sacmv26e 。库
/ /组成文件:main.c中
/ / Flash.asm,hardware.asm,ISR.asm
/ /的hardware.h,s480.h,hardware.inc
/ /硬件连接:IOA0 ----- KEY1
/ / IOA1 ----- KEY2
/ / IOA2 ----- KEY3
/ / IOB8 ---- - 远期
/ / IOB9 -----倒车
/ / IOB10 ----左
/ / IOB11 ----右转
/ /保养纪录:2005年-12-12 V1.0
/ / ===================================== ===================
#包括“s480.h”
#包括“bsrsd.h”
BR /#定义P_IOA_Data(挥发性无符号整数*)0x7000处
#定义P_IOA_Dir(挥发性无符号整数*)0x7002
#定义P_IOA_Attrib(挥发性无符号整数*)0x7003
#定义P_IOB_Data(挥发性无符号整型*)0x7005
#定义P_IOB_Dir(挥发性无符号整数*)0x7007
#定义P_IOB_Attrib(挥发性无符号整数*)0x7008
#定义P_TimerA_Data(挥发性无符号整数*)0x700A
#定义P_TimerA_Ctrl(挥发性无符号整数*)0x700B
#定义P_TimerB_Data(挥发性无符号整数*)0x700C
#定义P_TimerB_Ctrl(挥发性无符号整数*)0x700D
#定义P_Watchdog_Clear(挥发性无符号整型*)0x7012
#定义P_INT_Mask(挥发性无符号整数*)0x702D
#定义P_INT_Clear(挥发性无符号整数*)0x7011
#定义名_ID量0x100
#定义COMMAND_GO_ID 0x101
#定义COMMAND_BACK_ID 0x102
#定义COMMAND_LEFT_ID #定义COMMAND_RIGHT_ID量0x104
#定义S_NAME 0 / /给我一个名字吧
#定义S_ACT1 1 / /前进
#定义S_ACT2 2 / /倒车,请注意
#定义S_ACT3 3 / /左
#定义S_ACT4 4 / /右转
#定义S_RDY 5 / /是啊
#定义S_AGAIN 6 / /请重复
#定义S_NOVOICE 7 / /没有听到任何声音
#定义S_CMDDIFF 8 / /代码字说啊
#定义S_NOISY 8 / /说什么暗语呀
#定义S_START 9 / /准备开始识别
#定义S_GJG 10 / /诱拐绑架
#定义S_DCZY 11 / /倒车 , 请注意
的extern unsigned int类型BSR_SDModel [100]; / /外部变量BSR_SDModel [100] , 读者自带
外部无效F_FlashWrite1Word(unsigned int类型地址,无符号整型值);
外部无效F_FlashErase(无符号整数部门);
无符号整型uiTimeset = 3; / /运行时间定时器,调节参数控制运行时间
无符号整型uiTimecont; / /运行时定时
/ / ================================== ===========================
/ /语法:无效延迟();
/ /功能:延时
/ /参数:无
/ /返回值:无
/ / ================ =============================================
无效延迟()
{
无符号整数I;
就(i = 0; I 0X3FFF,我)
{
* P_Watchdog_Clear = 0X0001;
/ / ============================== ===============================
/ /语法:无效PlaySnd(无符号SndIndex , 无符号DAC_Channel);
/ /功能:语音播放功能
/ /参数:SndIndex播放语音资源索引号
/ / DAC_Channel播放通道选择
/ /返回值:无
/ / =============================================== ============== 无效PlaySnd(无符号SndIndex,无符号DAC_Channel)
{
BSR_StopRecognizer(); / /停止识别
SACM_S480_Initial(1); / /初始化为自动
SACM_S480_Play玩(SndIndex,DAC_Channel,3); / /开始播放语音
同时(?。⊿ACM_S480_Status()&0X0001)= 0)/ /如果播放完毕?
SACM_S480_ServiceLoop(); / /解码,并填补了队列
* P_Watchdog_Clear = 0X0001; / /清除看门狗
}
SACM_S480_Stop(); / /停止播放
BSR_InitRecognizer(BSR_MIC); / /初始化识别器
}
/ / ============================== ===============================
/ /语法:INT TrainWord(INT的wordID,诠释SndID);
/ /功能:训练命令
/ /参数:
/ / SndID命令语气指数
/ /返回值的wordID指令编码:无
/ / ================================================= ============
整数TrainWord(无符号整数的wordID,无符号整型SndID)
{
int结果;
PlaySnd(SndID,3); / /导游培训,打相应的动作
指令,而(1)
{
结果= BSR_Train(的wordID,BSR_TRAIN_TWICE); / /训练两次 , 得到训练成绩
如果(结果== 0)打破;
开关(结果)
{
案例-1:/ /未检测到声音
PlaySnd(S_NOVOICE , 3);
返回-1;
案例-2:/ /要培养第二
PlaySnd(S_AGAIN,3);
突破;
案例-3:/ /环境嘈杂
PlaySnd(S_NOISY,3);
返回-3;
案例-4:/ /数据库全
回报-4;
情况-5:/ /检测声音不同
PlaySnd(S_CMDDIFF , 3);
返回-5;
情况-6:/ /错误号
回报-6;
默认:
突破;
返回0;
/ / =================================== ==========================
/ /语法:无效TrainSD();
/ /功能:训练功能
/ /参数:无
/ /返回值:无
/ / =============== ==============================================
无效TrainSD()
{
同时(TrainWord(名_ID,S_NAME)= 0?。? / /培训名称
而(TrainWord(COMMAND_GO_ID,S_ACT1)= 0);! / /训练第1节动作
同时(TrainWord(COMMAND_BACK_ID,S_ACT2)= 0);! / /培训前两个动作
同时(TrainWord(COMMAND_LEFT_ID,S_ACT3)= 0?。? / /训练第3节动作
同时(TrainWord(COMMAND_RIGHT_ID,S_ACT4)= 0?。? / /培训4的动作
}
/ / ============================= ================================
/ /语法:无效StoreSD();
/ /实现功能:存储语音模型功能
/ /参数:无
/ /返回值:无
/ / ============ =================================================BR /无效StoreSD() {unsigned int类型ulAddr,我,命令号 , g_Ret;
F_FlashWrite1Word(0xef00 , 加上0xAAAA);
F_FlashErase(0xe000);
F_FlashErase(0xe100);
F_FlashErase(0xe200);
ulAddr = 0xe000 ;/ / ********
为(命令号= 0x100的;命令号0x105;命令号)
{
g_Ret = BSR_ExportSDWord(命令号);
而(g_Ret! = 0)/ /导出模型成功?
g_Ret = BSR_ExportSDWord(命令号);
就(i = 0; I 100; i)/ /保存语音模型SD1(0xe000 --- 0xe063)
{
F_FlashWrite1Word(ulAddr,BSR_SDModel [I]) ;
ulAddr= 1;
/ / ========================= ====================================
/ /语法:无效StoreSD();
/ /功能:承载语音模型函数
/ /参数:无
/ /返回值:无 / / ============= ================================================ 无效LoadSD()
{unsigned int类型* P,K,JK,惩戒,g_Ret;
P =(INT *)0xe000;
为(JK = 0; JK 5; JK)
{
为(K = 0,K 100 , K)
{
RET = * P;
BSR_SDModel [K] = RET; / /加载语音模型
P= 1;
g_Ret = BSR_ImportSDWord();
而(g_Ret! = 0)/ /加载成功的模式?
g_Ret = BSR_ImportSDWord();
/ / ============================== ===============================
/ /语法:无效的GoAhead();
/ /功能:正向功能
/ /参数:无
/ /返回值:无
/ / =============== ==============================================
无效的GoAhead()/ /向前
PlaySnd(S_ACT1,3); / /提示
* P_IOB_Data = https://www.04ip.com/post/0X0100; / /前进
* P_INT_Mask | = 0X0004; / /以下为中断定时器操作
__ asm的(“INT FIQ , IRQ”);
uiTimecont = 0;
/ / ======================================= ======================
/ /语法:无效的备份();
/ /功能:返回函数
/ /参数:无
/ /返回值:无
/ / =============== ==============================================
无效的备份()/ /向后
PlaySnd(S_DCZY , 3); / /提示 * P_IOB_Data = https://www.04ip.com/post/0x0200; / /向后
* P_INT_Mask | = 0X0004; / /以下为中断定时器操作
__ asm的(“INT FIQ,IRQ”);
uiTimecont = 0;
/ / =================================== ==========================
/ /语法:无效TurnLeft();
/ /功能:打开左侧的功能
/ /参数:无
/ /返回值:无
/ / ============== ===============================================
无效TurnLeft()/ /左转
PlaySnd(S_GJG,3);
* P_IOB_Data = https://www.04ip.com/post/0x0900; / /右转
延迟(); / /延迟
* P_IOB_Data =https://www.04ip.com/post/成0x0500; / /左转
* P_INT_Mask | = 0X0004; / /以下为中断定时器操作
__ asm的(“INT FIQ,IRQ”);
uiTimecont = 0;
/ / ======================================= ======================
/ /语法:无效TurnRight();
/ /功能:右转子程序
/ /参数:无
/ /返回值:无
/ / ============== ===============================================
无效TurnRight()/ /右转
PlaySnd(S_GJG,3); / /语音提示
* P_IOB_Data =https://www.04ip.com/post/成0x0500; / /左转
延迟(); / /延迟
* P_IOB_Data = https://www.04ip.com/post/0x0900; / /右转
* P_INT_Mask | = 0X0004; / /以下为中断定时器操作
__ asm的(“INT FIQ,IRQ”);
uiTimecont = 0;
/ / =================================== ==========================
/ /语法:无效停止();
/ /功能:停车功能
/ /参数:无
/ /返回值:无
/ / =============== ==============================================
无效停止()/ /停止
{
* P_IOB_Data值= 0x0000; / /停车
PlaySnd(S_RDY,3); / /语音提示
}
/ / =============================== ==============================
/ /语法:BSR无效(无效);
/ /功能:识别功能
/ /参数:无
/ /返回值:无
/ / =============== ==============================================
BSR无效(无效)
{
int结果; / /识别结果存储
结果= BSR_GetResult(); / /得到识别结果
如果(结果 0)/ /语音触发?
* P_IOB_Data值= 0x0000; / /临时停车
开关(结果)
{
案名_ID:/ /识别命令
停止(名称); / /停机位
突破;
情况COMMAND_GO_ID:/ /找出第一个命令
的GoAhead(); / /执行一个动作:直
突破; 案例COMMAND_BACK_ID:/ /找出第二个命令
备份(); / /执行动作二:倒车
突破;
情况COMMAND_LEFT_ID:/ /找出第三个命令
TurnLeft(); / /执行三个动作:向左转
突破;
情况COMMAND_RIGHT_ID:/ /找出第四个命令
TurnRight(); / /执行动作四:右转
突破;
默认:
突破;
/ / ============================= ================================
/ /语法:IRQ5无效(无效);
/ /功能:中断服务子程序
/ /参数:无
/ /返回值:无
/ / ============== ===============================================
IRQ5无效(无效)的__attribute__((ISR)); / /运动定时控制
IRQ5无效(无效)
{
如果(uiTimecont== uiTimeset)
{
* P_IOB_Data值= 0x0000;
* P_INT_Clear = 0X0004;
/ / =================================== ==========================
/ /语法:INT主要(无效);
/ /功能:主要功能
/ /参数:无
/ /返回值:无
/ / ============== ===============================================
国际主要(无效)
{unsigned int类型BS_Flag; / /火车标志
* P_IOA_Dir =为0xFF00; / /初始化IOA,IOA07下拉输入
* P_IOA_Attrib =为0xFF00;
* P_IOA_Data值= 0x0000;
* P_IOB_Dir = 0x0f00; / /初始化IOB,IOB811与输出
* P_IOB_Attrib = 0x0f00;
* P_IOB_Data值= 0x0000;
BSR_DeleteSDGroup(0); / /初始化存储器RAM
BS_Flag = *(unsigned int类型*)0xe000; / /读取内存单元0xe000
如果(BS_Flag == 0xFFFF的)/ /没有受过训练(0xe000内容0xFFFF的)
{
TrainSD(); / /培训
StoreSD(); / /存储的训练结果(语音模式)
其他/ /训练(0xe000内容0x0055)
{
LoadSD(); / /语音识别模型加载
}
PlaySnd(S_START,3); / /开始识别
BSR_InitRecognizer(BSR_MIC)提示; / /初始化识别器
同时(1)
{
BSR();
如果((* P_IOA_Data)&0X0004)/ /如果再培训
{
F_FlashErase(0xe000);
而(1);
/ / ========================= ===================================
/ /文件名:flash.asm
/ /实现功能:SPCE061 32K闪存读卡器
/ /保养纪录:2003-6-9 V1 .0
/ / ================= ===========================================
。INCLUDE hardware.inc
。DEFINE C_FLASH_SIZE为0x8000
。DEFINE C_FLASH_BLOCK_SIZE量0x100
。DEFINE C_FLASH_MATCH加上0xAAAA
。DEFINE C_FLASH_PAGE_ERASE 0x5511 / /擦除一个
。DEFINE C_FLASH_MASS_ERASE 0x5522 / /
。DEFINE C_FLASH_1WORD_PGM 0x5533 / /写一个字
。DEFINE C_FLASH_SEQUENT_PGM 0x5544 / /写多个字
。DEFINE C_FLASH_MAIN_BLOCK为0x5555
。DEFINE C_FLASH_INFORM_BLOCK 0x5566
。代码
/ / =========================================== =================================================BR / / /语法:无效F_FlashWrite1Word(INT地址,int值)
/ /描述:写一个字到FLASH
/ /参数:要写入的地址内存中的数据写入值地址数据
/ /返回:无
/ / ================================== ================================================== ===========
。公众_F_FlashWrite1Word
DEFINE P_Flash_Ctrl 0x7555
_F_FlashWrite1Word:.. PROC
推基点至[SP]
BP = SP1
R1 = C_FLASH_MATCH / / AAAA
[P_Flash_Ctrl] = R1
R1 = C_FLASH_1WORD_PGM / / 5533
[P_Flash_Ctrl] = R1
R1 = [BP4] / / flash地址
R2 = [BP4 ] / /数据
[R1 = R2
流行BP从[SP]
。ENDP
/ / ======================================= ================================================== ====
/ /语法:F_FlashWrite(INT部门,诠释及次数,int的大?。?
/ /说明:顺序写更多的字
/ /参数:扇区是起始地址将数据写入写入和NUM-大小的写入数据数
/ /返回的数据:无
/ / ================== ================================================== =========================
公众_F_FlashWrite
_F_FlashWrite:.. PROC
推基点至[SP]
BP = SP1
R1 = [BP4] / / flash基地址
R2 =
/数据/ R3 = [BP5] / /多字节
R4 = C_FLASH_MATCH / / AAAA
[P_Flash_Ctrl] = R4
L_FlashWriteLoop:
R4 = C_FLASH_SEQUENT_PGM / / 5544
[P_Flash_Ctrl] = R4R4 = [R2]
[R1] = R4
R3 - = 1
JNZ L_FlashWriteLoop
[P_Flash_Ctrl] = R3 / /写从最终
弹出基点[SP]
RETF。ENDP
/ / ======================================= ================================================== ===
/ /语法:无效F_FlashErase(部门)
/ /说明:擦除256字节
/ /参数:起始地址扇区擦除页
/ /返回:无
/ / ============================================ ================================================ 公共_F_FlashErase
_F_FlashErase:.. PROC
推基点至[SP]
BP = SP1
R1 = C_FLASH_MATCH / / AAAA
[P_Flash_Ctrl] = R1
R1 = C_FLASH_PAGE_ERASE / / 5511
[P_Flash_Ctrl] = R1
R1 = [BP4] / /擦除一个
[R1] = R1
从[SP]
。ENDP
。完
/ / ======================================= =====================
/ /文件名:ISR.asm
/ /功能:语音播放/识别中断服务
/ /保养纪录:2003-9-9 V1.0
/ / ============================== ==============================
包括hardware.inc
公共_FIQ; 。..
外部_BSR_FIQ_Routine
外部F_FIQ_Service_SACM_S480
_FIQ:..
推R1,R5为[SP]; / /注册推来保护
R1 = C_FIQ_TMA;
[P_INT_Clear] = R1;
致电_BSR_FIQ_Routine / /语音识别中断服务
致电F_FIQ_Service_SACM_S480; / /语音播放中断服务
流行R1,R5从[SP];
RETI;
51单片机写音乐的一个程序,求详解 , 以下是程序 。SONG_TONE[i]/3
产生一个短延时,延时的时间正好是音符的频率
延时时间越短产生的频率就越高,发出的声音也越高
SONG_LONG[i]*20
是用于音符的持续时间 。
就相当于长按跟短按一个按键一样
关于单片机音符Java代码和单片机音符java代码怎么写的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读