基于msp430單片機1602 DS1802溫度顯示

發(fā)布時(shí)間:2016-9-13 11:21    發(fā)布者:designapp
關(guān)鍵詞: msp430 , 1602 , DS1802
  最近調好了DS1802溫度傳感器,用的是430G2553單片機,溫度保留兩位小數。把源代碼分享給大家。
  /*****************************************
  msp430g2553實(shí)現1602溫度顯示
  來(lái)源:汪中原的博客
  ******************************************/
  #include
  #define uchar unsigned char
  #define uint unsigned int
  #define CPU_F ((double)1000000)
  #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) //延時(shí)x us
  #define ds_1 P2OUT |=BIT3 //DS18B20數據端高電平輸入(P2.3端口)
  #define ds_0 P2OUT &=~BIT3 //DS18B20數據端低電平輸入(P2.3端口)
  #define lcdrs_1 P2OUT |=BIT1; //1602 RS寫(xiě)數據(P2.1端口)
  #define lcdrs_0 P2OUT &=~BIT1; //1602 RS寫(xiě)指令(P2.1端口)
  #define lcden_1 P2OUT |=BIT0; //1602使能信號開(kāi)(P2.0端口)
  #define lcden_0 P2OUT &=~BIT0; //1602使能信號關(guān)(P2.0端口)
  uchar table[]="wzy,come on"; //開(kāi)機第一行顯示
  uchar table1[]="believe yourself"; //開(kāi)機第二行顯示
  uint temp,T;
  float temp_f;
  uchar shi,ge,dian1,dian2,num; //定義溫度十位、各位、小數點(diǎn)后一位、后二位
  /*************************************************************
  * 名 稱(chēng):void init(void)
  * 功 能:1602顯示配置端口初始化
  * 入口參數:無(wú)
  * 出口參數:無(wú)
  * 說(shuō) 明: P1、P2端口設為輸出低電平
  *************************************************************/
  void init(void)
  {
  WDTCTL=WDTPW + WDTHOLD;
  P1DIR=0xff;
  P2DIR=0x1f;
  P1OUT=0x00;
  P2OUT=0x00;
  }
  /*************************************************************
  * 名 稱(chēng):void delay(uint a)
  * 功 能:簡(jiǎn)單的延時(shí)
  * 入口參數:uint a
  * 出口參數:無(wú)
  * 說(shuō) 明: 可作為1602顯示簡(jiǎn)單的延時(shí)
  *************************************************************/
  void delay(uint a)
  {
  uint i,j;
  for(i=a;i>0;i--)
  for(j=110;j>0;j--);
  }
  /*************************************************************
  * 名 稱(chēng):void write_date(uchar date)
  * 功 能:1602寫(xiě)數據
  * 入口參數:date
  * 出口參數:無(wú)
  * 說(shuō) 明: 用P1口輸入數據
  *************************************************************/
  void write_date(uchar date)
  {
  lcdrs_1;
  P1OUT=date;
  delay(5);
  lcden_1;
  delay(5);
  lcden_0;
  }
  /*************************************************************
  * 名 稱(chēng):void write_com(uchar com)
  * 功 能:1602寫(xiě)指令
  * 入口參數:com
  * 出口參數:無(wú)
  * 說(shuō) 明: 用P1口輸入指令
  *************************************************************/
  void write_com(uchar com)
  {
  lcdrs_0;
  P1OUT=com;
  delay(5);
  lcden_1;
  delay(5);
  lcden_0;
  }
  /*************************************************************
  * 名 稱(chēng):void uinit()
  * 功 能:初始化及其他顯示設置指令
  * 入口參數:無(wú)
  * 出口參數:無(wú)
  * 說(shuō) 明: 1602初始化設置
  *************************************************************/
  void uinit()
  {
  lcden_0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
  }
  /*************************************************************
  * 名 稱(chēng):void LCD_display()
  * 功 能:1602顯示
  * 入口參數:無(wú)
  * 出口參數:無(wú)
  * 說(shuō) 明: 將前幾個(gè)函數綜合起來(lái),顯示字符內容及區域
  *************************************************************/
  void LCD_display()
  {
  init();
  uinit();
  write_com(0x80);
  for(num=0;num>= 1;
  ds_0;
  delay_us(6);
  ds_1;
  delay_us(8);
  P2DIR &= ~BIT3;
  _NOP();
  if(P2IN & BIT3)
  temp |= 0x80;
  delay_us(45);
  P2DIR |=BIT3;
  ds_1;
  delay_us(10);
  }
  return temp;
  }
  /*************************************************************
  * 名 稱(chēng):void write_temp(uchar data)
  * 功 能:DS18B20寫(xiě)入數據
  * 入口參數:data
  * 出口參數:無(wú)
  * 說(shuō) 明: 寫(xiě)入一個(gè)字節
  *************************************************************/
  void write_temp(uchar data)
  {
  uchar i;
  for(i = 0; i >= 1;
  ds_1;
  delay_us(10);
  }
  }
  /*************************************************************
  * 名 稱(chēng):void temp_change(void)
  * 功 能:DS18B20溫度轉化指令
  * 入口參數:無(wú)
  * 出口參數:無(wú)
  * 說(shuō) 明: 跳過(guò)rom并溫度轉化
  *************************************************************/
  void temp_change(void)
  {
  write_temp(0xcc);
  write_temp(0x44);
  }
  /*************************************************************
  * 名 稱(chēng):uint temp_get()
  * 功 能:DS18B20溫度獲取
  * 入口參數:無(wú)
  * 出口參數:T
  * 說(shuō) 明: 獲取溫度并四舍五入為保留兩位小數
  *************************************************************/
  uint temp_get()
  {
  uchar a,b;
  DS18B20_init();
  delay(1);
  write_temp(0xcc);
  write_temp(0xbe);
  a=read_temp(); //讀低8位
  b=read_temp(); //讀高8位
  T=b;
  T 0;a--)
  delay_us(60000);
  do
  {
  a = DS18B20_init();
  }
  while(a);
  dis_temp(temp_get());
  init();
  uinit();
  write_com(0x80+0x0b);
  write_date('0'+shi);
  delay(5);
  write_date('0'+ge);
  delay(5);
  write_date('.');
  delay(5);
  write_date('0'+dian1);
  delay(5);
  write_date('0'+dian2);
  delay(5);
  }
  }
  效果圖:上面的數字即為當前溫度
  

                                
                                                               
                                
               
本文地址:http://selenalain.com/thread-173700-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页