娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月20日(星期五)

2018年06月20日 | 單片機實時溫度采集并通過串口通信上傳電腦顯示

發布者:chaxue1987 來源: eefocus關鍵字:單片機  實時溫度采集  串口通信  電腦顯示 手機看文章 掃描二維碼
隨時隨地手機看文章

首先說下我所用到的主要器件器件:STC89C52,AT24C08,DS18B20,MAX232


實驗源代碼:

//接上18B20溫度傳感器(另購)后數碼管顯示出當前溫度  

#include  

#include  

#include  

#define uchar unsigned char  

#define uint unsigned int  

sbit DS=P1^0;           //define interface  

uint temp;             // variable of temperature  

uchar flag,dat1;            // sign of the result positive or negative  

uchar code table[]={  

0xC0,0xF9,0xA4,0xB0,  

0x99,0x92,0x82,0xF8,  

0x80,0x90,0x88,0x83,  

0xC6,0xA1,0x86,0x8E};  

/*uchar code table1[]={  

0x40,0x79,0x24,0x30,  

0x19,0x12,0x02,0xF8,  

0x80,0x90,0x88,0x83,  

0xC6,0xA1,0x86,0x8E};*/  

sbit wela1 = P1^4;  

sbit wela2 = P1^5;  

sbit wela3 = P1^6;  

/*unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,  

                        0x87,0xff,0xef};  

 */  

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

                 串口通信部分  

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

void RS232_Init()  

{        

    TMOD=0x20;//設置定時器1為工作方式2  

    TH1=0xfd;  

    TL1=0xfd;  

    TR1=1;  

    REN=1;  

    SM0=0;  

    SM1=1;  

    EA=1;  

    ES=1;  

}  

/*-----------------------發送數據函數----------------------------*/  

void USART_Transmit(unsigned char buf)  

{      

       SBUF=buf;                  //發送數據  

       while(TI==0);                //等待發送結束  

       TI=0;                           //清除發送結束標志  

}  

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

                    AT24C08讀寫部分  

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

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Delay1ms(uint x)  

 函數功能: 延時1ms  

 入口參數: x  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Delay1ms(uint x)  

{  

 uint i;  

 while(x--)  

 for(i=0;i<165;i++);  

}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Start()  

 函數功能: 起始函數  

 入口參數: 無  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Start()  

{AT24C08_SDA_1();AT24C08_SCL_1();NOP();AT24C08_SDA_0();NOP();AT24C08_SCL_0();}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Stop()  

 函數功能: 停止函數  

 入口參數: 無  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Stop()  

{AT24C08_SDA_0();AT24C08_SCL_1();NOP();AT24C08_SDA_1();NOP();AT24C08_SCL_0();}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Ack()  

 函數功能: 應答函數  

 入口參數: 無  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Ack()  

{AT24C08_SDA_0();NOP();AT24C08_SCL_1();NOP();AT24C08_SCL_0();}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_NO_Ack()  

 函數功能: 無應答函數  

 入口參數: 無  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_NO_Ack()  

{AT24C08_SDA_1();AT24C08_SCL_1();NOP();AT24C08_SCL_0();}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Writ_Byte(uchar dat)  

 函數功能: 寫函數  

 入口參數: dat  

 返回參數:t  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

uchar AT24C08_Writ_Byte(uchar dat)  

{  

 uchar i;  

 uchar t;  

 AT24C08_SDA_1();AT24C08_SCL_0();  

 for(i=0;i<8;i++)  

 {  

  if(dat&0x80)AT24C08_SDA_1();  

  else AT24C08_SDA_0();  

  AT24C08_SCL_1();NOP();  

  AT24C08_SCL_0();  

  dat<<=1;   

 }  

 NOP();  

 AT24C08_SDA_1();NOP();  

 AT24C08_SCL_1();NOP();  

 t=(AT24C08_CONT & (1<

 AT24C08_SCL_0();  

 return t;  

}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Read_Byte()  

 函數功能: 讀函數  

 入口參數: 無  

 返回參數:dat  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

uchar AT24C08_Read_Byte()  

{  

   uchar i,dat;  

   AT24C08_SDA_1();AT24C08_SCL_1();  

   for(i=0;i<8;i++)  

   {  

     dat<<=1;  

     AT24C08_SCL_1();  

  if((AT24C08_CONT & (1<

  AT24C08_SCL_0();  

   }  

   AT24C08_Ack();  

   return dat;  

}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Write_One_Dat(uchar add,uchar dat)  

 函數功能: 寫一字節函數  

 入口參數: add,dat  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

int AT24C08_Write_One_Dat(uchar add,uchar dat)  

{  

 EA=0;  

 AT24C08_Start();  

 if(AT24C08_Writ_Byte(sla))return 0;  

 if(AT24C08_Writ_Byte(add))return 0;  

 if(AT24C08_Writ_Byte(dat))return 0;  

 AT24C08_Stop();  

 AT24C08_Delay1ms(10);  

 EA=1;  

 return 1;  

}   

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Write_Mul_Dat(uchar add,uchar dat)  

 函數功能: 寫多字節函數  

 入口參數: add,dat  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Write_Mul_Dat(uchar add,uchar *s,uchar n)  

{  

 uchar i;  

 EA=0;  

 for(i=0;i

 {while(!AT24C08_Write_One_Dat(add+i,s[i]));  

 }  

  EA=1;  

}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Read_One_Dat(uchar add)  

 函數功能: 讀一字節函數  

 入口參數: add,dat  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

int AT24C08_Read_One_Dat(uchar add)  

{   

 EA=0;  

 AT24C08_Start();  

 if(AT24C08_Writ_Byte(sla))return 0;  

 if(AT24C08_Writ_Byte(add))return 0;  

 AT24C08_Start();  

 if(AT24C08_Writ_Byte(sla|0x01))return 0;  

 dat1=AT24C08_Read_Byte();AT24C08_NO_Ack();  

 AT24C08_Stop();  

 EA=1;  

 return 1;   

}   

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Read_Mul_Dat(uchar add)  

 函數功能: 讀多字節函數  

 入口參數: add,s,n  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Read_Mul_Dat(uchar add,uchar *s,uchar n)  

{  

 uchar i;  

 EA=0;  

 for(i=0;i

 {  

  while(!AT24C08_Read_One_Dat(add+i));  

  s[i]=dat1;  

 }  

 EA=1;  

}  

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

 隸屬模塊:AT24C08存儲模塊  

 函數名稱:AT24C08_Clear()  

 函數功能: 清空  

 入口參數: 無  

 返回參數:無  

 修改時間: 2011-7-10  

 修改者:  彭瑞  

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

void AT24C08_Clear()  

{  

 uchar i;  

 EA=0;  

 for(i=0;i<256;i++)  

 {  

  AT24C08_Write_One_Dat(i,0xff);  

 }  

 EA=1;  

}  

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

                    溫度采集部分  

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

void delay(uint count)      //delay  

{  

  uint i;  

  while(count)  

  {  

    i=200;  

    while(i>0)  

    i--;  

    count--;  

  }  

}  

void dsreset(void)       //send reset and initialization command  

{  

  uint i;  

  DS=0;  

  i=103;  

  while(i>0)i--;  

  DS=1;  

  i=4;  

  while(i>0)i--;  

}  

  

bit tmpreadbit(void)       //read a bit  

{  

   uint i;  

   bit dat;  

   DS=0;i++;          //i++ for delay  

   DS=1;i++;i++;  

   dat=DS;  

   i=8;while(i>0)i--;  

   return (dat);  

}  

  

uchar tmpread(void)   //read a byte date  

{  

  uchar i,j,dat;  

  dat=0;  

  for(i=1;i<=8;i++)  

  {  

    j=tmpreadbit();  

    dat=(j<<7)|(dat>>1);   //讀出的數據最低位在最前面,這樣剛好一個字節在DAT里  

  }  

  return(dat);  

}  

  

void tmpwritebyte(uchar dat)   //write a byte to ds18b20  

{  

  uint i;  

  uchar j;  

  bit testb;  

  for(j=1;j<=8;j++)  

  {  

    testb=dat&0x01;  

    dat=dat>>1;  

    if(testb)     //write 1  

    {  

      DS=0;  

      i++;i++;  

      DS=1;  

      i=8;while(i>0)i--;  

    }  

    else  

    {  

      DS=0;       //write 0  

      i=8;while(i>0)i--;  

      DS=1;  

      i++;i++;  

    }  

  

  }  

}  

  

void tmpchange(void)  //DS18B20 begin change  

{  

  dsreset();  

  delay(1);  

  tmpwritebyte(0xcc);  // address all drivers on bus  

  tmpwritebyte(0x44);  //  initiates a single temperature conversion  

}  

  

uint tmp()               //get the temperature  

{  

  float tt;  

  uchar a,b;  

  dsreset();  

  delay(1);  

  tmpwritebyte(0xcc);//訪問總線上的器件  

  tmpwritebyte(0xbe);//從器件上讀取值  

  a=tmpread();  

  b=tmpread();  

  temp=b;  

  temp<<=8;             //two byte  compose a int variable  

  temp=temp|a;  

  tt=temp*0.0625;  

  temp=tt*10+0.5;//四舍五入  

  return temp;  

}  

  

void readrom()          //read the serial  

{  

  uchar sn1,sn2;  

  dsreset();  

  delay(1);  

  tmpwritebyte(0x33);  

  sn1=tmpread();  

  sn2=tmpread();  

}  

  

  

void delay10ms()            //delay  

  {  

    uchar a,b;  

    for(a=10;a>0;a--)  

      for(b=60;b>0;b--);  

   }  

  

void display(uint temp)         //顯示程序  

{  

   uchar A1,A2,A2t,A3;  

   A1=temp/100;  

   A2t=temp%100;  

   A2=A2t/10;  

   A3=A2t%10;  

  

   wela3=1;  

   P2=table[A1];        //顯示百位  

   delay(1);  

   wela3=0;  

  

   wela2=1;  

   P2=table[A2]-0x80;       //顯示十位  

   delay(1);  

   wela2=0;  

  

   wela1=1;  

   P2=table[A3];        //顯示個位  

   delay(1);  

   wela1=0;  

}  

  

  

void main()  

{  

    uint i;  

    uchar a,dat;  

    RS232_Init();     

    tmpchange();  

    // delay(200);  

    //for(a=10;a>0;a--)  

    //{           

        //display(tmp());  

    //}   

    for(i=0;i<1024;i++){  

        tmpchange();  

        dat=400-tmp();  

        AT24C08_Write_One_Dat(i,dat);  

        for(a=20;a>0;a--)  

            display(400-dat);  

    }  

    do{  

        display(888);  

        if(flag==1)  

        {  

            ES=0;  

            flag=0;  

            for(i=0;i<1024;i++){  

                AT24C08_Read_One_Dat(i);  

                USART_Transmit(dat1);  

            }  

            ES=1;  

        }  

    }while(1);  

}  

/*---------------------發送字符串函數--------------------------*/  

void USART_Transmit_str() interrupt 4  

{  

    uchar a;  

    RI=0;  

//  P1=SBUF;  

    a=SBUF;  

    flag=1;  

}  

AT24C08.h源代碼:

#ifndef _short_type_H_  

#define _short_type_H_  

#define uchar unsigned char  

#define uint  unsigned int  

#endif  

  

#define sla 0xa0  

#define NOP()  _nop_();_nop_();_nop_();_nop_();_nop_()  

  

#define AT24C08_CONT P1  

  

#define AT24C08_SDA 2  

#define AT24C08_SCL 1  

  

  

#define AT24C08_SDA_1() AT24C08_CONT |= (1<

#define AT24C08_SDA_0() AT24C08_CONT &=~(1<

#define AT24C08_SCL_1() AT24C08_CONT |= (1<

#define AT24C08_SCL_0() AT24C08_CONT &=~(1<

  

/*unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,  

                        0x87,0xff,0xef};  

*/  

void AT24C08_Start();//開始  

void AT24C08_Stop();//結束  

void AT24C08_Ack();//應答  

void AT24C08_NO_Ack();//無應答  

  

uchar AT24C08_Writ_Byte(uchar dat);//寫數據  

uchar AT24C08_Read_Byte();//讀數據  

  

int AT24C08_Write_One_Dat(uchar add,uchar dat);//寫一字節數據  

void AT24C08_Write_Mul_Dat(uchar add,uchar *s,uchar n);//寫多字節數據  

int AT24C08_Read_One_Dat(uchar add);//讀一字節數據  

void AT24C08_Read_Mul_Dat(uchar add,uchar *s,uchar n);//讀多字節數據  

  

void AT24C08_Clear();//清存儲空間數據  

void AT24C08_Delay1ms(uint x);//延時1ms  

/****************串口通信*********************/  

void RS232_Init();  

void USART_Transmit(unsigned char buf);  

void delay(uint count);  

void display(uint temp);//數碼管先顯示  

#endif  



關鍵字:單片機  實時溫度采集  串口通信  電腦顯示 引用地址:單片機實時溫度采集并通過串口通信上傳電腦顯示

上一篇:STC89C52串口應用實例
下一篇:單片機利用串口通信傳送溫度

推薦閱讀

#include <reg51.h>#include <intrins.h> //_nop_();延時函數用#define Disdata P0 //段碼輸出口#define discan P2 //掃描口#define uchar unsigned char#define uint unsigned intsbit DQ=P3^7; //溫度輸入口s...
根據外媒的報道,USB Promoter Group正在努力開發USB4規范。外媒AnandTech在Computex 19上會見了他們,并獲悉搭載USB4功能的零售產品將于2020年底上市。USB4基于雷電3(Thunderbolt 3)技術并提供高達40 Gbps的帶寬。USB Promoter Group正在考慮新的標識和品牌推廣方案。同時,USB4將向后兼容現有的USB Type-C設備。據悉,今年三月份,英特爾發布...
供應商溫瑞爾(Wind River)近日發表COVID-19(新冠肺炎)對企業的影響調查,搜集美國與中國大陸高階管理人員的意見,結果顯示超過95%的主管都坦言,疫情確實使較難滿足顧客需求,并有75%的主管都表示正因應疫情調整企業策略,主要是發展特定科技。 據報導,受到疫情沖擊影響,不論美國還是中國的企業受訪者皆認為,未來將面臨艱難挑戰,亟需加速采取新商...
2021年6月17日-19日,由中國汽車工業協會主辦的第11屆中國汽車論壇在上海嘉定舉辦。站在新五年起點上,本屆論壇以“新起點 新戰略 新格局——推動汽車產業高質量發展”為主題,設置“1場閉門峰會+1個大會論壇+2個中外論壇+12個主題論壇”,全面集聚政府主管領導、全球汽車企業領袖、汽車行業精英,共商汽車強國大計,落實國家提出的“碳達峰、碳中和”戰...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 革吉县| 揭西县| 黄冈市| 行唐县| 图们市| 拉孜县| 格尔木市| 鲁山县| 门头沟区| 新兴县| 内黄县| 龙游县| 霍州市| 稷山县| 昌图县| 商都县| 阿拉善左旗| 辰溪县| 蕲春县| 巴林左旗| 海城市| 丹凤县| 堆龙德庆县| 花莲县| 祁连县| 麻江县| 醴陵市| 淮滨县| 黄浦区| 承德市| 汤阴县| 石嘴山市| 曲靖市| 武汉市| 温宿县| 景德镇市| 灵石县| 乐东| 叙永县| 东明县| 伊金霍洛旗|