⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 北京青云创新公司段式液晶的MSP430例程
💻 C
字号:
#include "LCD.h"

//液晶传送命令/数据函数 
void wr_lcd(uchar adc, uchar bits,uchar n)
{
    unsigned char i,temp;   
    uchar wrn;    
    if(n==1)
      wrn=WR1;
    else 
      wrn=WR2;    
    LCDOUT &= ~CS;
    delay(5);
    
    for(i=0;i<bits;i++)
    {  
       //LCDOUT &= ~WR1;       //wr1/2 上升沿写入
       LCDOUT |= wrn;   
       delay(5);
       temp = adc&0x80;   
       if(temp==0x80)        //判断高位是否为1 
         LCDOUT |=  DATA;    //为1则写入1
       else
         LCDOUT &= ~DATA;    //为0则写入0
       delay(5);
       
       LCDOUT &= ~wrn;       //wr1/2 上升沿写入     
       delay(5);
       LCDOUT |= wrn; 
       adc=adc<<1;
       delay(5);       
     }
}

uchar rd_lcd(uchar adc,uchar n)//读显示ram
{
  unsigned char i,temp;   
    uchar wrn;    
    if(n==1)
      wrn=WR1;
    else 
      wrn=WR2;    
    LCDOUT &= ~CS;
    delay(5);
    wr_lcd(0xc0,3,wrn);
    adc=adc<<2;
    wr_lcd(adc,6,wrn);
     for(i=0;i<4;i++)
    {  
       //LCDOUT &= ~WR1;       //wr1/2 上升沿写入
       LCDOUT |= wrn;   
       delay(5);
       temp = adc&0x80;   
       if(temp==0x80)        //判断高位是否为1 
         LCDOUT |=  DATA;    //为1则写入1
       else
         LCDOUT &= ~DATA;    //为0则写入0
       delay(5);
       
       LCDOUT &= ~wrn;       //wr1/2 上升沿写入     
       delay(5);
       LCDOUT |= wrn; 
       adc=adc<<1;
       delay(5);       
     }
     return 1;
    
  
}

//*********************************************//
// 5, 液晶显示数据函数 //
//入口参数:地址,BCD码。0---9显示数字;10无显示;11o;12F,13C,14E,15P.16L,17H,18A
void WRITE_LCD(unsigned int add,unsigned char num,unsigned char point,uchar n)
{ 
  wr_lcd(DDATA,3,n);//wr1选择模式 
  add=add<<2;
  wr_lcd(add,6,n);//wr1 选地址  
  switch (num)
    {
        case 0:                             //0:显示数字 0 //            
            if(point==0)
              wr_lcd(0xd7,8,n);            //发送八位数字
            else
              wr_lcd(0xdf,8,n);            //发送八位数字 
            break;
        case 1:
            if(point==0)
              wr_lcd(0x06,8,n);            //发送八位数字
            else
              wr_lcd(0x0e,8,n);            //发送八位数字
            break;
        case 2:
            if(point==0)
              wr_lcd(0xe3,8,n);            //发送八位数字
            else
              wr_lcd(0xeb,8,n);            //发送八位数字
            break;
        case 3:
            if(point==0)
              wr_lcd(0xa7,8,n);            //发送八位数字
            else
              wr_lcd(0xaf,8,n);            //发送八位数字
            break;
        case 4:
            if(point==0)
              wr_lcd(0x36,8,n);            //发送八位数字
            else
              wr_lcd(0x3e,8,n);            //发送八位数字
            break;
        case 5:
            if(point==0)
              wr_lcd(0xb5,8,n);            //发送八位数字
            else
              wr_lcd(0xbd,8,n);            //发送八位数字
            break;
        case 6:
            if(point==0)
              wr_lcd(0xf5,8,n);            //发送八位数字
            else
              wr_lcd(0xfd,8,n);            //发送八位数字
            break;
        case 7:
            if(point==0)
              wr_lcd(0x07,8,n);            //发送八位数字
            else
              wr_lcd(0x0f,8,n);            //发送八位数字 
            break;
        case 8:
           if(point==0)
              wr_lcd(0xf7,8,n);            //发送八位数字
            else
              wr_lcd(0xff,8,n);            //发送八位数字
            break;
        case 9:
            if(point==0)
              wr_lcd(0xb7,8,n);            //发送八位数字
            else
              wr_lcd(0xbf,8,n);            //发送八位数字
            break;
        case 10:                             //10:无显示 //
            if(point==0)
              wr_lcd(0x00,8,n);             
            else
              wr_lcd(0x08,8,n);             
            break;
        case 11:                              //11:显示字母 O //
            if(point==0)
              wr_lcd(0x33,8,n);            
            else
              wr_lcd(0x3b,8,n);             
            break;
        case 12:                             //12:显示字母F //
            if(point==0)
              wr_lcd(0x71,8,n);             
            else
              wr_lcd(0x79,8,n);             
            break;
        case 13:                            //13:显示字母C //
            if(point==0)
              wr_lcd(0xd1,8,n);            
            else
              wr_lcd(0xd9,8,n);              
            break;
        case 14:                            //14:显示字母E //
            if(point==0)
              wr_lcd(0xf1,8,n);           
            else
              wr_lcd(0xf9,8,n);               
            break;  
        case 15:                            //15:显示字母P //
            if(point==0)
              wr_lcd(0x73,8,n);           
            else
              wr_lcd(0x7b,8,n);               
            break;
        case 16:                            //16:显示字母L //
            if(point==0)
              wr_lcd(0xd0,8,n);           
            else
              wr_lcd(0xd8,8,n);               
            break;   
        case 17:                            //17:显示字母H //
            if(point==0)
              wr_lcd(0x76,8,n);           
            else
              wr_lcd(0x7e,8,n);               
            break;            
        case 18:                            //18:显示字母A //
            if(point==0)
              wr_lcd(0x77,8,n);           
            else
              wr_lcd(0x7f,8,n);               
            break;
        case 19:                            //19:显示字母U //
            if(point==0)
              wr_lcd(0xd6,8,n);           
            else
              wr_lcd(0xde,8,n);               
            break; 
        case 20:                            //20:显示- //
            if(point==0)
              wr_lcd(0x20,8,n);           
            else
              wr_lcd(0x28,8,n);               
            break;    
            
    default:                                //默认无显示 //
            if(point==0)
              wr_lcd(0x00,8,n);            
            else
              wr_lcd(0x08,8,n);            
            break;
       
      }
  
  LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。

}  
//************************************************//
//*********************************************//
// 5.5, 液晶上电初始化 //
void LCD_INIT(void){

   
    uint i;  
    
    for(i=0;i<60000;i++)
      ; 
    LCDDIR |= (CS+WR1+WR2+DATA);//cs、sclk、std脚为输出
    LCDOUT |= (CS+WR1+WR2+DATA);
    
    
    //wr1初始化
    wr_lcd(COMMAND,3,1);//wr1选择模式 
    wr_lcd(0x29,9,1);//wr1 写初始化命令字0010 1001:8位,命令代码+0=9位。专用初始化命令 
    //LCDOUT |= CS;
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
    
    wr_lcd(COMMAND,3,1);//wr1选择模式 
    wr_lcd(0x18,9,1);//wr1 定义RC振荡方式:选内部振荡器
    //LCDOUT |= CS;
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
     
    wr_lcd(COMMAND,3,1);//wr1选择模式 
    wr_lcd(0x01,9,1);//wr1 开振荡器
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
    
    wr_lcd(COMMAND,3,1);//wr1选择模式 
    wr_lcd(0x03,9,1);//wr1 开显示器
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
    
    
   
    //wr2初始化
    
    
    wr_lcd(COMMAND,3,2);//wr1选择模式 100
    wr_lcd(0x29,9,2);//wr1 写初始化命令字:8位,命令代码+0=9位。
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60); 
    
    wr_lcd(COMMAND,3,2);//wr1选择模式 
    wr_lcd(0x18,9,2);//wr1 定义RC振荡方式:选内部振荡器
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
    
    wr_lcd(COMMAND,3,2);//wr1选择模式 
    wr_lcd(0x01,9,2);//wr1 开振荡器
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
    delay(60);
    
    wr_lcd(COMMAND,3,2);//wr1选择模式 
    wr_lcd(0x03,9,2);//wr1 开显示器    
    LCDOUT |= (CS+WR1+WR2+DATA);//置高电平以实现低功耗。
     
    
    
   
    
   
    
}
void delay(uint n)
{
  uint i;
  for(i=0;i<n;i++)
    ;
}


   
    
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -