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

液晶显示温度计程序

点击数:7317 次   录入时间:03-04 11:58:09   整理:http://www.55dianzi.com   51单片机
      _nop_();
      }
      ChangePos(0,255-pos,255-pos);
    }
       i=pos; 
    line1[9]=0x20;     //显示电位器等级值
    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;   //显示时间
    line0[6]=min%10+0x30;
       line0[8]=sec/10+0x30;
    line0[9]=sec%10+0x30;
    ShowString(0,line0);   
       Delay100ms();
  }
}

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


  TL0=0x00;                 //定时0.05m
  TH0=0x4C; 
  ET0=1;

  EX0=1;               
  IT0=1;
}

void KeyboardDelay()        //按键中断延时
{
 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)      //如果到累计定时到达1s
  {
   if(sec==0)       //定时处理
   {
     if(min==0)      //总定时到,则置结束标志
    timeover=1;
     else
  {
      min--;
      sec=59;
     } 
   }
   else
     sec--;
   count=0;
  } 
  TR0=1;
  EA=1;
}
/*--------------------------------------LCD驱动子程序--------------------------------------------------*/
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);
}    
/*---------------------------------------------键盘子程序-------------------------------------------------*/
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;
}
/*-----------------------------------------数字温度计驱动子程序--------------------------------------*/
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++)

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


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