① 这是一个利用89C52RC单片机蜂鸣器演奏生日快乐歌。请高手帮我解释一下:整体思想,再在每一步添加注释。
#include<reg51.h>
sbit speaker=P1^6;
unsigned char timer0h,timer0l,time;
//生日歌,这三个字节一组,分别定义:旋律(1234567)、高低音(低音、中音、高音)、节奏(长度)
code unsigned char sszymmh[]={5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,
5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,
4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4};
// 音阶频率表 高八位,也就是发音对应频率的高八位
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 //定时器0中断服务程序,控制声音打频率
{ TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song() //启动演奏当前频率
{ TH0=timer0h; //当前频率的高八位
TL0=timer0l; //当前频率的低八位
TR0=1; //启动定时器0
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<75)
{ //音乐数组长度 ,唱完从头再来
k=sszymmh[i]+7*sszymmh[i+1]-1; //取当前节奏的频率地址
timer0h=FREQH[k]; //取当前频率高八位
timer0l=FREQL[k]; //取当前频率低八位
time=sszymmh[i+2]; //取当前频率的时长
i=i+3; //三个字节一组
song(); //演奏当前频率,共75/3,25个曲调。
}
}
}
//程序的设计思路就是将一首乐曲分成三个变量来控制,分别是曲调、所在音区、时长。而控制曲调的因素也就是频率又分成高八位和第八位两个表,每演奏一个曲调,就根据该曲调的三个变量来取值。
② 单片机数码管的段旋和位旋是什么
段选盯陆是指用单片机哪个IO口输出数据送显,
位选是指洞则宏用哪个IO输出控制信号来选择由哪个数码管来显示。
比如想用P0口输出要显示纳册的数据,P2口输出选择信息,P0就是段选,P2就是位选。
建议知道原理就行了,没必要执着这些名词。
③ 单片机开发中,如何获取一个旋扭的转动角度
方案1:旋钮上装一个高精度的电位器,电位器两边的引脚接上电源,每次开机单片机通过AD值读取电位器中间脚的电压值,根据电压值来判断角度。优点:成本低。缺点:电位器的精度不高,角度也达不到340度,你要定做电位器。
方案2:旋钮上装一个绝对角度传感器。缺点:不知道有没有分辨率这么高的传感器。
④ 单片机音乐程序中DB 0C0H, 0F9H, 0A4H中的0C0H, 0F9H, 0A4H怎样弄出来的,是什么意思啊
你说的DB 0C0H, 0F9H, 0A4H是LED显示控制的段码,不是音乐旋律和节拍控制码,旋律的控制码是根据音高所对应的频率结合定时器计算出来的。节拍也是根据延时长短计算出来的。
⑤ 单片机中LED显示电路用三极管驱动电路怎么连接啊四个数码管。
//单片机中LED显示电路用三极管驱动电路四个数码管。可以参考一下
#include<reg52.h>
sbit led0=P3^2;
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit ledd=P3^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char g,s,b,d,a;
unsigned int num;
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
P1=table[d];
led3=0;
delay(5);
led3=1;
P1=table[b];
led2=0;
delay(5);
led2=1;
P1=table[s];
led1=0;
delay(5);
led1=1;
P1=table[g];
led0=0;
delay(5);
led0=1;
}
void ont()
{
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
ont();
while(1)
{
if(a==20)
{
a=0;
ledd=~ledd;
num++;
d=num/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
display();
if(num==10000)
{
num=0;
}
} }
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}
⑥ 求单片机音乐数组,这样的
数组th、tl是根据音频定义的定时器初值。数组tune是音乐旋律。数组beat是音乐的节拍。
⑦ 单片机开发中,如何获取一个旋扭的转动角度
旋扭带动蔽滚一个滑动电阻,使电伏租阻上的电压随角度变化,用单片缺并兆机A/D做电压采样。
不明白再问我
⑧ 单片机控制直流变交流(220v 50hz)的程序,哪位大哥帮我写一下,感激啊
逆变器!单片机的工作电压只能在5V左右。单片机只能实现输拿携侍出50HZ的方波信号,用这个信号去控制场效应管的导通和关闭。利用场效应管控制变压器把直流变成220V的交流电压。50HZ是指在一秒内变化50次。单片机12MHZ的晶振一微米震荡12次,通过延时函数让单片机在一秒内输出高低电平50次,就可以了消吵。用单片机的内部时钟计数隐数器和中断可以得到比较精确的方波信号。其实所有的逆变器输出的都不是50赫兹的正旋波。我个人还是比较倾向于直接使用直流电,因为逆变损耗的能量太多。
⑨ 51单片机555定时器原理
555定时器的电路结构 555定时器的电路结构如图所示。C1和C2为两个电压比较器,其功能是如果“+”输入端电压v+大于“-”输入端电压v-,即v+>v-时,则比较器输出vc为高电平(vc=1),反之输出vc为低电平(vc=0)。比较器C1参考电压v1+(VREF1)=2/3Vcc,比较器C2的参考电压v2-(VREF2)=1/3Vcc。如果v1+(VREF1)的外接端vco接固定电压Vco,则v1+(VREF1)=vco,v2-(VREF2)=1/2Vco。与非门G1和G2构成基本触发器。其中输入/R为置0端,低电平有效。比较器C1和比较器C2的输出vc1、vc2为触发信号。三极管TD是集电极开路输出三极管,为外接提供充、放电回路,称为泄放三极管。反相器G3为输出缓冲反相器,起整形和提高带负载能力的作用。
555定时器的功能表
将高触发端TH和低触发端TR连接在一起,上述的555功能表变为如下功能表。
555定时器的应用 由于555定时器使用灵活、方便,所以在波形变换与产生、测量与控制、家用电器、电子玩具等领域得到了广泛的应用。
(1)构成施密特触发器,用于TTL系统的接口,整形电路或脉冲鉴幅等;
(2)构成多谐振荡器,组成信号产生电路;
(3)构成单稳态触发器,用于定时延时整形及一些定时开关中。
555定时器的种类及性能 555定时器产品有TTL型和CMOS型两类。TTL型产品型号的最后三位都是555,CMOS型产品的最后四位都是7555,它们的逻辑功能和外部引线排列完全相同。
双极性与CMOS型555定时器性能比较:两者有相同的引脚排列,互相兼容,功能相同,可以互换,但应注意使用上的差异。
用555定时器构成施密特触发器 电路结构与工作原理:
当第5脚接直流电压VI时,则VT+=VI,VT-=1/2VI。因此改变电压控制端CO(5脚)的电压可改变回差电压。一般电压控制端CO越高,ΔU越大,抗干扰能力越强,但灵敏度相应降低。
不使用5脚时,可悬空;也可接0.01uF的电容,旁路高频干扰。
形成回差原因:
由于C1与C2的参考电压不同,因而基本RS-FF的置0信号和置1信号必然发生在输入信号vi的不同电平。从而形成了电压传输回差。
用555定时器构成单稳态触发器 单稳态触发器只有一个稳态状态。在未加触发信号之前,触发器处于稳定状态,经触发后,触发器由稳定状态翻转为暂稳状态,暂稳状态保持一段时间后,又会自动翻转回原来的稳定状态。单稳态触发器一般用于延时和脉冲整形电路。
单稳态触发器电路的构成形式很多。图(a)所示为用555定时器构成的单稳态触发器,R、C为外接元件,触发脉冲u1由2端输入。5端不用时一般通过0.01uF电容接地,以防干扰。下面对照图(b)进行分析。
(1) 稳态
接通T导通,使电容C放电。此后uc<,若不加触发信号,即u1>,则u0保持0状态。电路将一直处于这一稳定状态。
(2) 暂稳态
在t=t1瞬间,2端输入一个负脉冲,即u1<,基本RS触发器置1,输出为高电平,并使晶体管T截止,电路进入暂稳态。此后,电源又经R向C充电,充电时间常数=RC,电容的电压 按指数规律上升。
在t=t2时刻,触发负脉冲消失(u1>),若uc<,则/RD=1,/SD=1,基本RS触发器保持原状态,u0仍为高电平。
在t=t3时刻,当uc上升略高于时,/RD=0,/SD=1,基本RS触发器复位,输出u0=0,回到初始稳态。同时,晶体管T导通,电容C通过T迅速放电直至uc为0。这时/RD=1,/SD=1,电路为下次翻转做好了准备。
输出脉冲宽度tp为暂稳态的持续时间,即电容C的电压从0充至所需的时间。由得
由上式可知:
① 改变R、C的值,可改变输出脉冲宽度,从而可以用于定时控制。
② 在R、C的值一定时,输出脉冲的幅度和宽度是一定的,利用这一特性可对边沿不陡、幅度不齐的波形进行整形。 大叔为您解答,希望您满意!!
⑩ 单片机控制可控硅调速电路
可控硅调速电路输入的是直流电,通过一个滤波电容稳定电压。然后分成俩两路,一路是电调的BEC使用,BEC是给接收机与电调自身单片机供电使用的,输出至接收机的电源线就是信号线上的红线和黑线,另一路是介入MOS管使用,在这里,电调上电,单片机开始启动,驱动MOS管震动,使电机发出滴滴滴的声音。启动后待命,有些电调带有油门校准功能,在进入待命前会监测油门位置是在高还是低还是中间,高的话进入电调行程校准,中间的话开始发出报警信号,电机会滴滴的响,低的话会进入正常工作状态。一切准备就绪后,电调内的单片机会根据PWM信号线上的信号决定输出电压的大小和频率的高低以及驱动方向和进角多少来驱动电机的转速,转向。这就是无刷电调原理。在驱动电机运转的时候,电调内共有组MOS管工作,每组个极,一个控制正极输出,一个控制负极输出,当正极输出时,负极不输出,负极输出时,正极不输出,这样子也就形成了交流电,同样,三组都是这样工作的,它们的频率是HZ。讲到这,无刷电调也相当于一个工厂里电机上使用的变频器或者调速器。电调的输入是直流,通常由锂电池来供电。输出是交流,可以直接驱动电机。另外航模无刷电子调速器还有三根信号输入线,输入PWM信号,用于控制电机的转速。对于航模,尤其是四轴飞行器,由于其特殊性,需要专门的航模电调。那么为什么在四轴飞行器上需要专门的电调呢,其有什么特别的地方。四轴飞行器有四个桨,两两相对呈十字交叉结构。在桨的转向上分正转和反转,这样可抵消单个桨叶旋转引起的自旋问题。每个桨的直径很小,四个桨转动时的离心力是分散的。不像直机的桨,只有一个能产生集中的离心力形成陀螺性质的惯性离心力,保持机身不容易很快的侧翻掉。所以通常用到的舵机控制信号更新频率很低。