⑴ 毕业设计:语音播报温度计 跪求毕业论文
你有语音播报数字温度计的仿真吗,我的论文题目是智能语音数字温度计的设计用的是at89s52,ids1420,ds302,ds18b20,rt1602看看你的能给我点帮助么,谢谢
⑵ STC89C52单片机,用C语言编温度报警器的程序
我们可以给你提供。 //初始化DS18B20
//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动
void dsInit()
{
//对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于8us
unsigned int i;
ds = 0;
i = 100; //拉低约800us, 符合协议要求的480us以上
while(i>0) i--;
ds = 1; //产生一个上升沿, 进入等待应答状态
i = 4;
while(i>0) i--;
}
void dsWait()
{
unsigned int i;
while(ds);
while(~ds); //检测到应答脉冲
i = 4;
while(i > 0) i--;
}
//向DS18B20读取一位数据
//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,
//之后DS18B20则会输出持续一段时间的一位数据
bit readBit()
{
unsigned int i;
bit b;
ds = 0;
i++; //延时约8us, 符合协议要求至少保持1us
ds = 1;
i++; i++; //延时约16us, 符合协议要求的至少延时15us以上
b = ds;
i = 8;
while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求
return b;
}
//读取一字节数据, 通过调用readBit()来实现
unsigned char readByte()
{
unsigned int i;
unsigned char j, dat;
dat = 0;
for(i=0; i<8; i++)
{
j = readBit();
//最先读出的是最低位数据
dat = (j << 7) | (dat >> 1);
}
return dat;
}
}
//向DS18B20发送温度转换命令
void sendChangeCmd()
{
dsInit(); //初始化DS18B20, 无论什么命令, 首先都要发起初始化
dsWait(); //等待DS18B20应答
delay(1); //延时1ms, 因为DS18B20会拉低DQ 60~240us作为应答信号
writeByte(0xcc); //写入跳过序列号命令字 Skip Rom
writeByte(0x44); //写入温度转换命令字 Convert T
}
//向DS18B20发送读取数据命令
void sendReadCmd()
{
dsInit();
dsWait();
delay(1);
writeByte(0xcc); //写入跳过序列号命令字 Skip Rom
writeByte(0xbe); //写入读取数据令字 Read Scratchpad
}
//获取当前温度值
int getTmpValue()
{
int value; //存放温度数值
float t;
unsigned char low, high;
sendReadCmd();
//连续读取两个字节数据
low = readByte();
high = readByte();
tmpvalue = high;
tmpvalue <<= 8;
tmpvalue |= low;
value = tmpvalue;
//使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
t = value * 0.0625;
value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
return value;
}
unsigned char const timeCount = 3; //动态扫描的时间间隔
//显示当前温度值, 精确到小数点后一位
//若先位选再段选, 由于IO口默认输出高电平, 所以当先位选会使数码管出现乱码
/*void display()
{
unsigned int tmp = abs(tempValue);
switch(sum)
{
case 1: PA8255=table[tmp % 10]; PB8255=0xfe; delay(1);
PA8255=table[ tmp % 100 / 10]; PB8255=0xfd; delay(1);
PA8255=tableWidthDot[ tmp % 1000 / 100]; PB8255=0xfb; delay(1);
PA8255=table[tmp % 10000 / 1000]; PB8255=0xf7; delay(1); PB8255=0xff;break; //显示温度
case 2: PA8255=table[0]; PB8255=0xfe; delay(1);
PA8255=tableWidthDot[high%10]; PB8255=0xfd; delay(1);
PA8255=table[high/10]; PB8255=0xfb; delay(1); PB8255=0xff; break; //显示上限温度
case 3: PA8255=table[0]; PB8255=0xfe; delay(1);
PA8255=tableWidthDot[low%10]; PB8255=0xfd; delay(1);
PA8255=table[low/10]; PB8255=0xfb; delay(1); PB8255=0xff; break; //显示下限温度
default: break;
}
} */
Into() interrupt 0
{ sum++;
if(sum==4)
sum=1;
}
uchar keyscan() //键盘扫描,调整温度上下限
{
PC8255=0xfc;
if((PC8255&0xc0)!=0xc0)
{
delay(40);
if((PC8255&0xc0)!=0xc0)
PC8255=0xfe;
if((PC8255&0xc0)==0x80)
high++;
if((PC8255&0xc0)==0x40)
high--;
PC8255=0xfd;
if((PC8255&0xc0)==0x80)
low++;
if((PC8255&0xc0)==0x40)
low--;
}
}
void main()
{
unsigned int tmp ;
COM8255=0x88;
IT0=1; //外部中断0,采用外部中断0进行实时温度,上限温度和下限温度之间的显示切换
EX0=1;
EA=1;
P1_0=0x1;
sum=1;
high=22; //初始温度上下限设定
low=10;
while(1)
{
//启动温度转换
sendChangeCmd();
tempValue = getTmpValue();
keyscan();// 读取键值
tmp = abs(tempValue); //读取温度
switch(sum)
{
case 1: PA8255=table[tmp % 10]; PB8255=0xfe; delay(1);
PA8255=table[ tmp % 100 / 10]; PB8255=0xfd; delay(1);
PA8255=tableWidthDot[ tmp % 1000 / 100]; PB8255=0xfb; delay(1);
PA8255=table[tmp % 10000 / 1000]; PB8255=0xf7; delay(1); PB8255=0xff;break; //显示温度
case 2: PA8255=table[0]; PB8255=0xfe; delay(1);
PA8255=tableWidthDot[high%10]; PB8255=0xfd; delay(1);
PA8255=table[high/10]; PB8255=0xfb; delay(1); PB8255=0xff; break; //显示上限温度
case 3: PA8255=table[0]; PB8255=0xfe; delay(1);
PA8255=tableWidthDot[low%10]; PB8255=0xfd; delay(1);
PA8255=table[low/10]; PB8255=0xfb; delay(1); PB8255=0xff; break; //显示下限温度
default: break;
}
if(tmp>(high*100)|tmp<(low*100) ) //&&tempValue>low) //超过温度设定范围,系统自动报警
{
P1_0=0;
}
else
P1_0=1; }
}
⑶ 单片机温度报警
具体指标。如,单片机选型要求,温度范围,测量什么的温度,测量温度精度,温度最短转换时间等等。什么多没有讲,没法回答。别人不想回复你的问题是不想拉低采纳率。。。。。最简单的温度报警,STC89S52+DS18B20+有源蜂鸣器+独立按键。测量固体,室温等,0~80度,0.1度精度,可以设置报警范围,持续报警时间等等。
⑷ 求单片机控制温度传感器,LCD显示温度值,温度达到30度时,蜂鸣器报警的报警程序
这个有现成的,楼主可以省很多力气了,请在网上下一个proteusv7.8,里边程序,仿真电路都有。
楼主把两个程序中和一下就可以了。
改起来也不难,自己弄哦。
我受点累,楼主可以这样改:
1.1602引脚挪到P2口,及P3口,程序也要改哈,编译运行,这个非常简单。
2.再把1602剪下,粘贴到18b20那张图上;1602的程序也粘贴到18b20程序上,改掉标号重复的地方,改掉初始化程序。将18b20的结果显示在LCD上,如有必要,删除7段数码管程序。
⑸ 单片机控制语音芯片播报数字
NVC系列八脚语音芯片是广州九芯电子科技最新推出的一款适合工厂量产型的工业级OTP语音芯片,它可外接DAC电路,具有音量调节功能、音质高,控制方便,电路简单,多种实用的封装形式等诸多显着优点,可以任意控制多段语音触发,是市面上唯一8脚芯片支持220段声音的语音芯片。
⑹ 求高人指点关于单片机的显示 语音 问题
哈!现公交车或很多方面全用的类同这玩意,全都是单片机做成的,这回答了单片机行不行的事了.看你本不熟悉单片机的,最好选用现成的模式块吧,只用单片机根据测量结去选语音地址(条),这共要用相应的测温模块,液晶数字显示模块,可预录的语音模块,你最后只用单片机做很少一点控制的,这样对你这对单片机入门是大有好处的并才可在时间上用的不长.
⑺ 关于C51单片机温度报警程序的问题 谁能帮我在每段程序后加汉字解释 及怎么实现温度显示及蜂鸣器报警的
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0 ;
#define INT8U unsigned char //宏定义
#define INT16U unsigned int
sbit smg1=P2^0;
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit Beep=P1^5; //蜂鸣器引脚定义
sbit led=P1^6;
sbit led1=P1^7; //设置灯光报警键
sbit DQ=P2^4; //ds18b20端口
void init_ds18b20(void); //ds18b20初始化子程序
void delay(uchar); //ds18b20工作延时子程序
uchar readbyte(void);//向ds18b20读一个字节数据
/*******************************************************************************/
void writebyte(uchar);//向ds18b20写一个字节数据
uint retemp();//计数变量
uchar key;
uchar a,b,c,d; //计数变量
uchar x[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint retemp()
{
uint a,b,t;
init_ds18b20(); //初始化ds18b20
writebyte(0xcc); // 跳过读序列号的操作
writebyte(0x44); // 启动温度转换
init_ds18b20();
writebyte(0xcc); //跳过读序号列号的操作
writebyte(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=readbyte(); //读出温度低位LSB
b=readbyte(); //读出温度高位MSB
t=b; //将温度高八位送t
t<<=8; //乘以256移到高八位
t=t|a; //高低八位组合成温度值
if(t<0x8000) //如果温度为正计算正温度值
{
key=0;
t=t*0.625;
}
else //否则温度为负,取反
{
key=1;
t=(~t+1)*0.625;
}
return(t); //返回温度值
}
void main()
{
uint i,t;
EA = 1; //开总中断
TMOD = 0x01; //定时器0工作方式1
TR0=1;
delay(100);
while(1)
{
t=retemp(); 读温度值
a=x[t/1000]; //温度千位数
b=x[t/100%10]; //温度百位数
c=x[t/10%10]-0x80; //温度十位数
d=x[t%10]; //温度个位数
if(key==1) //如果key=1
a=0xbf; //a为“负号"
if((key==0)&&(t>320)) //如果key=0 且t大于320
{
led1=0; //点亮led1
ET0=1; //开启定时器0中断
}
else if(t<290) //如果温度小于290
{
led=0; //点亮led
ET0=1; //开启定时器0中断
}
else //否则
{
led1=1; //关闭led1
led=1; //关闭led
ET0=0; //关闭定时器0中断
}
for(i=0;i<50;i++) //循环50次
{smg1=1;P0=a;delay(100);smg1=0; //显示千位
smg2=1;P0=b;delay(100);smg2=0; //显示百位
smg3=1;P0=c;delay(100);smg3=0; //显示十位
smg4=1;P0=d;delay(100);smg4=0; //显示个位
}
}
}
/*ds18b20工作延时子程序*/
void delay (uchar i)
{
do
{_nop_();
_nop_();
_nop_();
i--;
}
while(i);}
/*ds18b20初始化子程序*/
void init_ds18b20()
{
uchar x=0;
DQ=0; //单片机将DQ拉低
delay (120);
DQ=1; //拉高总线
delay(16);
delay(80);
}
/*读一个字节*/
uchar readbyte ()
{uchar i=0,date=0;
for(i=8;i>0;i--)
{
DQ=0; // 给脉冲信号
delay(1);
DQ=1; // 给脉冲信号
date>>=1;
if(DQ)date|=0x80;
delay(11);
}
return(date);
}
/*写一个字节*/
void writebyte(uchar dat)
{uchar i=0;
for(i=8;i>0;i--) //写8位数
{
DQ=0;
DQ=dat&0x01; //写dat的D0位
delay(12);
DQ=1;
dat>>=1;
delay(5);
}
}
/**************************************************
*函数名:中断函数
*描 述:产生矩形脉冲使蜂鸣器发声
**************************************************/
void BeepTimer0(void) interrupt 1
{
Beep = ~Beep;
TH0 = 65335 / 256; //定时器赋初值
TL0 = 65335 % 256;
}
⑻ 关于单片机的毕业设计
单片机的毕业设计,不同的设计要求,难度不一样。
你的课题是温度测量与语音播报系统。这个课题的设计思路:
(1)温度测量与语音播报系统的电路设计———— 主要需要完成单片机最小系统电路+LCD液晶显示电路+温度传感器采集电路+语音播报电路+报警电路
(2)温度测量与语音播报系统的软件程序:———— 主要需要完成LCD液晶显示电路的驱动程序+温度传感器采集电路的驱动程序+语音播报电路的驱动程序+报警电路的驱动程序
(3)温度测量与语音播报系统的实物调试———— 购买有关温度测量与语音播报系统的电路设计所需要的电子器件,结合软件程序来调试有关的功能。
头像账号也是腾讯账号。有问题可以添加@
生活不止有眼前的苟且,还有诗和远方
⑼ 51单片机温度报警器C语言编程
20分就想给个程序给你啊,
我虽然做过,但我觉得你还是自己努力把
⑽ 基于51单片机,DS1302,1602实现万年历(年月日时分秒)及闹钟功能的C程序,不要显示农历和温度,谢谢!!
【八】电子表、万年历系列
[1]单片机公交车环境监测及时间显示系统
功能描述:
1、按键调时间
2、带备用电池(断电继续走时)
3、监测噪声和温湿度并实时显示
4、超过报警值蜂鸣器会响
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMTQ3OTMxMDUwMA==.html
[2]单片机语音报时电子表
功能描述:
1、按键调试设置闹钟
2、带备用电池(断电继续走时)
3、整点语音报时
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMTQ3OTMwMjM0OA==.html
[3]单片机红外遥控电子表语音报时语音播报温湿度
功能描述:
1、红外遥控调时间设定闹钟
2、带备用电池(断电继续走时)
3、整点语音报时语音播报温湿度
4、按键遥控语音报时语音播报温湿度
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMTQ3OTMxMTUyOA==.html
[4]单片机红外遥控电子表语音报时格林威治时间双显示
功能描述:
1、红外遥控调时间设定闹钟
2、带备用电池(断电继续走时)
3、整点语音报时语音播报温湿度
4、按键遥控语音报时语音播报温湿度
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMTQ3OTMxMTUyOA==.html
[5]单片机多功能万年历电子表系统节日提醒温湿度显示
功能描述:
1、按键调时间,设置闹钟
2、带备用电池(断电继续走时)
3、阳历、农历节日提醒;可显示上午、中午、晚上、午夜、深夜等时间段
4、温湿度实时显示(可替换其他传感器数据显示)
5、功能扩展:语音播报万年历、温湿度等。(此项功能为扩展功能,需要需补差价)
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMTU0MjI4OTExNg==.html
【二十】GPS授时定位系统系列
[1]GPS自动授时系统 语音报时/播报温湿度
实现功能:
1.可设置授时模式为自动授时和手动更新
2.可脱离GPS数据利用本地时钟芯片准确走时
3.可设置静音模式、整点报时和自动语音播报温湿度及其混合模式等四种语音工作模式
4.可以切换显示本地时间和温湿度数据和GPS卫星时间数据和定位数据
5.经过分析GPS数据,利用算法缩短了解析时间在秒级时间内就能获取到GPS时间数据(正常情况下,完成定位需要几分钟以上)
6.(亮点)利用算法自动计算星期参数和农历参数,程序内部算法输入任何阳历日期数据即可得到准确的星期数据和农历数据
7.利用12864串口工作模式,节省了8个IO
8.可根据需求进行功能定制
☆已作出的实物优酷视频演示地址:
http://v.youku.com/v_show/id_XMjUzMzcyNTkyOA==.html