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

📄 lcd12864.c

📁 该代码来自2008年湖北电子设计大赛位移测量装置制作,主要实现位移的自动测量和手动测量,msp430单片机
💻 C
字号:
/***************************************
使用资源: P4
          P3
**************************************/
#include "common.h"
#include "lcd12864.h"
#include "ziku.h"
//*****************状态检查********************************* 
void StateCheck(void) 
{ uchar  cradd1; 
  LCD_RS_LO;
  LCD_RW_HI;
  LCD_DATA_DIR=0x00;
  do 
    { 
     LCD_EN_HI;
     cradd1=LCD_DATA_IN;
     LCD_EN_LO;
     } 
   while((cradd1&0x80)!=0); 
}

//***************写指令代码子程序(左)******************* 
void WriteCommand_L (uchar com1) 
{       LCD_CS1_LO;
        LCD_CS2_HI;       
        StateCheck();     //检查是否忙 
        LCD_RW_LO;   
        LCD_DATA_DIR=0xff;
         
        LCD_DATA_OUT=com1; 
         
         LCD_EN_HI;
         LCD_EN_LO;
}

//*****************写指令代码子程序(右)******************* 
void WriteCommand_R (uchar com2) 
{       LCD_CS1_HI;      
        LCD_CS2_LO; 
        StateCheck();     //检查是否忙
        LCD_RW_LO;
       
        LCD_DATA_DIR=0xff;      
        LCD_DATA_OUT=com2;
          
        LCD_EN_HI;       
        LCD_EN_LO;
}

//****************写显示数据子程序(左)********************** 
void WriteData_L (uchar dat1) 
{ 
        LCD_CS1_LO;
        LCD_CS2_HI;
        StateCheck();     //检查是否忙      
        LCD_RS_HI;     
        LCD_RW_LO;     
        LCD_DATA_DIR=0xff;     
        LCD_DATA_OUT=dat1;     
        LCD_EN_HI;
        LCD_EN_LO;
} 

//****************写显示数据子程序(右)********************** 
void WriteData_R(uchar dat2) 
{       
        LCD_CS1_HI;
        LCD_CS2_LO;       
        StateCheck();     //检查是否忙         
        LCD_RS_HI;
        LCD_RW_LO;       
        LCD_DATA_DIR=0xff;        
        LCD_DATA_OUT=dat2;
        LCD_EN_HI;
        LCD_EN_LO;
}

//******************清屏 ************************ 
void ClearScreen(void) 
{      uchar i,j; 
       for(i=0;i<8;i++) 
       {   WriteCommand_L(i|0xb8);      //设置页地址 
           WriteCommand_R(i|0xb8); 
           WriteCommand_L(0x40);       //设置列地址 
           WriteCommand_R(0x40); 
           for(j=0;j<64;j++)        //写0x00 
             { WriteData_L(0x00); 
               WriteData_R(0x00); 
             } 
       } 
}

//******************满屏 ************************ 
//====通过设置不同的内容可以使屏幕显示得另类
void AllScreen(void) 
{      uchar i,j; 
       for(i=0;i<8;i++) 
       {   WriteCommand_L(i|0xb8);      //设置页地址 
           WriteCommand_R(i|0xb8);

           WriteCommand_L(0x40);       //设置列地址 
           WriteCommand_R(0x40); 
           for(j=0;j<64;j++)        //写0xff 
             { WriteData_L(0x01); 
               WriteData_R(0x01); 
             } 
       } 
} 
//****************LCD初始化****************************** 
void Init_LCD (void) 
{   
   LCD_RST_DIR |=LCD_RST;
   LCD_RST_HI;
   LCD_RST_L0;
  
   LCD_CS1_DIR |= LCD_CS1;
   LCD_CS1_LO;
   
   LCD_CS2_DIR |= LCD_CS2;
   LCD_CS2_LO;
   
   LCD_RS_DIR |= LCD_RS;
   LCD_RS_LO;
   
   LCD_RW_DIR |= LCD_RW;
   LCD_RW_LO;
   
   LCD_EN_DIR |= LCD_EN;
   LCD_EN_LO;
   
    WriteCommand_L(0xc0);
    WriteCommand_R(0xc0);   //显示开始行 
    WriteCommand_L(0x3f);
    WriteCommand_R(0x3f);   //开显示 
    ClearScreen();//清屏
} 


//===============形式=========
//16*16的字符:利用这些参数改变,可以以不同大小来显示
void WriteWord (uchar colu,uchar  page, const uchar code)//page:页  colum:列    code:字代码 
{ 
  uchar i,j,colum0; 
  uchar flag;
  uchar colum;
  
  uchar dis_count=0;//显示计数  
  colum=colu*16;//显示内容的宽度
  
    for(j=0;j<2;j++) 
    {    WriteCommand_L(page|0xb8);         //页 
         WriteCommand_R(page|0xb8); 
         colum0=colum; 
         if(colum0>63)                   //右屏 
           { colum0=colum0-64; 
                       WriteCommand_R(colum0|0x40); 
                       flag=1; 
            } 
         else                           //左屏 
           { 
             WriteCommand_L(colum0|0x40); 
             flag=0; 
            } 
       //********************* 
        for(i=0;i<16;i++)   //每页占的字节数
            { 
               if(flag==0) 
                  { 
                     WriteData_L(dis_table[32*code+dis_count]); 
                   } 
               else 
                  { 
                    WriteData_R(dis_table[32*code+dis_count]); 
                  } 
                dis_count++; //显示计数
                    if(colum0==64)      //列=64 
                       { 
                          colum0=0; 
                           if(flag==0) 
                             { 
                               flag=1; 
                               WriteCommand_R(colum0|0x40); 
                              } 
                            else 
                              { 
                                 break; 
                              } 
                        } 
            } 
      page++; 
    } 
} 


//=================显示字符=======================
//=======8*16的字符:
void Writechar (uchar colu,uchar  page, const uchar code)//page:页  colum:列    code:字代码 
{ 
  uchar i,j,colum0; 
  uchar flag;
  uchar colum;
  
  uchar dis_count=0;//显示计数
  
  colum=colu*8;//显示内容的宽度
  
    for(j=0;j<2;j++) 
    {    WriteCommand_L(page|0xb8);         //页 
         WriteCommand_R(page|0xb8); 
         colum0=colum; 
         if(colum0>63)                   //右屏 
           { colum0=colum0-64; 
                       WriteCommand_R(colum0|0x40); 
                       flag=1; 
            } 
         else                           //左屏 
           { 
             WriteCommand_L(colum0|0x40); 
             flag=0; 
            } 
       //********************* 
        for(i=0;i<8;i++)   //每页占的字节数
            { 
               if(flag==0) 
                  { 
                     WriteData_L(dis_char[16*code+dis_count]); 
                   } 
               else 
                  { 
                    WriteData_R(dis_char[16*code+dis_count]); 
                  } 
                dis_count++; //显示计数
                    if(colum0==64)      //列=64 
                       { 
                          colum0=0; 
                           if(flag==0) 
                             { 
                               flag=1; 
                               WriteCommand_R(colum0|0x40); 
                              } 
                            else 
                              { 
                                 break; 
                              } 
                        } 
            } 
      page++; 
    } 
} 


//==========显示字符串
void Writestring(uchar colu,uchar  page, uchar *code)//page:页  colum:列    code:字代码 
{
    uchar code0=0,colu0=0,page0=0;
    
    colu0=colu;
    page0=page;
    
    uchar i;
    
    while(code[i]!='\0')
    {
        code0=code[i]-48;
        Writechar(colu0,page0,code0);
        i++;
        colu0++;
        if(colu0==16)
        {
          colu0=0;  
          page0++;
        }
    }
}
void Writenumber(float m,int n,int k,int r)        //显示常数 m为数字 n为小数位数  k为列 r为页数
{
   int i,x=99,s=99;
    int a[8],w;    
   m= m*pow(10,n);  
    if(m<0)
    {
      m=-m;
      Writechar(k-1,r, 77); 
    } 
    else Writechar(k-1,r, 76);
    x=7-k-n;
    w=k;
  for(i=7-k;i>=0;i--)
   {        
     if(x==i&&x!=0) a[i]=75;
     else {
       a[i] = (int)m%10;
       m=m/10;       
     }
   }
  for(i=0;i<=7-k;i++)
  {    
    if(a[i]==0&&s==99)
    {
      if(a[i+1]==75)Writechar(w++,r,a[i]);    
      else _NOP();
    }
    else 
    {   
      if(w<8)Writechar(w++,r,a[i]);      
      s=0;
    }
  }
 
}

⌨️ 快捷键说明

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