久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2697|回復: 3
收起左側

我在做環境溫度監測系統,可是用下面這個程序4位數碼管老是顯示8000沒有變化 怎么辦

[復制鏈接]
ID:127450 發表于 2016-6-21 20:05 | 顯示全部樓層 |閱讀模式
#include <reg51.h>
#include <intrins.h>
sbit led0=P3^4;
sbit led1=P3^5;
sbit led2=P3^6;
sbit led3=P3^7;
sbit DQ=P2^4;   
float data TMP[2]={0,0};
unsigned char data f[2]={0,0};  
unsigned char data disp_buf[4]={0,0,0,0};
unsigned char data dot_position=0;
unsigned char data chno=0;  
unsigned char code SN[2][8]={{16, 62,148,60,0,0,0, 247},{16,229,146,60,0,0,0, 87}};
unsigned char code seg_table[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x6f,0x76};
unsigned char code CH[ ]={10,11,12,13,14,15,16,17};
// 將0.00~99.9之間的浮點數轉為單個數碼,并送顯示緩沖區和返回小數點位置
void ftochar(float valp)
{
if(valp<10.0)   
  {
   dot_position=1;  
   valp*=100.0;  
   }
else if((valp>=10.0)&&(valp<100.0))   
{               
  dot_position=2;  
  valp*=10.0;
  }
else if((valp>=100.0)&&(valp<1000.0))
dot_position=3;
disp_buf[1]=(int)valp/100;
disp_buf[2]=((int)valp%100)/10;
  disp_buf[3]=((int)valp%100)%10;
}
    //延時15微秒的函數
void delay(unsigned char n)
{
do {  
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();  
n--;  
}while(n);
}
//DS18B20復位函數
void ow_reset(void)
{
DQ = 0;   
delay(120);   
DQ = 1;   
delay(24);   
}
//DS18B20讀位函數  
unsigned char read_bit(void)
{
unsigned char i;
  DQ = 0;   
  DQ = 1;   
  for(i=0; i<5; i++);
  return(DQ);
}
//DS18B20寫位函數
void write_bit(char bitval)
{
DQ = 0;   
if(bitval==1) DQ =1;
delay(6);   
DQ = 1;
}
//從DS18B20讀取字節函數  
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for(i=0;i<8;i++)  
{
if(read_bit()) value|=0x01<<i;
delay(11);
}
return(value);
}
//寫字節到DS18B20
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for (i=0; i<8; i++)  
{
temp = val>>i;   
temp &= 0x01;  
write_bit(temp);     

}
delay(10);
}

//讀溫度代碼  
void  read_temp()  
{
unsigned char i,j;  
unsigned char a,b;  
int mr;
for(j=0;j<2;j++)
{  
ow_reset();
delay(20);
write_byte (0x55);
for(i=0;i<8;i++)   
{  
  write_byte(SN[j][i]);   
}

write_byte (0xbe);
a = read_byte();
b = read_byte();
mr=b*256+a;
if((mr&0xf800)!=0)
  mr=-mr+1;  
TMP[j]=mr*0.5;  
}  
}
//定時器T0終端函數,每中斷一次,顯示一次數碼管  
void Time_disp(void) interrupt 1
{
static unsigned char dispno=0;
TH0=0xee;
TL0=0x00;
P3|=0xf0;
P0=seg_table[disp_buf[dispno]];  
if(dispno==dot_position) P0|=0x80;
switch(dispno)   
{
case 0 :  led0=0;
break;  case 1 : led1=0;
break;  case 2 : led2=0;
break;  case 3 : led3=0;
break;  
  }
dispno++;
if(dispno==4) dispno=0;
}
//定時器T1中斷函數,每50ms中斷一次
void Timer1(void) interrupt 3
{
static unsigned int count;
TH1=0x4c;
TL1=0x00;
count++;
if(count>=20)  
{  
count=0;
ftochar(TMP[chno]);
disp_buf[0]=CH[chno];
chno++;
if(chno==2) chno=0;
}
}
//主函數
main( )
{  
TMOD=0x11;  
EA=1;
ET0=1;
ET1=1;
TH0=0xee;
TL0=0x00;
TH1=0x4c;  
TL1=0x00;
TR0=1;
TR1=1;
do
{   
ow_reset( );
write_byte(0xcc);
write_byte(0x44);
read_temp( );  
}
while(1);  
}
回復

使用道具 舉報

ID:127450 發表于 2016-6-21 20:05 | 顯示全部樓層
這程序網上找的
回復

使用道具 舉報

ID:111634 發表于 2016-6-28 22:21 | 顯示全部樓層
DS18B20 測溫


DS18B20 測溫


Proteus仿真一下,確認有效。
實例97 DS18B20測溫.rar (51.78 KB, 下載次數: 7)
DS18B20 測溫.jpg




以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版
書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

ID:127881 發表于 2016-6-28 22:35 | 顯示全部樓層
網上應該可以找到可以用的程序
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩视频在线第一区 | 久久中文字幕视频 | 欧美精品综合在线 | 午夜视频在线观看一区二区 | h在线观看| 久久躁日日躁aaaaxxxx | 999观看免费高清www | 午夜av电影 | 一本一道久久a久久精品综合蜜臀 | 欧美激情欧美激情在线五月 | 久久综合狠狠综合久久 | 午夜网站视频 | 在线观看 亚洲 | 青青草社区 | 久久av一区 | 国产精品网页 | 国产精品久久久亚洲 | 女同久久 | 亚洲国产一 | 97国产精品视频人人做人人爱 | 国产a区| 免费视频中文字幕 | 国产在线高清 | 久久久久久久av麻豆果冻 | 精品久久久久久久久久 | 91影院在线观看 | 国产日韩欧美 | 六月色婷 | 久久精品国产亚洲一区二区三区 | 亚洲人在线观看视频 | 91国在线观看 | 午夜成人在线视频 | 精品视频久久久久久 | 亚洲国产精品久久久久婷婷老年 | 成人中文字幕在线观看 | 国产精品视频久久久久 | 亚洲图片视频一区 | 久久精彩视频 | 亚洲一区二区三区免费视频 | 亚洲成年在线 | 亚洲欧美一区二区三区视频 |