欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

DS18B20溫度計(jì)精簡(jiǎn)設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70941 發(fā)表于 2015-4-19 22:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 dagu 于 2015-4-19 22:44 編輯



材料:如下圖所示





       DS18B20溫度傳感器、STC12C5A60S2單片機(jī)、40針插座一個(gè)、共陽4聯(lián)排LED12Mhz晶振、30p電容(2個(gè))、電源接頭、導(dǎo)線、熱縮套管。另外用到AB膠圖中沒有列出。
制作注意點(diǎn):
1、  把40針插座靠近單片機(jī)電源口那個(gè)地方剪掉,便于安裝電源插座,如下圖顯示,可以在電源座接頭引線的位置先把插針取消,便于焊接,免除不必要的麻煩。設(shè)計(jì)好位置之后,把電源座用AB膠粘在CPU背面。
2、晶振、電容焊接時(shí)候,注意檢查不要有短路
電路圖




源程序:
下列程序也是用網(wǎng)上的程序進(jìn)行修改,主要改動(dòng)部分是顯示輸出部分,而溫度轉(zhuǎn)換是采用的查表法(具體原理還沒有看懂),但該程序經(jīng)過編譯,100%通過。STC12C5A60S2.h頭文件下載:http://www.raoushi.com/mcu/2564.html
#include < STC12C5A60S2.h >
#include < intrins.h >

#define uchar unsigned char
#define uint   unsigned int
bit presence   ;
//***************************************************************************************************//
sbit DQ = P1^6 ;             //定義DS18B20端口DQ  
sbit   LED_A      =P4 ^ 4; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_B      =P0 ^ 6; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_C       =P3 ^ 0; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_D      =P3 ^ 2; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_E       =P3 ^ 3; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_F       =P4 ^ 5; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_G      =P4 ^ 7; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit   LED_DP    =P3 ^ 1; //設(shè)置LED點(diǎn)陣屏連接的I/O
sbit LED1= P2^7 ;            //定義LED數(shù)碼管位腳
sbit LED2= P4^6 ;
sbit LED3= P0^7 ;
sbit LED4= P1^7 ;
//***************************************************************************************************//
unsigned char data   temp_data[2] = {0x00,0x00} ;
unsigned char data   display[5] =    {0x00,0x00,0x00,0x00,0x00} ;
unsigned char code   ditab[16] =     {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
                                                        0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ;
unsigned char code   mytab[4] = {0xF9,0xB0,0x92,0x99} ;//純粹用來測(cè)試,可刪除
//***************************************************************************************************//
const uchar tab[]={             /* 根據(jù)共陰極字型編碼表獲取0~9A~B字型代碼 */
         0x3f,0x06,0x5b,0x4f,//0~3
         0x66,0x6D,0x7D,0x07,//4~7
         0x7F,0x6F,0x77,0x7C,//8~b
         0x39,0x5E,0x79,0x71,//c~f
         0x00//mie
};
//***************************************************************************************************//
const uchar tab1[]={             /* 根據(jù)共陽極字型編碼表獲取0~9A~B字型代碼 */
         0xC0,0xF9,0xA4,0xB0,//0~3
         0x99,0x92,0x82,0xF8,//4~7
         0x80,0x90,0x88,0x83,//8~b
         0xC6,0xA1,0x86,0x8E,//c~f
         0xff//mie
};
#define delayNOP() ; {_nop_() ;_nop_();_nop_() ;_nop_() ;} ;

/*******************************************************************/
void delay1(int ms)
{
unsigned char y ;
  while(ms--)
{
  for(y = 0 ; y<250 ; y++)
   {
   _nop_() ;
   _nop_() ;
   _nop_() ;
   _nop_() ;
   }
}
}

/******************************************************************/
/*us級(jí)延時(shí)函數(shù)                                         */
/*******************************************************************/
void Delay(unsigned int num)   //延時(shí)6us,誤差 0us
{
   unsigned char a;
         while(num--!=0)
   {for(a=15;a>0;a--);}
}

/*void Delay(unsigned int num)
{
  while( --num ) ;
}
*/

/*********************************************************************************************/
void PUTLED (unsigned char d){ //LED段輸入
         unsignedchar i;
         i= d & 0x01;
         if(i== 0x00){              LED_A = 0;}
         i= d & 0x02;
         if(i== 0x00){              LED_B = 0;}
         i= d & 0x04;
         if(i== 0x00){              LED_C = 0;}
         i= d & 0x08;
         if(i== 0x00){              LED_D = 0;}
         i= d & 0x10;
         if(i== 0x00){              LED_E = 0;}
         i= d & 0x20;
         if(i== 0x00){              LED_F = 0;}
         i= d & 0x40;
         if(i== 0x00){              LED_G = 0;}
         i= d & 0x80;
         if(i== 0x00){              LED_DP = 0;}
}
/*******************************************************************/
void dis_off(void){
LED_A      =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_B      =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_C       =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_D      =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_E       =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_F       =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_G      =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED_DP    =1;//設(shè)置LED點(diǎn)陣屏連接的I/O
LED1= 0 ;           
LED2= 0;
LED3=0 ;
LED4= 0 ;   
}
/*******************************************************************/
void displayLED(void){
dis_off();
PUTLED(tab1[display[3]]);//顯示百位
LED1=1;
Delay(150);
dis_off();
PUTLED(tab1[display[2]]);//顯示十位
LED2=1;
Delay(150);
dis_off();
PUTLED(0x7f&tab1[display[1]]);//顯示個(gè)位和小數(shù)點(diǎn)
LED3=1;
Delay(150);
dis_off();
PUTLED(tab1[display[0]]);//顯示小數(shù)位
LED4=1;
Delay(150);
dis_off();
}

/*******************************************************************/
/*初始化ds1820                                                    */
/*******************************************************************/
Init_DS18B20(void)
{  
     DQ = 1 ;       //DQ復(fù)位
     Delay(8) ;     //稍做延時(shí)

     DQ = 0 ;       //單片機(jī)將DQ拉低
     Delay(90) ;    //精確延時(shí)大于 480us

     DQ = 1 ;        //拉高總線
     Delay(8) ;

     presence = DQ ;     //如果=0則初始化成功 =1則初始化失敗
     Delay(100) ;
     DQ = 1 ;

     return(presence) ; //返回信號(hào),0=presence,1=no presence
}


/* 讀一個(gè)字節(jié)                      */
/*******************************************************************/
ReadOneChar(void)
{
unsigned char i = 0 ;
unsigned char dat = 0 ;

for (i = 8 ; i > 0 ; i--)
   {
    DQ = 0 ; // 給脈沖信號(hào)
    dat >>= 1 ;
    DQ = 1 ; // 給脈沖信號(hào)

    if(DQ)
     dat |= 0x80 ;
    Delay(4) ;
   }

    return (dat) ;
}

/* 寫一個(gè)字節(jié)                                          */
/*******************************************************************/
WriteOneChar(unsigned char dat)
{
  unsigned char i = 0 ;
  for (i = 8 ; i > 0 ; i--)
   {
    DQ = 0 ;
    DQ = dat&0x01 ;
    Delay(5) ;

    DQ = 1 ;
    dat>>=1 ;
   }
}

/* 讀取溫度                            */
/*******************************************************************/
Read_Temperature(void)
{
     Init_DS18B20() ;

     WriteOneChar(0xCC) ;   // 跳過讀序號(hào)列號(hào)的操作
     WriteOneChar(0x44) ;   // 啟動(dòng)溫度轉(zhuǎn)換

     Init_DS18B20() ;
     WriteOneChar(0xCC) ;   //跳過讀序號(hào)列號(hào)的操作
     WriteOneChar(0xBE) ;   //讀取溫度寄存器

     temp_data[0] = ReadOneChar() ;   //溫度低8
     temp_data[1] = ReadOneChar() ;   //溫度高8
}

/* 數(shù)據(jù)轉(zhuǎn)換與溫度顯示                                              */
/*******************************************************************/
Disp_Temperature()
{
  display[4]=temp_data[0]&0x0f ;
  display[0]=ditab[display[4]] ;     //查表得小數(shù)位的值

  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
  display[3]=display[4]/100 ;
  display[1]=display[4]%100 ;
  display[2]=display[1]/10 ;
  display[1]=display[1]%10 ;
    if(display[3]==0x00)         //高位為0,不顯示
    {
     display[3]=16 ;              
     if(display[2]==0x00)       //次高位為0,不顯示
     display[2]=16 ;
    }
         }


/* 主函數(shù)      */
/************************************/
void main()
{  P0M1=0x00;
   P0M0=0x80;
         P1M1=0x00;
   P1M0=0x80;
   P2M1=0x00;
   P2M0=0x80;

         P4M1=0x00;
   P4M0=0x40;
         P4SW= 0xff; //啟動(dòng)P4接口
     while(1)
   {
   Read_Temperature() ;
   Disp_Temperature() ;
         displayLED();
    }
}




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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:77523 發(fā)表于 2015-4-22 15:28 來自觸屏版 | 只看該作者
感謝分享~!!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:78702 發(fā)表于 2015-5-26 19:31 | 只看該作者
詳細(xì)資料,幫助別人
回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
5#
無效樓層,該帖已經(jīng)被刪除
6#
ID:82588 發(fā)表于 2015-7-3 11:35 | 只看該作者
看了才明白所謂的精簡(jiǎn)就是不要PCB或洞洞板的,不錯(cuò),頂一個(gè)
回復(fù)

使用道具 舉報(bào)

7#
ID:65730 發(fā)表于 2015-8-9 22:31 | 只看該作者
很好,現(xiàn)在的溫度計(jì)也不少,缺的是溫度控制裝置,
回復(fù)

使用道具 舉報(bào)

8#
ID:44267 發(fā)表于 2015-11-16 11:27 | 只看該作者
diy的精神讓人欽佩
回復(fù)

使用道具 舉報(bào)

9#
ID:77776 發(fā)表于 2015-11-18 22:39 | 只看該作者
不錯(cuò),程序也簡(jiǎn)潔,元件也非常少
回復(fù)

使用道具 舉報(bào)

10#
ID:19947 發(fā)表于 2016-1-22 14:32 | 只看該作者
謝謝樓主的無私,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

11#
ID:70785 發(fā)表于 2016-1-22 19:09 | 只看該作者
謝謝樓主,學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

12#
ID:112579 發(fā)表于 2016-4-7 23:43 | 只看該作者
非常感謝啊啊   初學(xué)者  膜拜
回復(fù)

使用道具 舉報(bào)

13#
ID:137511 發(fā)表于 2017-4-7 18:18 | 只看該作者
感謝樓主, 終于找到個(gè)用STC12C5A60S2的了
回復(fù)

使用道具 舉報(bào)

14#
ID:136189 發(fā)表于 2017-4-9 06:59 來自觸屏版 | 只看該作者
非常感謝,努力學(xué)習(xí)中,
回復(fù)

使用道具 舉報(bào)

15#
ID:137511 發(fā)表于 2017-4-15 19:28 | 只看該作者
/*********************************************************************************************/
void PUTLED (unsigned char d){ //LED段輸入
         unsignedchar i;



unsignedchar這個(gè)不是要空格分開嗎?》》》》unsigned char
回復(fù)

使用道具 舉報(bào)

16#
ID:210317 發(fā)表于 2017-6-15 10:52 | 只看該作者
正好課程設(shè)計(jì)要用到,看看
回復(fù)

使用道具 舉報(bào)

17#
ID:715628 發(fā)表于 2020-3-26 16:41 | 只看該作者
感謝分享感謝分享
回復(fù)

使用道具 舉報(bào)

18#
無效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

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