单片机吉他音阶推算频率表,这个是怎们算出来的???51单片机用这个?别的单片机能用吗?比如stm32

51单片机几大误区,向51单片机说再见!
  51单片机的辉煌过去
  51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前国内的51单片机市场主要为国产宏晶的产品STC系列其号称低功耗,稳定与廉价的特点。
  学习51单片机的误区
  误区1:51单片机是学习的基础
  &51单片机是学习的基础&这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础&&毕竟那时没有更高级的单片机可以供使用,国内更没有更高级的教材供参考,老师的水平也是参差不齐,而51单片机正符合这样的需求,不仅有大量的成型的教材,广泛的示例,当时工作的实际项目也是51单片机为主,于是51单片机理所当然的成为当时的学习基础。要知道笔者读本科的时候是2004年,即10年前的东西。按照莫尔定律,电子行业每18个月更新换代,10年前的技术现在已经更新了6代了&&事实也确实如此。
  目前32位Crtex-M系列单片机的各种教程已经普及,其学习的难度不断降低。以意法半导体公司的STM32F系列单片机来说,意法半导体在推广产品初期大量赠送了核心板。免费赠送的核心板不仅有流行的32位Cortex-M系列微处理器,更在板上集成在线调试器。随机附赠的光盘或者链接更是提供了大量的示例源代码。我们只需要安装开发环境即可直接编译与下载调试。这时,如果再说51单片机是学习嵌入式的基础肯定是不合时宜了。
  误区2:51单片机可以学习寄存器的操作
  51单片机可以学习寄存器的操作,这一点儿是不容置疑的。我们分析一下其更深层的原因。在MSC-51单片机的编程环境中,最初是以汇编语言为主要编程语言。要知道汇编语言就是直接操作寄存器的,汇编语言是无法做到C语言的函数调用与封装的。如果说51单片机是以操作寄存器为优点,我觉得更应该说51单片机操作寄存器是一种无奈,是只有一个选项的选择题。
  我们现在的Cortex-M系列单片机就无法学习寄存器了吗?显然不是。在硬件设计中,硬件的操作方式就是寄存器的操作,但是其实现却是可以不同。各微处理器提供的C语言库函数包其实质就是将操作寄存器的指令进行了C语言环境下的封装。我们这里用ST官方库函数举一个示例:
  void USART_Init (USART1, *USART_InitStruct);//实现串口1的初始化,简单明了,无需注释
  笔者在这里也想举一个示例来说明寄存器操作的步骤,但是操作寄存器实在是太复杂了,笔者不想去浪费时间去整理了。
  通俗易懂的C语言,方便移植的C语言与硬件平台相对应的编译器联合,就能完成硬件的操作。有了简单、方便的方式,我们为什么还要考虑繁琐,复杂的汇编语言与寄存器操作呢?
  误区3:51单片机的成本低
  成本都是左右应用的主要因素。项目的立项主要考虑成本,销售的定价主要成本。低成本的方案才会在市场里占有优势。可是,51单片机真就是最低成本了吗?非也。现在按照功能划分,部分Cortex-m0系列的32位单片机的成本也能做3元人民币。其性能已经是51单片机的好几倍了,而且更容易开发与维护。
  还有另外一个成本:开发难度成本。51单片机不支持在线调试,有一些问题在编程初期没有发现,只有与硬件连接后才会显现出现来,例如控制操作中经常用到的延时。这时在线调试的巨大优势就体现出来了,它可以极其方便的查看微处理器当时的状态,使得问题的分析变得简单而透明。从而,有效降低开发的难度,缩短开发周期,节约开发资金。
  误区4:51单片机入门简单
  51单片机入门简单?我对于这个观点持保留意见。想要入门51单片机,我不仅熟悉该款单片机外设,而且还要充分了解寄存器的某位的意义。对于时钟,定时器的配置必须了如指掌。这样无疑会增大我的学习难度与熟悉的周期。如果我们使用32位单片机的库函数模式,我们只需要具备C语言的知识,了解API函数,直接看已经注释过的寄存器意思即可,不需要了解其底层的硬件实现,更不需要了解某个寄存器某个指定位的意义了。这样,减少了我的工作量,从而降低了开发难度。你说是51单片机入门简单,还是32位Cortex内核微处理器简单?
  嵌入式系统的学习是非常枯燥而又有挑战性的事情。由于与实际的硬件直接连接,不仅要考虑编写的正确性,而且还要考虑硬件的可靠性。这时,简单、高效的软件编写就变向的降低我们开发难度与风险。51单片机已经是明日黄花,向前看才是发展。是时候向51单片机说再见了!
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
51单片机LCD1602程序详解 LCD1602 工业字符型液晶。1602是指LCD显示的内容为16...
关于USB转串口驱动问题 ,在linux下已经集成好了CH340和PL2302的驱动(linux m...
有关51单片机有关晶振的问题一并总结出来,希望对学51的童鞋来说能有帮助
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大...
IBM - PC机硬盘驱动器适配器简称硬盘控制器。它是一个智能部件,可接一个或两个硬盘,通过系统板上...
说到51单片机的时钟首先想到51时怎么工作的呢?微型控制器要想工作必须要有一个“动力”,对于51单片...
在工业生产中温度是常见的被控参数,采用单片机对温度进行控制简单方便。本次创新设计的亮点是数字测温,温...
51单片机定时器工作原理及用法
晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会...
随着单片机应用的普及,单片机间通信问题已引起广泛的关注。目前,应用较多的是有线通信,而如何利用现有的...
学51单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就是如同人的心脏,是血液的脉搏,把单片机的...
51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的...
设计了一个基于LM317和AT89C51的数字显示可调稳压电源。系统包含主电源和辅助电源模块、电压数...
PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要...
在初学51单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就是如同人的心脏,是血液的脉搏,把单片...
RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检...
本人最近一直想用51单片机来设计制作一个“大功率直流有刷电机PWM调速控制器”。由于平时工作忙,没时...
笔者从事安卓底层开发,工作一年,个人看法 ,处女答。个人感脚51就是就是搞嵌入式第一门技术。把c语言...
下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。使用这种方法,无需任何...
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8...
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8...
六款单片机流水灯电路图介绍。采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片...
本文详细的介绍了八款单片机时钟电路图。时钟电路就是产生像时钟一样准确运动的振荡电路。任何工作都按时间...
在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单...
P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。
指令周期指的是单片机执行一条指令的时间。按指令执行的时间可分为:单周期、双周期和四周期(只有乘法和除...
当用单片机和PC机通过串口进行通信,尽管单片机有串行通信的功能,但单片机提供的信号电平和RS232的...
本文主要介绍了max7219驱动数码管:STM32硬件SPImax7219驱动8位数码管显示模块程序...
BOXZ,昵称盒仔,是一款开源的互动娱乐平台!百度一下,有很多盒仔的制作教程,基本都是用arduin...
先来一张制作完成的图片,受加工条件和材料的限制,尽了最大的努力后才勉强做成了现在的样子。
单片机软件开发里面第一步当属下载程序了,如果这一步都有问题,那么后面的一切便无从谈起,记得当初刚接触...
单片机中断就是当单片机正在执行程序的时候,突然某个按键按下了(产生外部中断),单片机就必须得去处理那...
本系统利用单片机STC89C52采用程序设计方法产生锯齿波、正弦波、三角波、矩形波四种波形,再通过D...
市面上的单片机种类繁多,在选用单片机进行开发时你是不是总是难以抉择,本文为大家带来51单片机、STC...
单片机在电学里面,属于很简单的一种器件,外表看,就是一个芯片,长着很多的脚。内部,就是一堆寄存器。不...
本文介绍51单片机检测输入的高电平的方法及注意事项
C文件,是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批文件是以数据...
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8...
DPTR是某些单片机中一个功能比较特殊的寄存器,是一个16位的特殊功能寄存器, 其高位字节寄存器用D...
晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,...
在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单...
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大...
经过不断地摸索和参考高手的设计,最终完成了单片机的步进电机控制,可以实现步进电机的实时正反转,加速,...
分析了基于51单片机和AD574的简易电子秤的设计,根据测量要求设计了传感器电路、AD转换电路、超量...
MCS-51单片机控制跑马灯的三种方法:穷举法、移位法、查表法。跑马灯,是指将八个发光二极管分别连接...
着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据...
首先应该了解51单片机最小系统: 51 最小系统也 称为 51 最小 应用 系统 , 是指用最少的元...
本系统充分利用89C51单片机的控制和计算能力,采用MCS-51汇编语言,设计了一种基于平均功率法的...
.如果EA=1(执行片内程序存储器中程序时):如果程序计数器的指针PC值超过0FFFH(4K)时,单...
  74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC59...
这应该属于 Keil 编译器的 bug,有网友做过实验,表示 Keil 编译后期产生的汇编代码中,结...
这应该属于 Keil 编译器的 bug,有网友做过实验,表示 Keil 编译后期产生的汇编代码中,结...
 MSP430内核采用RISC精简指令结构,整个代码量较少,按照复杂程度指令在几十个到百多不等,代码...
中断是为使单片机具有对外部或内部随机发生的事件进行处理而设置的。51单片机有5种中断源,即有5种对应...
51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协...
电磁脉冲辐照效应实验方法 电磁脉冲对电予系统的辐照效应实验方法,简单地说就是将被测电子系统置于电磁脉...
在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单...
所谓EMC就是:设备或系统在其电磁环境中能正常工作,且不对该环境中任何事物构成不能承受的电磁骚扰的能...
1、51单片机的P0口为了实现准3态,采用了OC输出,也就是集电极悬空输出,也有叫图腾柱输出的。这种...
大家可能都知道破解51单片机是很容易的,但为什么容易,又是如何来破解的,可能很多人就不大清楚了,我在...
51单片机是比较简单也是使用比较广泛的一种,初学单片机的朋友51单片机是必学的一门课程。可能很多朋友...
2位16进制转10进制,用除以10求商跟余数的方法,即可。
  4位16进制数呢?DIV指令只可以...
标准串口引脚2是RX,引脚3是TX,(即九针串口的2号引脚连接的是主控芯片的RXD引脚,3号引脚连接...
1 引言当今社会,随着经济的发展,人们生活水平的提高,肥胖的人越来越多,也就导致了越来越多的疾病产生...
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8...
单片机有很多种,AVR、PIC、MC6805系列等,他们的体系结构不尽相同,指令集也各异,有些是CI...
基于51单片机的ADC0809C程序代码。
模数转换器定位为单片机的外部RAM单元,因此与单片机的连接就有很多种。大体上说ADC0809在整个单...
DVI(Digital Video Interface)接口是由数字显示工作组在1999年制定的,利...
具有11个输入端的12 位模数转换器7LC2543 是美国德州仪器公司于近几年推出的一种性能价格比较...
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有...
MCS51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031...
基于51单片机的UART串口通信详解。
红外接收头的型号有很多HS0038 VS838等 功能大致相同,只是引脚封装不同。
在51单片机的P0口工作在普通IO口模式下,为准双向IO口。而工作在第二功能状态下时,则为标准的双向...
其实,嵌入式跟单片机真的没有多大的联系,想搞嵌入式的,就认真学好大学课程。
(1)单片机
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄...
051单片机有五个中断请求源,四个用于中断控制的寄存器IE.IP.TCON和SCON,用于控制中断的...
8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多...
51有51的轻巧,STM32有STM32的强大。首先51是入门最简单,相对来说好学、功能少、控制比较...
计算机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。这个脉冲是由单片机控制器中的时序电路发出的。...
C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。下面给出一个经典的延时函数。C程序中可使...
说到51单片机的时钟首先想到51时怎么工作的呢?微型控制器要想工作必须要有一个“动力”,对于51单片...
看到很多在做电子工程设计的朋友在讨论:转到该怎样学习?《单片机与嵌入式系统应用》小编为大家找到了这样...
凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:...
单片机诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。单片机具有一个完整计算机...
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8...
ULN2003 是一种高耐压、大电流的达林顿陈列,由七个NPN 达林顿管组成,每一对达林顿都串联一个...
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器...
存储器(Memory)是现代信息技术中用于保存信息的记忆设备。其概念很广,有很多层次,在数字系统中,...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-51单片机pwm波的频率是怎么算的? - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机pwm波的频率是怎么算的?
13:29:55  
这个程序的频率是多少?是不是看根据定时的时间计算的??要改成10k频率怎么改?谢谢!&div class=&blockcode&&&blockquote&
&&bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
unsigned int timer=0;
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
if(Left_moto_stop)
if(pwm_val_left&=push_val_left)
Left_moto_pwm=1;
Left_moto_pwm=0;
if(pwm_val_left&=20)
pwm_val_left=0;
Left_moto_pwm=0;
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
if(Right_moto_stop)
if(pwm_val_right&=push_val_right)
Right_moto_pwm=1;
Right_moto_pwm=0;
if(pwm_val_right&=20)
pwm_val_right=0;
Right_moto_pwm=0;
/***************************************************/
///*TIMER1中断服务子函数产生PWM信号*/
void timer1()interrupt 3
TH1=()/256; //1ms定时
TL1=()%256;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
已退回5积分
13:31:24  
刚忘了贴程序,补上去了
14:28:55  
是不是定时1us,高电平计数满100转低电平就是10KHz啦?
14:32:52  
不好意思,我不会你问的问题。
但我想问一下,你会单片机PID温度控制类似的程序吗?也是用PID控制后产生PWM波控制的
16:13:11  
不好意思,我不会你问的问题。
但我想问一下,你会单片机PID温度控制类似的程序吗?也是用PID控制后产生PWM波控制的
原来做课设的时候,在网上找的程序,我也不太会用,你看看
/*********************************
定时器初始化
*********************************/
void time_init()
{ TMOD = 0x01;
& & TH0 = 0x0D8;
& & TL0 = 0x0F0;
EA=1;
ET0=1;;
TR0=1;
/*************************
pwm波输出的定时中断
**************************/
void timer0()interrupt 1
{
count++;
if(count&=(hightime))
& & & & pwm=0;
else if(count&=100)
{pwm=1;
}
else
count=0;
TH0 = 0x0D8;
TL0 = 0x0F0;
}
/*********************
pid算法系数装载
***********************/
void pid_init()
{ uk=0;
hightime=0;//输出占空比
e1=0;//本次的温度差
e2=0;//上次的温度差
e3=0;//上上次的温度差
kp=10;
ki=5;
kd=5;
}
/************************
温度比较pid算法
************************/
void pid_ys()
{
if(rltemp&settemp)//如果实际温度小于设定温度
{if((settemp-rltemp)&10)//如果差20度以上,全速加热
&&{hightime=100;}
else
& & & & {e1=settemp-
& & & & duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))
& & & & uk=uk+
& & & & if(uk&100)
uk=100;
else if(uk&-100)
uk=-100;
if(uk&0)
{hightime=-}
else{ hightime=
}
e3=e2;
e2=e1;& & & & }
}
if(rltemp&=settemp)&&//如果大于设定温度值
{if(rltemp-settemp&0)
& & & & & & & & {hightime=0;//停止加热
}
else
{e1=rltemp-& & & && &//温度相等时控温
duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3));
uk=uk+
if(uk&100)
uk=100;
else if(uk&-100)
uk=-100;
if(uk&0)
{hightime=-}
else{ hightime=
}
e3=e2;
e2=e1;
}
}
}复制代码
16:15:52  
原来做课设的时候,在网上找的程序,我也不太会用,你看看
你度一下就能找到完整的程序
16:28:01  
你度一下就能找到完整的程序
这个比我找的都能看懂点,你做过类似的PID温度控制吗,PID参数整定之类的你怎么做的呢?然后是请问你有硬件电路图与相关程序吗?容易看懂一点。或者这个程序的完整程序?因为这里的测量温度不知道它的时间间隔应该是多少之类的问题
16:53:07  
你度一下就能找到完整的程序
程序不完整,count的定义不知道什么意思,百度没百度到
21:15:02  
程序不完整,count的定义不知道什么意思,百度没百度到
程序私聊给你了 ,能不能看懂看你的造化了。我做可控硅热水温度控制课设的时候东拼西凑的程序。
16:51:11  
程序私聊给你了 ,能不能看懂看你的造化了。我做可控硅热水温度控制课设的时候东拼西凑的程序。
造化弄人谢谢了
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司基于51单片机的电子琴设计
> 基于51单片机的电子琴设计
基于51单片机的电子琴设计
通常所输入的音阶值都先存入变量数组中,演奏时才逐一取出来播放单音。程序中的变量使用的是内部存储器RAM,范围为空间30H~7FH,因此,其程序内存规划是:RAM地址30H~70H存放音阶值,最大内存空间为64字节;RAM地址71H~7FH存放程序其他变量。程序执行后,工作指示LED闪动,表示程序开始执行。当按下键盘组中的相对按键时,压电喇叭会发出相对音阶单音,全系统共有2个8度音阶,DO~SI,HI DO~HI SI,14个音阶,所输入的单音会存入89C5l内,至多可以输入64个单音,并可以一起演奏出来,同时还有清除存储功能,可将原数据清除后再重新输入。1.2 硬件接口 本设计所用的引脚如图3所示,其中,DO~D7为双向数据总线,数据读写方式可以分为8位及4位两种。若以8位数据进行读写,则DO~D7皆有效,若以4位方式进行读写,则只用到D7~D4。RS为寄存器选择控制线,当RS为O且做写入操作时,可以写指令寄存器;若RS为l,则用于读写数据寄存器。P/W为LCD读写控制线,R/W为0,LCD执行写作,R/W为1时,则做读操作。VO为亮度调整电压输入控制引脚,输入0V时,字符显示最亮。
LCD可以实时显示目前演奏的单音码,可以实时显示所存储的单音计数。按键9是清除键,可将存储的单音计数清0;按键8是放音键,可将内存中的单音逐一演奏出来,演奏中可以按K4键来中断。本设计使用一般的LCD显示器来显示音乐演奏的消息及单音码。按下键盘组按键,喇叭就会发出相对音阶。将这些音阶存储起来然后放音,就可成为自动演奏。1.3 键盘扫描 整个按键的分配及配置原理图如图4所示。图4中为16键的控制电路,使用AT89S51端口2的8条I/O线做16个按键的键盘扫描,并由P2.0~P2.3送出扫描信号,而由P2.4~P2.7读取按键数据返回码。表l所列是4x4按键与音阶的对应表。
51单片机相关文章:
单片机相关文章:
单片机相关文章:
单片机相关文章:
倾角传感器相关文章:
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一单片机c语言设计音乐播放器节拍和音符频率怎么计算_百度知道
单片机c语言设计音乐播放器节拍和音符频率怎么计算
我有更好的答案
将51单片机的P1.2口连接到蜂鸣器的一个管脚上,另外一个管脚接地。若声音小,则添加一个三级管放大电路或直接串一个UL2003/*------------------------------------------------*/reg52.h;
//包含头文件,一般情况不需要改动?//头文件包含特殊功能寄存器的定义/*------------------------------------------------硬件端口定义------------------------------------------------*/sbit
//定义音乐输出端口unsigned char Timer0_H,Timer0_L,T//世上只有妈妈好数据表code unsigned char MUSIC[]={
5,2,1,6,2,4,
1,2,1,6,1,1,
5,2,2,5,2,1,
3,2,1,2,2,1,
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,i0xFC,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,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};/*------------------------------------------------uS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS ------------------------------------------------*/void DelayUs2x(unsigned char t){
while(--t);}/*------------------------------------------------mS延时函数,含有输入参数 unsigned char t,无返回值unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------节拍延时函数各调1/4节拍时间:调4/4
125ms调2/4
250ms调3/4
187ms------------------------------------------------*/void delay(unsigned char t){for(i=0;t;i++)DelayMs(250);TR0=0;}/*------------------------------------------------定时器0中断------------------------------------------------*/void TIM0_ISR() interrupt 1{TR0=0;
SPK=!SPK;TH0=Timer0_H;TL0=Timer0_L;TR0=1;}/*------------------------------------------------歌曲处理函数------------------------------------------------*/void Song(){TH0=Timer0_H;//赋值定时器时间,决定频率TL0=Timer0_L;TR0=1;
//打开定时器delay(Time); //延时所需要的节拍
}/*------------------------------------------------主函数------------------------------------------------*/void main(void){unsigned char k,i;TMOD=0x01; //置定时器0工作方式1EA=1;
//打开全局中断ET0=1;
//打开定时0中断while(1){i=0;
while(100){
//音乐数组长度 ,唱完从头再来
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据Timer0_H=FREQH[k];Timer0_L=FREQL[k];Time=MUSIC[i+2];
//节拍时长i=i+3;Song();}} }
采纳率:70%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机延时程序计算 的文章

 

随机推荐