找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2890|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

求助,根據(jù)at90s8515寫的溫度檢測(cè),一直檢測(cè)出了的是-1.5,不知道哪里出了問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:411631 發(fā)表于 2018-10-19 10:32 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
程序如下,芯片頻率是12M
#include<90s8515.h>
#include<delay.h>

unsigned int temp;
unsigned char dis[4]={0,0,0,0};
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xff,0xbf};//共陽(yáng)極數(shù)顯管顯示0,1,2,3,4,5,6,7,8,9,不顯示,負(fù)號(hào)
unsigned char led1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//帶小數(shù)點(diǎn)顯示

unsigned char init(void)    //ds18b20初始化
{
  unsigned char flag;  
  DDRD=1;//端口設(shè)為輸出,發(fā)送低電平   
  delay_us(550);//延時(shí)550us
  DDRD=0;//端口設(shè)為輸入,釋放總線,等待ds18b20響應(yīng)
  delay_us(68);//延時(shí)68us       
while(PIND);
while(!PIND);
if(PIND)
{flag=0;}
else
{flag=1;}       
  delay_us(500);       
  return flag;                                                                    
  }   

void  write(unsigned char dat)    //寫字節(jié)
{       
        unsigned char i=0;
        for(i=8;i>0;i--)
        {        
                 DDRD=1;//拉低總線
         delay_us(2);
         if(dat&1)
         {DDRD=1;}
         else
         {DDRD=0;}  
         dat>>=1;
         delay_us(60);//主機(jī)延時(shí)60us,等待ds18b20進(jìn)行采樣
         DDRD=0;//釋放總線  
         //delay_us(2);
         }
}

unsigned char read(void)   //讀字節(jié)
{
        unsigned  char i=0;
        unsigned char dat=0;  
        for(i=8;i>0;i--)
        {         DDRD=1; //定義為輸出,拉低總線
        delay_us(1);
        DDRD=0;//定義為輸入,釋放總線
        delay_us(9);  
        dat>>=1;
        if(PIND)
                dat|=0x80; //按位或然后賦值給dat,讀取數(shù)據(jù)最高位為1
        delay_us(65);
                }       

                return(dat);
}


void Display(unsigned int temp)     //顯示函數(shù)
{
    if(temp<=0x0800)//進(jìn)行溫度轉(zhuǎn)換
    {
    temp>>=4;//二進(jìn)制轉(zhuǎn)換成十進(jìn)制                                                
    temp*=10;
    dis[0]=temp/1000;
    dis[1]=temp%1000/100;
    dis[2]=temp%1000%100/10;
    dis[3]=temp%1000%100%10;
    }
    else
    {
     temp=~temp;
     temp+=1;
     temp>>=4;
     dis[0]=0x0c;
     dis[1]=temp%100/10;
     dis[2]=temp%100%10;
     dis[3]=0;
    }  
    DDRC=0X0F;
    DDRA=0XFF;

    PORTC=0x01;
    PORTA=led[dis[0]];
    delay_us(400);

    PORTC=0x02;
    PORTA=led1[dis[1]];
    delay_us(400);

    PORTC=0x04;
    PORTA=led[dis[2]];
    delay_us(400);

    PORTC=0x08;
    PORTA=led[dis[3]];
    delay_us(400);
}

void main()
{   
    unsigned char th,tl;
    while(1)
    {
    init();
    write(0xcc);//跳過ROM的操作
    write(0x44);//進(jìn)行溫度變換
    delay_ms(10);     

    init();
    write(0xcc);//跳過ROM的操作
    write(0xbe);//發(fā)出讀取RAM的命令  

    th=read();
    tl=read();
     temp=th<<8;
     temp|=tl;
     Display(temp);
   }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:382826 發(fā)表于 2018-10-19 12:09 | 只看該作者
temp=th<<8;會(huì)不會(huì)有問題呀!th是8位變量,左移8位后給temp會(huì)不會(huì)出錯(cuò),應(yīng)該temp=th;temp=temp<<8;
回復(fù)

使用道具 舉報(bào)

板凳
ID:411631 發(fā)表于 2018-10-19 12:22 | 只看該作者
已經(jīng)解決了
回復(fù)

使用道具 舉報(bào)

地板
ID:411631 發(fā)表于 2018-10-19 13:00 | 只看該作者
已經(jīng)解決了,就是不知道為什么數(shù)顯管不顯示“-”號(hào)
回復(fù)

使用道具 舉報(bào)

5#
ID:199427 發(fā)表于 2018-11-7 13:02 | 只看該作者
樓主,請(qǐng)問你的問題是怎么解決的?
另外,懇求能不能上傳一份完整的程序,包括頭文件。
回復(fù)

使用道具 舉報(bào)

6#
ID:480718 發(fā)表于 2019-12-16 14:54 | 只看該作者
你是不是顯示程序沒寫對(duì)。。。我就經(jīng)常數(shù)碼管程序?qū)戝e(cuò)細(xì)節(jié),你仔細(xì)檢查一下啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表