www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久

電子開(kāi)發(fā)網(wǎng)

電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> 單片機(jī) >> 正文

51單片機(jī)的液晶顯示溫度計(jì)程序

作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011-5-22

#include <reg51.h>
#include <intrins.h>

sbit  RST   = P2^0;
sbit  CLK   = P2^1;
sbit  DQ    = P2^2;
sbit  TSOR  = P2^3;
sbit  ALERT =P2^4;
sbit  RS    = P2^7;
sbit  RW    = P2^6;
sbit  EN    = P2^5;
/*------------------------------------------全局變量-------------------------------------------------------*/
static unsigned char temp1,temp2;         //溫度值的整數(shù)部分、小數(shù)部分
static unsigned char pos,posset;           //數(shù)字電位器電位值、設(shè)定值
static unsigned char min,sec;              //分鐘、秒
static unsigned char count;                //Timer0中斷計(jì)數(shù)
static unsigned char minset;               //設(shè)定的分鐘數(shù)
static unsigned char status1,status2;  //狀態(tài)標(biāo)志
bit   stop,timeover;     //定時(shí)停止、結(jié)束
static char line0[] ="     00:00      ";
static char line1[] ="   . C         W";

/*-------------------------------------------------------------------------------------------------------------*/
void          InitInterupt();
void          KeyboardDelay();
/*-------------------------------------------LCD驅(qū)動(dòng)函數(shù)------------------------------------------------*/
void          DelayL();
void     DelayS();
void     WriteCommand(unsigned char c);
void     WriteData(unsigned char c);
void     ShowChar(unsigned char pos,unsigned char c);
void     ShowString(unsigned char line,char *ptr);
void     InitLcd();
/*----------------------------------------------鍵盤(pán)-程序--------------------------------------------------*/
unsigned char GetKey();
/*---------------------------------------------數(shù)字溫度計(jì)驅(qū)動(dòng)-------------------------------------------*/
void          ChangePos(bit sel,unsigned char pos1,unsigned char pos2);
/*------------------------------------------溫度傳感器驅(qū)動(dòng)----------------------------------------------*/
void          Delay15();
void          Delay60();
void          Delay100ms();
void          Write0TS();
void          Write1TS();
bit           ReadTS();
void          ResetTS();
void          WriteByteTS(unsigned char byte);
unsigned char  ReadByteTS();
void          InitTS();
void          GetTempTS();
/*-------------------------------------------------主程序---------------------------------------------------*/
void main (void) {
     char code str1[]  ="  Hello World!  ";
     char code str2[]  ="   2002-10-20   ";
  unsigned char i;

     SP=0x50;
  ALERT=0;                 //報(bào)警燈滅
  TSOR=1;                 //1-wire總線釋放

     DelayL();
  InitLcd();               //初始化LCD
  DelayL();
     ShowString(0,str1);    //啟動(dòng)畫(huà)面
     ShowString(1,str2);
  for(i=0;i<15;i++)
       Delay100ms();
     InitInterupt();         //初始化中斷設(shè)置

     minset=10;               //缺省定時(shí)10分鐘
     posset=0;                //缺省電位器值0
  min=minset;     //初始化數(shù)據(jù)
  pos=posset;
  sec=0;           
     count=0;
     P1=0xF0;
  status1=0;
  status2=0;
  stop=1;
  timeover=0;

     ChangePos(0,255-pos,255-pos);     //設(shè)置電位器

  InitTS();                //初始化溫度計(jì)
  while(1)      //循環(huán)顯示溫度值
  {
       GetTempTS();
    line1[0]=0x20;
    i=temp1;
if(i>39)       //超過(guò)40攝氏度,告警燈亮
 ALERT=1;
    if(i>99)      //超過(guò)100攝氏度,顯示溫度的百位
    {
      line1[0]=0x31;   
      i-=100;
       }
       line1[1]=i/10+0x30;     //顯示溫度的十位
    line1[2]=i%10+0x30;    //顯示個(gè)位
    line1[4]=temp2+0x30;   //顯示小數(shù)位
    if(timeover)               //若定時(shí)結(jié)束,則電位器緩慢復(fù)0
    {
         for(;pos>0;pos--)
      {
         ChangePos(0,255-pos,255-pos);   
         _nop_();
   _nop_();
      }
   timeover=0;
   posset=0;
    }
       if(pos>posset)       //若按鍵修改電位器位置
    {
      for(;pos>posset;pos--)   //則緩變到設(shè)定值
         {
         ChangePos(0,255-pos,255-pos);   
         _nop_();
      _nop_();
      }
      ChangePos(0,255-pos,255-pos);
    }
    else if(pos<posset)  
    {
      for(;pos<posset;pos++)
         {
         ChangePos(0,255-pos,255-pos);   
         _nop_();
      _nop_();
      }
      ChangePos(0,255-pos,255-pos);
    }
       i=pos; 
    line1[9]=0x20;     //顯示電位器等級(jí)值
    if(i>99)
    {
      line1[9]=i/100+0x30;
         i=i%100;
    }
       line1[10]=i/10+0x30;
       line1[11]=i%10+0x30;
    ShowString(1,line1);
    line0[5]=min/10+0x30;   //顯示時(shí)間
    line0[6]=min%10+0x30;
       line0[8]=sec/10+0x30;
    line0[9]=sec%10+0x30;
    ShowString(0,line0);   
       Delay100ms();
  }
}

void InitInterupt()
{
  TMOD=0x21;               //初始化中斷設(shè)置
  TL1=0xFD;
  TH1=0xFD;
  PX0=1;
  EA=1;                
  ES=1;                
  PCON=0;   
  TR1=1;
  SCON=0x50;


  TL0=0x00;                 //定時(shí)0.05m
  TH0=0x4C; 
  ET0=1;

  EX0=1;               
  IT0=1;
}

void KeyboardDelay()        //按鍵中斷延時(shí)
{
 unsigned char i,j;
 i=0x40;
 j=0xFF;
 while(i--)
  while(j--);
}

/*--------------------------------------------中斷處理-----------------------------------------------------*/
Int0_process() interrupt 0 using 0
{
  unsigned char key;
  unsigned char keycode[]= "TP";
  unsigned char step[3]={1,2,5};
  EA=0;
  key=GetKey();                //獲得按鍵值
  switch(key)
  {
   case 0:
     stop=!stop;
  min=minset;
     sec=0;
     break;
   case 1:
   case 2:
   case 3:
     if(stop)
  {
   minset+=step[key-1];
  if(minset>60)
    minset=0;
  min=minset;
  }
     break;
   case 5:
   case 6:
   case 7:
     if(stop)
  { 
   minset-=step[key-5];
  if(minset>60)
    minset=0;
  min=minset;
  }
     break;
   case 9:
   case 10:
   case 11:
   posset+=step[key-9];
     break;
   case 13:
   case 14:
   case 15:
   posset-=step[key-13];
     break;
   default:
     break;
  }
  TR0=!stop;
  KeyboardDelay();
  P1=0xF0;
  EA=1;
}

Timer0_process() interrupt 1 using 0
{
  EA=0;
  TR0=0;
  TL0=0x00;
  TH0=0x4C;
  count++;
  if(count==20)      //如果到累計(jì)定時(shí)到達(dá)1s
  {
   if(sec==0)       //定時(shí)處理
   {
     if(min==0)      //總定時(shí)到,則置結(jié)束標(biāo)志
    timeover=1;
     else
  {
      min--;
      sec=59;
     } 
   }
   else
     sec--;
   count=0;
  } 
  TR0=1;
  EA=1;
}
/*--------------------------------------LCD驅(qū)動(dòng)子程序--------------------------------------------------*/
void DelayL()                          
{unsigned char i,j;
 i=0xF0;
 j=0xFF;
 while(i--)
  while(j--);
}

void DelayS()             
{
 unsigned char i;
 i=0x1F;
 while(i--);
}

void WriteCommand(unsigned char c)      
{
 DelayS();
 EN=0;
 RS=0;
 RW=0;
 _nop_();
 EN=1;
 P0=c;
 EN=0;
}

void WriteData(unsigned char c)         
{
 DelayS();
 EN=0;
 RS=1;
 RW=0;
 _nop_();
 EN=1;
 P0=c;
 EN=0;
 RS=0;
}

void ShowChar(unsigned char pos,unsigned char c)
{
 unsigned char p;
 if(pos>=0x10)
    p=pos+0xB0;
 else
    p=pos+0x80;
 WriteCommand(p);
 WriteData(c);
}

void ShowString(unsigned char line,char *ptr)   
{
 unsigned char l,i;
 l=line<<4;
 for(i=0;i<16;i++)
   ShowChar(l++,*(ptr+i));
}    

void InitLcd()
{
 DelayL();
 WriteCommand(0x38);
 WriteCommand(0x38);
 WriteCommand(0x06);
 WriteCommand(0x0C);
 WriteCommand(0x01);
 WriteCommand(0x80);
}    
/*---------------------------------------------鍵盤(pán)子程序-------------------------------------------------*/
unsigned char GetKey()
{
  unsigned k,t,i,j;
  k=P1;
  k=k&0xF0;
  i=0;
  while((k&0x10)&&i<4)
  {
 i++;
 k=k>>1;
  }  
  k=0x01;
  j=0;
  while(j<4)          
  {
    P1=0xFF^k;
 _nop_();
    t=P1;
    t=t^0xFF;
    t=t&0xF0;
    if(t)
   break;
    j++;
 k=k<<1;
  }
  k=j*4+i;
  return k;
}
/*-----------------------------------------數(shù)字溫度計(jì)驅(qū)動(dòng)子程序--------------------------------------*/
void  ChangePos(bit sel,unsigned char pos1,unsigned char pos2)
{  unsigned char i;
     RST=0;
     DQ=0;
     CLK=0;
  RST=1;
  DQ=sel;
     _nop_();
     CLK=1;
     _nop_();
  CLK=0;
     for(i=0;i<8;i++)
  {
  if(pos1&0x80)
       DQ=1;
  else
    DQ=0;
     _nop_();
     CLK=1;
     _nop_();
  CLK=0;
  pos1=pos1<<1;
 }
 for(i=0;i<8;i++)
 {
  if(pos2&0x80)
       DQ=1;
  else
    DQ=0;
     _nop_();
     CLK=1;
     _nop_();
     CLK=0;
  pos2=pos2<<1;
 }
    RST=0;
}

/*------------------------------------------溫度傳感器子程序-------------------------------------------*/
void Delay100ms()              //延時(shí)100ms
{
 unsigned  char i,j,k;
 for(i=0;i<8;i++)
   for(j=0;j<25;j++)
     for(k=0;k<250;k++);
}

void Delay15()                 //延時(shí)15us
{
 unsigned  char i;
 for(i=0;i<8;i++);
}

void Delay60()                 //延時(shí)60us
{
 unsigned  char i;
 for(i=0;i<30;i++);
}

void Write0TS()                //寫(xiě)bit 0
{
     TSOR=1;
     TSOR=0;
  Delay15();
  Delay15();
  Delay15();
  Delay15();
     TSOR=1;
  _nop_();
  _nop_();
}

void Write1TS()                 //寫(xiě)bit 1
{
     TSOR=1;
     TSOR=0;
     _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
     TSOR=1;
     _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
     Delay15();
     Delay15();
     Delay15();
}

bit ReadTS()
{
 bit b;
     TSOR=1;
     TSOR=0;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
     TSOR=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
     b=TSOR;           
     Delay15();
     Delay15();
     Delay15();
  _nop_();
  _nop_();
  return b;
}

void ResetTS()                //復(fù)位
{unsigned char i;

   TSOR=1;
   TSOR=0;
   for(i=0;i<8;i++)
     Delay60();
   TSOR=1;             
   while(TSOR);        
   for(i=0;i<8;i++)
     Delay60();
}

void WriteByteTS(unsigned char byte)   //寫(xiě)一個(gè)字節(jié)(byte)
{unsigned char i;
 for(i=0;i<8;i++)
 {
   if(byte&0x01)
     Write1TS();
   else
     Write0TS();
   byte=byte>>1;
 }
}

unsigned char ReadByteTS()          //讀一個(gè)字節(jié)(byte)
{
 unsigned char i,j;
 bit           b;
 j=0;
 for(i=0;i<8;i++)
 {
   b=ReadTS();
   if(b)
     j+=1;
   j=_cror_(j,1);
 }
 return j;
}
          
void InitTS()                 //初始化溫度轉(zhuǎn)換
{
     ResetTS();              
  WriteByteTS(0xCC);      
  WriteByteTS(0x4E);      
  WriteByteTS(0x64);      
     WriteByteTS(0x8A);     
     WriteByteTS(0x1F);     
}

void GetTempTS()                //獲取溫度
{
     ResetTS();              
  WriteByteTS(0xCC);      
  WriteByteTS(0x44);      
  Delay100ms();          
     ResetTS();             
  WriteByteTS(0xCC);     
   WriteByteTS(0xBE);     
    
  temp2=ReadByteTS();
  temp1=ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  ReadByteTS();
  temp1=temp1<<4;
  temp1+=(temp2&0xF0)>>4;
   temp2=(temp2&0x0F)?5:0;
}
液晶顯示溫度計(jì)程序

Tags:51單片機(jī),c語(yǔ)言,電子溫度計(jì)  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢
www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久
天堂一区二区在线| 狠狠色狠狠色合久久伊人| 91精品国产乱码| 精品一区二区三区免费毛片爱| 欧美韩日一区二区三区| 欧美视频一区二区三区在线观看| 日本视频中文字幕一区二区三区| 久久色在线观看| 91同城在线观看| 蜜臀99久久精品久久久久久软件| 久久九九99视频| 在线免费av一区| 极品美女销魂一区二区三区| 亚洲欧美日韩国产成人精品影院| 欧美一区二区私人影院日本| 国产91精品精华液一区二区三区| 亚洲综合成人网| 337p粉嫩大胆噜噜噜噜噜91av| 97se亚洲国产综合自在线不卡| 日韩精品成人一区二区在线| 国产欧美精品一区二区色综合| 欧美日韩精品一区二区天天拍小说 | 精品在线一区二区| 1024成人网色www| 欧美一区二区视频网站| www.在线欧美| 麻豆成人久久精品二区三区小说| 亚洲天堂成人在线观看| 日韩女优制服丝袜电影| 91丨porny丨首页| 久久福利视频一区二区| 一区二区在线电影| 国产日韩欧美高清| 91精品国产美女浴室洗澡无遮挡| 99精品视频在线免费观看| 免费成人av资源网| 亚洲男人的天堂一区二区| 精品欧美一区二区久久| 欧美这里有精品| 国产1区2区3区精品美女| 首页国产欧美久久| 亚洲婷婷综合久久一本伊一区| 欧美tk丨vk视频| 在线视频综合导航| 成人av集中营| 国产一区在线观看麻豆| 午夜激情久久久| 成人免费一区二区三区视频 | 欧美日韩视频第一区| 成人app软件下载大全免费| 久久99久久99| 午夜天堂影视香蕉久久| 成人免费在线播放视频| 国产三级精品三级在线专区| 日韩欧美国产一区二区三区| 在线欧美日韩国产| 99久久99久久综合| 国产精品一区二区三区99| 麻豆极品一区二区三区| 五月婷婷激情综合| 一级做a爱片久久| 亚洲日本电影在线| 国产精品亲子伦对白| 欧美精品一区二区在线观看| 91精品国产aⅴ一区二区| 在线观看成人小视频| 99九九99九九九视频精品| 国产传媒日韩欧美成人| 精品一区二区三区的国产在线播放| 偷窥国产亚洲免费视频| 亚洲一区二区三区在线| 一区二区三区四区激情| 日韩美女视频一区| 中文字幕日韩av资源站| 国产精品午夜久久| 国产欧美一区二区三区鸳鸯浴 | 久久―日本道色综合久久| 欧美一级黄色大片| 欧美一卡二卡在线| 欧美一级黄色片| 日韩视频一区二区三区在线播放| 欧美高清性hdvideosex| 在线日韩一区二区| 日韩欧美www| 一区二区三区中文字幕电影 | 日韩精品一区二区在线观看| 欧美日韩综合不卡| 欧美综合天天夜夜久久| 色婷婷精品久久二区二区蜜臂av | 久久国产精品第一页| 奇米777欧美一区二区| 蜜桃视频一区二区| 成人综合在线视频| 看电影不卡的网站| 麻豆精品精品国产自在97香蕉| 美女视频免费一区| 激情久久五月天| 国产精品一区二区三区网站| 国产成人午夜精品影院观看视频 | 自拍偷拍国产亚洲| 亚洲欧美另类小说| 亚洲愉拍自拍另类高清精品| 亚洲18影院在线观看| 婷婷久久综合九色综合伊人色| 婷婷激情综合网| 麻豆国产欧美日韩综合精品二区| 国产自产2019最新不卡| 国产不卡免费视频| av亚洲精华国产精华精| 色噜噜久久综合| 欧美日韩成人综合| 日韩欧美在线观看一区二区三区| 精品国产免费一区二区三区香蕉| 久久老女人爱爱| 中文字幕一区二区视频| 亚洲激情校园春色| 午夜电影网亚洲视频| 麻豆精品在线观看| 国产.精品.日韩.另类.中文.在线.播放| 成人黄页毛片网站| 91福利区一区二区三区| 欧美一级二级三级乱码| 国产亚洲欧美激情| 亚洲精品自拍动漫在线| 日韩精品成人一区二区在线| 国产自产2019最新不卡| 99久久夜色精品国产网站| 欧美综合视频在线观看| 日韩欧美的一区二区| 国产亚洲欧美中文| 亚洲综合免费观看高清完整版在线| 日本最新不卡在线| 国产高清久久久| 在线影院国内精品| 日韩一区二区麻豆国产| 国产欧美日韩另类视频免费观看 | 国产成人综合视频| 在线视频国内一区二区| 欧美不卡视频一区| 亚洲欧美在线观看| 日韩精品成人一区二区在线| 国产凹凸在线观看一区二区| 欧美性xxxxxxxx| 精品国产乱码久久久久久蜜臀| 欧美韩国日本综合| 日日夜夜精品视频天天综合网| 国产伦精一区二区三区| 日本久久电影网| 久久影院午夜片一区| 亚洲精品自拍动漫在线| 九九在线精品视频| 91久色porny | 欧美日韩国产一二三| 久久久不卡网国产精品一区| 亚洲午夜免费福利视频| 国产精品综合av一区二区国产馆| 在线视频国产一区| 久久久久久久久久看片| 亚洲大片在线观看| 成人av在线播放网址| 欧美一个色资源| 亚洲免费观看高清完整| 久久99精品久久久| 欧美丝袜自拍制服另类| 国产精品视频九色porn| 日本一道高清亚洲日美韩| 99久久精品免费| 精品1区2区在线观看| 亚洲综合一区在线| 成人动漫视频在线| 日韩欧美一区二区三区在线| 亚洲精品免费电影| 国产电影精品久久禁18| 日韩一区二区三区视频在线| 亚洲欧美日韩综合aⅴ视频| 国产综合成人久久大片91| 欧美日韩国产首页在线观看| 中文字幕一区二区5566日韩| 韩国成人在线视频| 69堂成人精品免费视频| 亚洲欧美日韩一区二区| 国产精品1024| 日韩午夜在线影院| 亚洲一二三四区| 成人动漫一区二区| 久久奇米777| 男女激情视频一区| 欧美视频你懂的| 亚洲婷婷综合色高清在线| 国产99久久久国产精品免费看| 精品精品国产高清一毛片一天堂| 亚洲五码中文字幕| 91蜜桃婷婷狠狠久久综合9色| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美tk—视频vk| 日本一道高清亚洲日美韩| 欧美系列日韩一区| 亚洲免费观看高清在线观看| 成人精品在线视频观看| 国产亚洲成av人在线观看导航 |