数码温度器每隔20硬盘每隔5秒响一下下是怎么会事

查看: 132|回复: 2
为什么数码管一直显示固定温度
#include&reg52.h&
#include&stdio.h&
#define& & & & uchar& & & & unsigned& & & & char
#define& & & & uint& & & & unsigned& & & & int
sbit& & & & dq=P1^3;
sbit& & & & wela=P2^7;
sbit& & & & dula=P2^6;
//定义整型的温度数据
//float& & & & f_//定义浮点型型的温度数据
uchar& & & & code& & & & table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};& & & & & & & & & & & &
uchar& & & & shi,
uchar& & & &
void& & & & delay(uint& & & & k)
& & & & uint& & & & x,y;
& & & & for(x=k;x&0;x--)
& & & & & & & & for(y=110;y&0;y--);
void& & & & init_ds()//ds18b20复位,初始化函数
& & & & & & & &
& & & & & & & & uchar& & & &
& & & & & & & & uchar& & & &
& & & & & & & & dq=1;
& & & & & & & & k=2;
& & & & & & & & while(k&0)k--;
& & & & & & & & dq=0;//将数据线拉低
& & & & & & & & k=80;//延时范围在480~960us之间
& & & & & & & & while(k&0)k--;& & & &
& & & & & & & & dq=1;//再次拉高
& & & & & & & & k=2; //15~60us后接收60~240us的存在脉冲
& & & & & & & & while(k&0)k--;
& & & & & & & & dat=//如果dq=0则说明有期间响应即温度传感器是好的,dq=1则说明温度传感器是坏的
& & & & & & & & k=1;//稍作延时返回
& & & & & & & & while(k&0)k--;& & & &
uchar& & & & readonechar(void)//读一个字节
& & & & uchar& & & &
& & & & uchar& & & &
& & & & uchar& & & &
& & & & dq=1;
& & & & k=2;
& & & & while(k&0)k--;
& & & & for(j=8;j&0;j--)//一个字节分八位读取
& & & & & & & & dq=0;//拉低dq总线开始读取时序
& & & & & & & & dat&&=1;//右移一位后的值
& & & & & & & & dq=1;//拉高,为单片机检测ds18b20的输出电平做准备
& & & & & & & & k=2; //使主机在15us中采样
& & & & & & & & while(k&0)k--;
& & & & & & & & if(dq)//读取一位数据 即采样
& & & & & & & & dat=dat|0x80;//如果读到的数据是1,则将1存入dat,如果是0则保持原数据不变
& & & & & & & & k=1; //两个读时序之前必须有大于1us的恢复期
& & & & & & & & while(k&0)k--;
& & & & return& & & & (dat);& & & & & & & & & & & &
void& & & & & & & & writeonechar(uchar& & & & dat)//写一个字节
& & & & uchar& & & &
& & & & uchar& & & &
& & & & for(j=8;j&0;j--)//一个字节分八位读取
& & & & & & & &
& & & & & & & & dq=0;//将数据从高拉低时即启动写时序
& & & & & & & & dq=dat&0x01;//判定1或0
& & & & & & & & k=8;//写0时序时,单总线要被拉低至少60us
& & & & & & & & while(k&0)k--;
& & & & & & & & dq=1;
& & & & & & & & dat&&=1;//将dat数据中的各二进制位数据右移1位
& & & & k=2;
& & & & while(k&0)k--;
uchar& & & & read_temperature(void)//读取温度
& & & & uchar& & & &
& & & & uchar& & & & a=0;
& & & & uchar& & & & b=0;
& & & & uchar& & & & t=0;
& & & & uchar& & & &
& & & & init_ds();
& & & & writeonechar(0xcc);//跳过读序号列号的操作
& & & & writeonechar(0x44);//启动温度转换
& & & & k=10;
& & & & while(k&0)k--;
& & & & init_ds();
& & & & writeonechar(0xcc);//跳过读序号列号的操作
& & & & writeonechar(0xbe);//读取温度寄存器(共可读九个寄存器)前两个分别是温度的高位和低位
& & & & k=10;
& & & & while(k&0)k--;& & & &
& & & & a=readonechar();//读取温度值低位
& & & & b=readonechar();//读取温度值高位
& & & & t=b;
& & & & t&&=4;
& & & & t|=(a&0xf0)&&4;
& & & & tt=t*0.0625;
& & & & t=tt*10+0.5;
& & & & return& & & &//将数据都放b里面
void& & & & display_ds(void)
& & & & dula=1;
& & & & P0=table[temp/10];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0
& & & & wela=0;
& & & & delay(5);
& & & & dula=1;
& & & & P0=table[temp%10];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0
& & & & wela=0;
& & & & delay(5);& & & & & & & &
void& & & & init()
& & & & TMOD|=0x20;// 初始化定时器1为8位自动重装模式
& && &&&SCON=0x50;// 配置串口工作模式,使能了串口接收中断
& && &&&TH1=0// 配置波特率
& && &&&TL1=0
& && &&&TR1=1;// 启动定时器1
& && &&&ES=1;// 打开串口中断允许
& && &&&TI=1;
void& & & & main()
& & & & init();
& & & & while(1)
& & & & & & & & temp=read_temperature();
& & & & & & & & display_ds();
& & & & }& & & &
RE: 为什么数码管一直显示固定温度
 看看实际晶振值和设定值是否正确,延时时间是否合适?
看看实际晶振值和设定值是否正确,延时时间是否合适?
谢谢,最后调出来了,好像是温度数据类型弄错的原因
Powered by冰箱一会噹的响一下,一会噹的响一下咋回事
全部答案(共2个回答)
你问的很好,现在有好多用户都在问我家的冰箱怎么格段时间就会突然响一下?你们自己可以去观察下因为冰箱里有个温控器冰箱工作20多分钟后达到了温控器的停机温点冰箱停机...
冰箱内部,可能是制冷管道中的制冷剂流动声,也有可能是化霜时的声音。压缩机室那边,应该是冰箱在启动或停机时,压缩机的声音,这个没有什么问题。
灯光的线路极为简单。与制冷系统没有什么关键性牵连。你检查下:压缩机有启动时的启动音没有?压缩机有运行声没有?选择开关调整一下,看看是不是开关问题。如果有启动音,...
有可能是漏电现象,也可能是压缩机的问题。先确认是从哪里发出的声响,再检查是否有漏电。
电冰箱工作时 由于制冷温度下降
冰箱外壳和内部 会因温度变化 有轻微响声 就像电视机关机后 外壳冷缩是产生声音一样
只是开机工作时有声音你就不会听到外壳温度...
答: 请问莫泰168(扬州瘦西湖汶河路店)有没有24小时热水?
答: 你朋友是宫颈息肉.推荐一文,供你参考:什么是子宫颈息肉子宫颈息肉是慢性宫颈炎表现的一种,在已婚妇女中比较多见。  子宫颈是子宫下端的部分,其内腔呈圆筒形或梭形,...
答: li660912同学:您好!您有这样的想法非常好,说明您知道父母为了您成长的辛苦和劳累。呵呵,有这样的心理,我想您一定会在学习上下苦功夫,以优异的成绩来回报父母...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415时钟+温度计的数码管显示
> 时钟+温度计的数码管显示
时钟+温度计的数码管显示
功能:显示,温度显示,可调时间,按键发声。说明:1 功能选择键:按下功能选择键,时间停止,秒钟指示灯长灭,选择千位,百位,十位,个位,相对应的每位数码管的小数点亮。2 “加”:按一下“加”按键,对应的数字会加一。3 “减”:按一下“减”按键,对应的数字会减一。4 继续按功能选择键到第五次,退出时间设置,秒钟指示灯闪烁,继续运行。5 初始化时间为早上6点30分,时间为24小时制。6 其他功能:添加指示灯。正常运行时,绿色指示灯亮,当进入调整时间时,红色指示灯亮。限于篇幅以下是部分源代码,完整版本请到/f/shiz5.rar去下载#include"reg51.h"#define uchar unsigned char#define uint unsigned int/****温度 端口定义******/sbit wx5=P2^5;sbit wx6=P2^6;sbit wx7=P2^7;sbit DQ=P2^0;uint temp, temp1,temp2,uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};/******延时程序*******/void delay1(unsigned int m){unsigned int i,j;for(i=m;i&0;i--)for(j=110;j&0;j--);}void delay(unsigned int m){while(m--);}void Init_DS18B20() {unsigned char x=0;DQ = 1;
//DQ复位 ds18b20通信端口delay(8); //稍做延时DQ = 0;
//单片机将DQ拉低delay(80); //精确延时 大于 480usDQ = 1;
//拉高总线
delay(4);x=DQ;
//稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}/***********ds18b20读一个字节**************/uchar ReadOneChar(){unsigned char i=0;unsigned char dat = 0;for (i=8;i&0;i--){DQ = 0; // 高电平拉成低电平时读周期开始dat&&=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;
//delay(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i&0; i--){DQ = 0;
//从高电平拉至低电平时,写周期的开始DQ = dat0x01;
//数据的最低位先写入delay(5);
//60us到120us延时DQ = 1;
//从最低位到最高位传入}}/**************读取ds18b20当前温度************/void ReadTemperature(){unsigned char a=0;unsigned
b=0;unsigned
t=0;Init_DS18B20();WriteOneChar(0xCC);
// 跳过读序号列号的操作WriteOneChar(0x44);
// 启动温度转换delay(10);
// this message is wery importantInit_DS18B20();WriteOneChar(0xCC);
//跳过读序号列号的操作WriteOneChar(0xBE);
//读取温度寄存器等(共可读9个寄存器) 前两个就是温度delay(10);a=ReadOneChar();
//读取温度值低位 b=ReadOneChar();
//读取温度值高位
//高8位中后三位数的值temp1+=(a0xf0)&&4;
//低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值temp2=a0x0f;
//小数的值temp=((b*256+a)&&4);
//当前采集温度值除16得 实际温度值
xs=temp2*0.0625*10;
//小数位,若为0.5则算为5来显示
xiaoshu}///////////////////////////////////////////////////////////////////////////////***********温度显示********************/void wenduxianshi()
//温度显示{ wx5=1;P0=table[temp/10];delay1(3);wx5=0;wx6=1;P0=table[temp%10];delay1(3);wx6=0;wx7=1;P0=table[12];delay1(3);wx7=0;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////**** 端口定义******/sbit wx1=P2^1;sbit wx2=P2^2;sbit wx3=P2^3;sbit wx4=P2^4;uchar
qian,bai,shi,ge,miao1,miao2,sbit LED1=P3^3;/////////////////////////////////////////////***************按键调时程序***************/sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^2;sbit LVSE
//绿色运行灯sbit HONGSE =P3^5;
//红色停止灯sbit HUANGSE=P3^6;
//黄色调闹钟灯sbit BEEP=P3^7;
//// 定义蜂鸣器口uchar K1num,K2///////////////////////////////////////////**********报警声音**************/bi(uint t){int c,n;for(c=0;c++){for(n=0;n50;n++);BEEP=~BEEP;
//按位取反BEEP}return(t);}////////////////////////////////////////////////********定时器初始化*************/void init(){TMOD=0x01; //定义定时器0,工作方式1 TH0=()/256;
//高8位 TL0=()%256;
//低8位 EA=1;
//开全局中断 ET0=1;
//打开定时器 }///////////////////////////////////////////////
/***********定时器中断函数************/void timer0() interrupt 1{TH0=50;TL0=50;count++;if( count==20 ) { count=0; LED1=~LED1;
miao1++;if( miao1==10 ) { miao1=0;
miao2++; }if( miao2== 6 ) { miao2=0;
ge++; }if(
ge==10 ) {
shi++; }if(
shi== 6 ) {
bai++; }if(
bai==10 ) {
qian++; }if(
qian== 3 ) {
}if(qian==2bai==4){qian=0;bai=0;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////**********时间显示***************/
void shijianxianshi()
//时间显示{if( K1num==0 )
//复位{TR0=1;LVSE=0; HONGSE=1;HUANGSE=1;wx1=1;P0=table[qian];delay1(3);wx1=0;wx2=1;P0=table[bai];delay1(3);wx2=0;wx3=1;P0=table[shi];delay1(3);wx3=0;wx4=1;P0=table[ge];delay1(3);wx4=0;}/**************************************/if( K1num==1 )
//选择千位{TR0=0;LED1=1;LVSE=1; HONGSE=0; HUANGSE=1;wx1=1;P0=table[qian]+0x80;delay1(3);wx1=0;wx2=1;P0=table[bai];delay1(3);wx2=0;wx3=1;P0=table[shi];delay1(3);wx3=0;wx4=1;P0=table[ge];delay1(3);wx4=0;}/**************************************/if( K1num==2 )
//选择百位{wx1=1;P0=table[qian];delay1(3);wx1=0;wx2=1;P0=table[bai]+0x80;delay1(3);wx2=0;wx3=1;P0=table[shi];delay1(3);wx3=0;wx4=1;P0=table[ge];delay1(3);wx4=0;}/**************************************/if( K1num==3 )
//选择十位{wx1=1;P0=table[qian];delay1(3);wx1=0;wx2=1;P0=table[bai];delay1(3);wx2=0;wx3=1;P0=table[shi]+0x80;delay1(3);wx3=0;wx4=1;P0=table[ge];delay1(3);wx4=0;}/**************************************/if( K1num==4 )
//选择个位{wx1=1;P0=table[qian];delay1(3);wx1=0;wx2=1;P0=table[bai];delay1(3);wx2=0;wx3=1;P0=table[shi];delay1(3);wx3=0;wx4=1;P0=table[ge]+0x80;delay1(3);wx4=0;}}///////////////////////////////////////////////////////////// ///////////////////按键功能设置////////////////////////////////////// ///////////////////////////////////////////////////////////////// void keycan(){///////////////////时钟功能设置/////////////////////////**********调时间功能选择**********/if( K1==0
{ K1num++; delay(5); if( K1==0 ){
while(!K1);
bi(200);if(K1num==5 )
{ K1num=0;TR0=1;}}}
////////////////////////////////////////////////////*********功能加*********/if( K1num!=0 ) {if( K2==0
) { delay(5);if( K2==0
) { while(!K2);bi(200);if( K1num==1 ) { qian++; if(qian==3 ) qian=0;
if( K1num==2 ) {
bai++; if( bai==10)
}if( K1num==3 ) {
shi++; if( shi==6 )
}if( K1num==4 ) {
///////////////////////////////////////////////////////////**********功能减************/if( K1num!=0 ) {if( K3==0
) { delay(5);if( K3==0
) { while(!K3);bi(200);if( K1num==1 ) { qian--; if(qian==-1) qian=2;
if( K1num==2 ) {
bai--; if( bai==-1)
}if( K1num==3 ) {
shi--; if( shi==-1)
}if( K1num==4 ) {
}}}}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////***********主函数********************/////////////////////////////////////////////////////////////void main(){init();qian=0;bai=6;shi=3;ge=0;miao2=0;miao1=0;while(1){
ReadTemperature();wenduxianshi();keycan();shijianxianshi();}}
c++相关文章:
蜂鸣器相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一

我要回帖

更多关于 每隔30秒响一次app 的文章

 

随机推荐