您当前的位置:五五电子网电子知识单片机-工控设备51单片机液晶显示温度计程序 正文
液晶显示温度计程序

液晶显示温度计程序

点击数:7317 次   录入时间:03-04 11:58:09   整理:http://www.55dianzi.com   51单片机

#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;         //温度值的整数部分、小数部分
static unsigned char pos,posset;           //数字电位器电位值、设定值
static unsigned char min,sec;              //分钟、秒
static unsigned char count;                //Timer0中断计数
static unsigned char minset;               //设定的分钟数
static unsigned char status1,status2;  //状态标志
bit   stop,timeover;     //定时停止、结束
static char line0[] ="     00:00      ";
static char line1[] ="   . C         W";

/*-------------------------------------------------------------------------------------------------------------*/
void          InitInterupt();
void          KeyboardDelay();
/*-------------------------------------------LCD驱动函数------------------------------------------------*/
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();
/*----------------------------------------------键盘-程序--------------------------------------------------*/
unsigned char GetKey();
/*---------------------------------------------数字温度计驱动-------------------------------------------*/
void          ChangePos(bit sel,unsigned char pos1,unsigned char pos2);
/*------------------------------------------温度传感器驱动----------------------------------------------*/
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;                 //报警灯灭
  TSOR=1;                 //1-wire总线释放

     DelayL();
  InitLcd();               //初始化LCD
  DelayL();
     ShowString(0,str1);    //启动画面
     ShowString(1,str2);
  for(i=0;i<15;i++)
       Delay100ms();
     InitInterupt();         //初始化中断设置

     minset=10;               //缺省定时10分钟
     posset=0;                //缺省电位器值0
  min=minset;     //初始化数据
  pos=posset;
  sec=0;           
     count=0;
     P1=0xF0;
  status1=0;
  status2=0;
  stop=1;
  timeover=0;

     ChangePos(0,255-pos,255-pos);     //设置电位器

  InitTS();                //初始化温度计
  while(1)      //循环显示温度值
  {
       GetTempTS();
    line1[0]=0x20;
    i=temp1;
if(i>39)       //超过40摄氏度,告警灯亮
 ALERT=1;
    if(i>99)      //超过100摄氏度,显示温度的百位
    {
      line1[0]=0x31;   
      i-=100;
       }
       line1[1]=i/10+0x30;     //显示温度的十位
    line1[2]=i%10+0x30;    //显示个位
    line1[4]=temp2+0x30;   //显示小数位
    if(timeover)               //若定时结束,则电位器缓慢复0
    {
         for(;pos>0;pos--)
      {
         ChangePos(0,255-pos,255-pos);   
         _nop_();
   _nop_();
      }
   timeover=0;
   posset=0;
    }
       if(pos>posset)       //若按键修改电位器位置
    {
      for(;pos>posset;pos--)   //则缓变到设定值
         {
         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_();

[1] [2] [3]  下一页


本文关键字:程序  温度计  51单片机单片机-工控设备 - 51单片机