问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于C51单片机温度报警程序的问题 谁能帮我在每段程序后加汉字解释 及怎么实现温度显示及蜂鸣器报警的?

发布网友 发布时间:2023-08-07 05:54

我来回答

1个回答

热心网友 时间:2023-09-11 10:46

#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;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
保险柜密码忘了怎么打开 保险柜密码怎么重置 请各位大神为儿子起个名字,五行缺火,姓洪,谢谢! 泰拉瑞亚日食掉落什么日食掉落物品详解 泰拉瑞亚我打日食怎么不掉破英雄剑 泰拉瑞亚打什么怪物掉破英雄剑,日食都刷了2次了。 泰拉瑞亚手机版 日食会掉落一把剑 这把剑怎么用别的方法得到 可以和圣 ... 泰拉瑞亚日食有什么好东西 1.4日食事件掉落物汇总 怎么查询邮政邮寄光大信用卡到哪里了邮政号 1026909661312?_百度... 9岁孩子记性不好是什么原因 苏教版六年级上册语文第一二单元重点字词 我邮寄到海口,二点二公斤收我三十九元,合理吗? 保定631路多长时间一趟 芋头能做什么菜 芋头的做法大全 如何第二次修改(一年一次修改的方法和步骤图解) 怎么更换第二次 怎么强制修改第二次 可以修改第二次吗? 一年内第二次修改技巧 一年内怎么改第二次 一年只能改一次怎么改第二次 一年改2次的办法 1岁宝宝能吃百合粥吗 儿童可以吃百合粥吗 还有新的电子管生产吗?? 6V6G电子管能否直代5881 圣诺施乳铁蛋白粉怎么样 欧碧建乳铁蛋白怎么样 淮安考场科目一到淮安市多少公里 驾驶证被扣12分补考科目一在哪里考?淮安的 各位老司机淮安驾考科目一考试地点在哪 为什么我的电脑总死机 50分悬赏啊,《锁清秋》最后三集的内容概况!谢谢 梦见身上有字是什么意思 梦见腿上有字 梦见自己写汉字牛顿 一个青一个竖心旁是什么字 梦见自己吃了个坏西红柿 我一女同学她父亲出轨,被她发现了,后来她变*了,大家对此怎么看? 夏伯渝靠什么挣钱登山 *非选择题:请你谈谈夏伯渝的成功对我们实现梦想有怎样的启示? 请高手人工翻译英语,谢谢One day King Henry the Fourth of France hunted in a large forest. 梦见自离 愁妆照水的意思愁妆照水的意思是什么 有什么是讲植物的视频,或者电影,比如类似动物世界这种的,不过是关于植物的! 山西龙城孙家是真的吗? 山西龙城车友会是干什么的 积分赠送清零提醒是真的吗 武清百货营业时间 武清区均胜群英怎么样 老鸭窝最新网址?