这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 使用430制作的水表---液晶显示

共1条 1/1 1 跳转至

使用430制作的水表---液晶显示

助工
2014-11-04 19:18:31     打赏
#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430x41x.h>

//*========================================================

//*========================================================

void ClrLcd(void)
{
  unsigned int i;
  for(i=0;i<17;i++)
  {
      LCDMEM=0;; 
  }
}
void InitLcd(void)
{
    LCDCTL = LCD4MUX + LCDP1;    
    P5SEL = 0xFF;
    BTCTL |= BTFRFQ0;
    ClrLcd();

}
void OpenLcd(void)
{
    LCDCTL|=LCDON; 
    LcdRunData=0;
    LcdShowNum=0;
    LcdParseEn=1;
}
void DispLay(unsigned char Station,unsigned char Num)
{
    const unsigned char LcdTable[11]={0x7d,0x60,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b,0x00};
    LCDMEM[Station]=LcdTable[Num];
}
void LcdDataFull(unsigned char MemShowStr,unsigned char ShowFg)
{
    unsigned char i,k;
    //GloBuf[0]-GloBuf[3]--->原始数据
    //GloBuf[4]-GloBuf[11]-->分解后的数据
    for(i=0;i<4;i++)
    {
         k=GloBuf & 0xf0;
         k=k>>4;
         GloBuf[11-(i+i+1)]=k;
         k=GloBuf & 0x0f;
         GloBuf[11-(i+i)]=k;
         
    }
    for(i=MemShowStr;i<8;i++)    
    {
        DispLay(i,GloBuf[4+i]);
    }  
    LCDMEM[0]|=0x01;
    if(ShowBit[0]&0x01){LCDMEM[8]|=0x04;}else{LCDMEM[8]&=0xfb;}//--->M
    if(ShowBit[0]&0x02){LCDMEM[0]|=0x02;}else{LCDMEM[0]&=0xfd;}//--->累计
    if(ShowBit[0]&0x04){LCDMEM[0]|=0x04;}else{LCDMEM[0]&=0xfb;}//--->购水
    if(ShowBit[0]&0x08){LCDMEM[0]|=0x08;}else{LCDMEM[0]&=0xf7;}//--->剩余
    if(ValveOpenSt){LCDMEM[0]|=0x20;}else{LCDMEM[0]&=0xdf;}//--->开
    if(ValveClosSt){LCDMEM[0]|=0x40;}else{LCDMEM[0]&=0xbf;}//--->关
    if(ShowBit[1]&0x01){LCDMEM[5]|=0x80;}else{LCDMEM[5]&=0x7f;}//--->.
    if(DisturbFg){LCDMEM[3]|=0x80;}else{LCDMEM[3]&=0x7f;}//--->干扰
    if(CardErr){LCDMEM[7]|=0x80;}else{LCDMEM[7]&=0x7f;}//--->卡错
    if(PowerLowFg){LCDMEM[8]|=0x08;}else{LCDMEM[8]&=0xf7;}//--->低压
    if(ShowBuy){LCDMEM[6]|=0x80;}else{LCDMEM[6]&=0x7f;}//--->速购
}
void LcdParse(void)
{
    if(LcdParseEn)
    {
        if(SecondsConn&0x04)
        {
            if(LcdRunData>3)
            { 
                 LcdRunData=0;
                 LcdShowNum++;
            }
            else
            {
                 LcdRunData++; 
            }
            ClrLcd();
            ShowBit[0]=0;
            ShowBit[1]=0;
            ShowBit[1]|=0x01;
            switch(LcdShowNum)
            {                      
                  case 0x00 ://第03种显示方式数据提取到显示缓冲区---累计使用量
                            ShowBit[0]|=0x03;
                            RamCopy(GloBuf,Overal,4);
                            LcdDataFull(1,1);
                  break;
                  case 0x01 ://第01种显示方式数据提取到显示缓冲区---最新购买量        
                            ShowBit[0]|=0x05;
                            RamCopy(GloBuf,BuyData,4);
                            LcdDataFull(1,1);
                  break;
                  case 0x02 ://第02种显示方式数据提取到显示缓冲区---当前剩余量       
                            ShowBit[0]|=0x09;
                            if(OverdraftSt)
                            {
                                RamCopy(GloBuf,OverData,4);
                                LcdDataFull(2,1);
                                LCDMEM[1]=0x02;
                            }
                            else
                            {
                                RamCopy(GloBuf,Residual,4);
                                LcdDataFull(1,1);
                            }
                  break;
                  case 0x03 ://第01种显示方式数据提取到显示缓冲区---版本号1107  
                            ShowBit[0]=0;
                            ShowBit[1]=0;
                            ShowBit[1]|=0x01;
                            LCDMEM[0]=0;
                            LCDMEM[1]=0x75;//----N
                            LCDMEM[2]=0x4e;//----0
                            LCDMEM[3]=0x02;//-----
                            LCDMEM[4]=0x60;//----1
                            DispLay(5,0x02);//---2   
                            LCDMEM[6]=0x7d;//----0
                            DispLay(7,0x02);//---2 
                            LCDMEM[8]=0;
                  break;
                  default:
                            LcdShowEn=1;
                            if(!PowerLowFg)
                            {
                                LcdShowEn=0;
                                LCDCTL&=~LCDON;; 
                            }
                            LcdRunData=0;
                            LcdShowNum=0;
                            LcdParseEn=0;
                            
                  break;                        
            }
            SecondsConn&=0xfb; 
        }   
    }
}

 


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]