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

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

QQ登錄

只需一步,快速開始

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

TINY13+HC163+18B20溫度顯示與控制

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:18916 發(fā)表于 2015-5-11 14:18 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//ICC-AVR application builder : 2012/6/19 下午 10:43:42
// Target : T13
// Crystal: 4.8000Mhz

#include <iot13v.h>
#include <macros.h>
#include "ds18b20.h"
#define CPL  PORTB &= ~(1<<PB4)
#define CPH  PORTB |=(1<<PB4)
#define DAL  PORTB &= ~(1<<PB3)
#define DAH  PORTB |=(1<<PB3)
#define FSL  PORTB &= ~(1<<PB1)
#define FSH  PORTB |=(1<<PB1)
char dsp,tdsp;
char adcdata=0;
flash char LED[]={
               0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
                                //0xed,0x21,0x8f,0xab,0x63,0xea,0xee,0xa1,0xef,0xeb
                                };
void delay1ms(void)   //誤差 0us
{
     unsigned char a,b;
    for(b=4;b>0;b--)
        for(a=248;a>0;a--);
}

void delay10ms(void)   //誤差 0us
{
    unsigned char a,b;
    for(b=215;b>0;b--)
        for(a=45;a>0;a--);
}
void beep(void)  //蜂鳴器響一聲函數(shù)
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   FSH;
   delay1ms();
   FSL;       //BEEP取反
   delay1ms();
   }
   for (i=0;i<100;i++)
   {
   FSH;
   //delay1ms();
   //FSL;       //BEEP取反
   delay1ms();
   }
}

void send(char a)
{
  char i;
  for(i=8;i>0;i--)
        {
                  CPL;delay(1);
                  if(a&0x80)
                  {
                   DAH;
                   }
                   else
                   {
                    DAL;
                        }
                       
          CPH;delay(1);

                   a=a<<1;
         }
}

void disp(void)
{
  //FSH;
  send(LED[dsp%10]+tdsp);
  send(LED[dsp/10]+tdsp);
  //delay(255);
  //delay(255);FSL;
}

void port_init(void)
{
PORTB = 0x00;
DDRB  = 0x1B;
}
void  adcstar(void)

{

        DIDR0=0x04;   
                /*

        ADMUX (ADC Multiplexer Select Register) PDF86?

        bit7  Res                 ??

        bit6  REFS0                0=VCC????????;1=??????

        bit5  ADLAR                0=???;1=???(8bit??ADCH??)

        bit4:2  Res                 ??

        bit1:0  MUX1,MUX0        ????,00=ADC0(PB5);01=ADC1(PB2);10=ADC2(PB4);11=ADC3 (PB3)

*/   
        ADMUX=(1<<REFS0)|(0<<ADLAR)|(0<<MUX1)|(1<<MUX0);
        ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(0<<ADIF)|(0<<ADIE)|(0<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);

/*   

        ADCSRA (ADC Control and Status Register A) PDF 87?

        bit7   ADEN ADC??=1

        bit6   ADSC ??ADC????=1

        bit5   ADATE ?????

        bit4   ADIF ADC????

        bit3   ADIE ADC????

        bit2:0 ADC ??????

*/   

}
#pragma interrupt_handler eeprom_ready_isr:iv_EE_RDY
void eeprom_ready_isr(void)//內(nèi)部EEPROM讀寫初始化
{
//eeprom ready event
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();

MCUCR = 0x00;
TIMSK0 = 0x00; //timer interrupt sources
GIMSK = 0x00; //interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
char key(void)
{

  if (ADCSRA&(1<<ADIF))

        {

           adcdata=ADC/4;

           ADCSRA|=(1<<ADSC)|(1<<ADIF); // ???ADC ???? ADIF?1???????1??0

        }//delay(100);
                return(adcdata);
}

void main(void)
{
  char stmp,mode=0;
  init_devices();
  Init_DS18B20();
  adcstar();
  ReadTemp();
  stmp=EEPROMread(0);//讀取EEPROM預(yù)設(shè)溫度數(shù)據(jù)
     FSH;
        // delay10ms();
        //tmp=0;
   while(1)
   {



   if(key()==0)
   {
   mode++;
   if(mode>1)
   {
   mode=0;
   }
   while(key()==0);
   }
   delay10ms();

   if(mode==1)
   {
   tdsp=0x80;
   delay10ms();
   if(key()==101)
   {
   stmp++;
   if(stmp>99)
   {
   stmp=99;
   }
   EEPROMwrite(0,stmp);//向EEPROM寫入預(yù)設(shè)溫度數(shù)據(jù)
   while(key()==101);
   }
   delay10ms();
   if(key()==173)
   {
   stmp--;
   if(stmp<1)
   {
   stmp=1;
   }
   EEPROMwrite(0,stmp);//向EEPROM寫入預(yù)設(shè)溫度數(shù)據(jù)
   while(key()==173);
   }
   if(dsp!=stmp)
   {
   dsp=stmp;
   disp();
   }
  }
   ReadTemp();
  delay10ms();
  if(mode==0)
   {
   tdsp=0x00;
   if(tmp>stmp)
    {
     beep();
     }
     else
     {
     FSH;
     }
         
   if(dsp!=tmp)
   {
   dsp=tmp;
   disp();
   }
   }
  //delay10ms();
   }
}



/**************************************************************************

                                   THE ds18b20 LIB
   
   File Name:       ds18b20.h

***************************************************************************/

#ifndef ds18b20_2005_4_9
#define ds18b20_2005_4_9
#define uchar unsigned char
#define DQL  PORTB &= ~(1<<PB0)
#define DQH  PORTB |=(1<<PB0)
#define DQ  PINB&(1<<PB0)
#define DO DDRB|= (1<<PB0)         //PB0定義成輸出
#define DI DDRB&=~(1<<PB0)         //PB0定義成輸入
uchar tmp;              //


/***********ds18b20延遲子函數(shù)(晶振12MHz )*******/
/*
void delay_18B20(unsigned int i)
{
         unsigned char a,b;
    for(b=9;b>0;b--)
        for(a=i;a>0;a--);
}
*/
void delay(unsigned char i)
{
         unsigned char a,b;
    for(b=2;b>0;b--)
        for(a=i;a>0;a--);
}

/**********ds18b20初始化函數(shù)**********************/

void Init_DS18B20(void)
{
         unsigned char x=0;
         DO;
         DQH;          //拉高總線
         delay(30);
         DQL;          //單片機(jī)將DQ拉低
         delay(255);delay(50); //精確延時(shí) 大于 480us
         DQH;          //拉高總線
         DI;
        if(DQ)
        {x=0;}else{x=1;}
                DO;
        DQL;delay(55);
        DQH;          //拉高總線
        delay(55);
}

/***********ds18b20讀一個(gè)字節(jié)**************/  

unsigned char ReadOneChar(void)
{
        uchar i=0;
        uchar dat = 0;
        for (i=8;i>0;i--)
         {
                 
                 DO;
                  DQL;      // 給脈沖信號(hào)
                  delay(1);
                  dat>>=1;     //數(shù)據(jù)右移一位
                  DQH;
                  DI;
                  if(DQ)
                 { dat|=0x80;}   //按位或,取最高位
                  delay(20);
         }
        return(dat);
}

/*************ds18b20寫一個(gè)字節(jié)****************/  

void WriteOneChar(uchar dat)
{
        unsigned char i=0;
        DO;
        for (i=8; i>0; i--)
        {
                  DQL;
                delay(0);
                if(dat&0x01)
                {DQH;}
                else
                {DQL;}
            delay(25);
                DQH;            //上升沿將數(shù)據(jù)送入
               
            dat>>=1;delay(1);
}//DQH;delay(1);
}

/**************讀取ds18b20當(dāng)前溫度************/

void ReadTemp(void)
{
        unsigned char a=0;
        unsigned char b=0;
        //unsigned char t=0;

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

        delay(255);delay(150);     // this message is wery important

        Init_DS18B20();
        WriteOneChar(0xCC);         //跳過(guò)讀序號(hào)列號(hào)的操作
        WriteOneChar(0xBE);         //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度

        delay(255);delay(150);

        a=ReadOneChar();            //讀取溫度值低位
        b=ReadOneChar();                   //讀取溫度值高位
        //temp_value=b<<4;        //左移四位,擴(kuò)大16倍,變?yōu)橐粋(gè)字節(jié)的高四位
        //temp_value+=(a&0xf0)>>4;//取溫度值的地位的高四位,右移四位后與溫度的高四位相加得到溫度值   
    //delay(150);
        tmp=(b<<4)+((a&0xf0)>>4);
}
//void temp_to_str()   //溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符顯示
//{

//tmp=temp_value;

//}
#endif


11.png (25 KB, 下載次數(shù): 156)

11.png

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久高清| 欧美久久电影 | 日韩aⅴ片| 国产精品久久久久一区二区三区 | 狠狠天天 | 亚洲一区二区三区免费在线观看 | www.青青草| 欧美中文字幕在线 | 中文字幕国产精品 | 久久久国产精品视频 | 国产欧美在线一区二区 | 国产日韩欧美一区二区 | 日韩在线免费看 | 毛片视频免费观看 | 丁香六月伊人 | 草久在线视频 | 成人黄色电影在线播放 | 毛片免费观看视频 | 91综合网| 国产美女一区二区 | 91在线电影| 在线观看视频亚洲 | 欧美精品一区二区三区在线播放 | 久久精品一区二区 | 一区二区三区国产 | 国产 日韩 欧美 中文 在线播放 | 人操人人干人 | 成人av观看| 欧美日韩一区二区三区四区五区 | 精品欧美一区二区精品久久久 | 91极品尤物在线播放国产 | 亚洲精品亚洲人成人网 | 一区二区三区韩国 | 久久黄色| 99精品久久久久久中文字幕 | 久久小视频 | 亚洲欧美在线视频 | 亚洲精品免费在线观看 | 日韩在线一区二区三区 | 99热在线播放 | 精品久久久久久亚洲综合网 |