‘壹’ 求大神解释下51单片机蜂鸣器的工作原理 下面是原理图 急!
工作原理非常简单:图示电路为灌电流驱动方式(低电平有效),Q5为开关三极管,平时I/O口P3.6输出高电平,因Q5为PNP型三极管,故高电平使得基极电位接近Vcc,三极管截止处于集电极回路的蜂鸣器不响,当P3.6输出低电平时Q5经由Vcc-Q5eb-R17-P3.6到地回路获得基极电流而饱和导通,蜂鸣器得电发出鸣响。
‘贰’ 凌阳单片机语音控制课程设计
我这有一篇网上下的,摘 要
本文主要介绍了目前常用的单片机(61和51单片机)对语音控制小车、红外遥控小车以及循迹小车的实现。本文说明大致方案设计和着重介绍了软件设计过程。
本设计以凌阳公司生产的61单片机为主控芯片制作了语音控制小车,实现了语音采集,语音播放以及特定人的语音识别功能。在此基础上实现了声音对小车的前进、倒车、左转、右转以及停车等状态的控制。大体上实现了语音控制小车的基本功能。
红外遥控及循迹小车是以51单片机为控制芯•片实现的。该部分由3个51系列单片机系统组成。其中,一个单片机(发送单片机)负责处理红外遥控程序,一个单片机(主控单片机)负责小车电机控制和相关信息处理,还有一个单片机(接收单片机)负责处理测温和液晶显示程序。三个单片机之间通过引线实现短距离的通信,以使它们可以相互配合,各司其职,使整个系统的实现和控制更为灵活方便。
以上系统的实现可以运用于特殊环境(人员不可达)下小车的远程控制和相关的智能操作。同时也可运用于智能监控和智能决策等相关场合,为实现智能化操作和管理提供方便。
‘叁’ 推荐一款适合51单片机的语音识别模块
推荐使用YQ5969,该模组系列可以支持1--8个咪头,该语音芯片可以根据客户具体需求提供单核--4核 32bit ARM核心的不同方案,可以支持本地和云端识别不同需求。5米内本地识别率 93%以上,云端识别率97%。从麦克风中输入词条(即语音指令),与存储在 SPI Flash 中语音相对比,如果一致,即识别正确,之后模块的串口 TX 会输出相应的指令,并且三个 IO 口(OUTA-OUTC)会输出相应的电平,同时喇叭播放语音。
‘肆’ 51单片机最小系统原理图
我是一名单片机工程师,下面的讲解你参考一下.
.
51单片机共有40只引脚.下面这个就是最小系统原理图,就是靠这四个部分,这个单片机就可以运行起来了.(看下面的数字标记,1234)
.
这个脚是存储器使用选择脚,当这个脚接”地”时,那么就是告诉单片机,选择使用外部存储器,当这个脚接”5V”时,说明单片机使用内部存储器.
如果选择外部的存储器,太浪费单片机仅有的资源,所以这一脚永远接电源5V(如上图所示),使用单片机的内部存储器.
5 如果内部存储器不够容量,最多选择更高级的容量,就可以解决容量不够的问题了,就是这么简单
.
一天入门51单片机:点我学习
.
我是岁月哥,愿你学习愉快!
‘伍’ MCS-51系列单片机包括哪几个主要部件各自的逻辑功能如何急!!!
MCS-51单片机存储器结构2008年06月01日 星期日 12:31MCS-51单片机在物理结构上有四个存储空间:
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间(MOVC)
2、256B的片内数据存储器的地址空间(MOV)
3、以及64K片外数据存储器的地址空间(MOVX)
在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。
程序内存ROM
寻址范围:0000H ~ FFFFH 容量64KB
EA = 1,寻址内部ROM;EA = 0,寻址外部ROM
地址长度:16位
作用: 存放程序及程序运行时所需的常数。
七个具有特殊含义的单元是:
0000H —— 系统复位,PC指向此处;
0003H —— 外部中断0入口
000BH —— T0溢出中断入口
0013H —— 外中断1入口
001BH —— T1溢出中断入口
0023H —— 串口中断入口
002BH —— T2溢出中断入口
内部数据存储器RAM
物理上分为两大区:00H ~ 7FH即128B内RAM 和 SFR区。
作用:作数据缓冲器用。
下图是8051单片机存储器的空间结构图
程序存储器
一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。
当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。
8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
0003H—000AH 外部中断0中断地址区。
000BH—0012H 定时/计数器0中断地址区。
0013H—001AH 外部中断1中断地址区。
001BH—0022H 定时/计数器1中断地址区。
0023H—002AH 串行中断地址区。
可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。从上面可以看出,每个中断服务程序只有8个字节单元,用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,我们是在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。
下图是ROM的地址分配图:
从上图中大家可以看到,0000H-0002H,只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的,通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域,再来安排我们的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。
数据存储器
数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
数据存储器空间(低128单元);
特殊功能寄存器空间(高128单元);
这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:
低128单元:
片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。
从上图中我们可以看到,8051单片机片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。
1、通用寄存器区(00H-1FH)
在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如下表所示。惹程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。
2、位寻址区(20H-2FH)
片内RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如下表所示:
++++++++
CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
3、用户RAM区(30H-7FH)
在片内RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了,地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制,但应说明的是,堆栈一般开辟在这个区域。
高128单元:(80H-FFH)
前面提到,在片内的RAM中,高128位是专用寄存器区,因这节比较重要,所以我们单独的安排一节课跟大家介绍。下节课我们就重点介绍51单片机片内RAM的高128位,即专用寄存器区
‘陆’ 用51单片机控制ISD1820语音芯片的原理图及c程序或汇编程序
#include<reg52.h>
code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //显示段码
void Delay(unsigned int tc) //显示延时程序
{while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
sbit TMDAT =P3^1; //DS18B20的数据输入/输出脚DQ,根据情况设定
unsigned int sdata;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数
bitfg=1; //温度正负标志
void dmsec (unsigned int count) //延时部分
{
unsigned char i;
while(count--)
{for(i=0;i<115;i++);}
}
void tmreset (void) //发送复位
{
unsigned char i;
TMDAT=0; for(i=0;i<103;i++);
TMDAT = 1; for(i=0;i<4;i++);
}
bit tmrbit (void) //读一位//
{
unsigned int i;
bit dat;
TMDAT = 0;
i++;
TMDAT = 1;
i++; i++;//微量延时 //
dat = TMDAT;
for(i=0;i<8;i++);
return (dat);
}
unsigned char tmrbyte (void) //读一个字节
{
unsigned char i,j,dat;
dat = 0;
for (i=1;i<=8;i++)
{ j = tmrbit();dat = (j << 7) | (dat >> 1); }
return (dat);
}
void tmwbyte (unsigned char dat) //写一个字节
{
unsigned char j,i;
bit testb;
for (j=1;j<=8;j++)
{ testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{ TMDAT = 0; //写0
i++; i++;
TMDAT = 1;
for(i=0;i<8;i++); }
else
{TMDAT = 0; //写0
for(i=0;i<8;i++);
TMDAT = 1;
i++; i++;}
}
}
void tmstart (void) //发送ds1820 开始转换
{tmreset();//复位
dmsec(1);//延时
tmwbyte(0xcc);//跳过序列号命令
tmwbyte(0x44);//发转换命令 44H,
}
void tmrtemp (void) //读取温度
{
unsigned char a,b;
tmreset ();//复位
dmsec (1);//延时
tmwbyte (0xcc);//跳过序列号命令
tmwbyte (0xbe);//发送读取命令
a = tmrbyte ();//读取低位温度
b = tmrbyte (); //读取高位温度
if(b>0x7f) //最高位为1时温度是负
{a=~a; b=~b+1; //补码转换,取反加一
fg=0; //读取温度为负时fg=0
}
sdata = a/16+b*16; //整数部分
xiaoshu1 = (a&0x0f)*10/16; //小数第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
}
void DS18B20PRO(void)
{tmstart();
//dmsec(5);//如果是不断地读取的话可以不延时 //
tmrtemp();//读取温度,执行完毕温度将存于TMP中 //
}
void Led()
{
if(fg==1) //温度为正时显示的数据
{ P2=P2&0xef;
P0=seg7code[sdata/10]; //输出十位数
Delay(8); P2=P2|0xf0; P2=P2&0xdf;
P0=seg7code[sdata%10]|0x80; //输出个位和小数点
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
P0=seg7code[xiaoshu1]; //输出小数点后第一位
Delay(8); P2=P2|0xf0; P2=P2&0x7f;
P0=seg7code[xiaoshu2]; //输出小数点后第二位
Delay(4); P2=P2|0xf0;
}
if(fg==0)//温度为负时显示的数据
{ P2=P2&0xef;
P0=seg7code[11]; //负号
Delay(8); P2=P2|0xf0; P2=P2&0xdf;
P0=seg7code[sdata/10]|0x80; //输出十位数
Delay(8); P2=P2|0xf0; P2=P2&0xbf;
P0=seg7code[sdata%10]; //输出个位和小数点
Delay(8); P2=P2|0xf0; P2=P2&0x7f;
P0=seg7code[xiaoshu1]; //输出小数点后第一位
Delay(4); P2=P2|0xf0;
}
}
main()
{fg=1;
while(1)
{
DS18B20PRO();
Led();
}
}
‘柒’ 51单片机如何实现语音功能
单片机需要增加语音功能,要么选择功能强大stm32之类的芯片,用内部的dac来模拟输出,要么就外挂一个语音芯片
语音芯片的作用
1、顾名思义,就在是产品上增加语音播报的功能,实现的也就是把语音播放出来
2、常见的如:停车场报金额、电梯报站、货车报“左转弯,请注意”等等,应用非常的广泛
语音芯片的种类,不过主要的分类基本也就大致三种
1、第一种,称之为OTP,就是那种SOP8封装的语音芯片,内置几段常用的语音,出厂之后就固话死了,不可修改
2、第二种,称之为flash语音芯片,通常是一个主控芯片外挂一个spiflash,主控芯片是不变的,而flash则是可以重复烧录的,但是语音往往只支持wav,所以音质会压缩的很差。代表的如WT588D
3、第三种,就是现在最优秀的KT404A芯片,他是支持MP3解码,比前面的两种在技术上是一个跨越,将MP3这种优秀的技术应用于语音芯片上,同时他强大的usb直接虚拟flash成为U盘,这样更新语音非常方便
您选的单片机有4个串口,随便拿一个出来控制KT404A就好了
KT404A外挂一个spiflash,通过usb直接更新语音