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

📄 lcd_gdf.c

📁 MSP430单片机的LCD控制驱动。欢迎下载
💻 C
字号:
//在程序中实现了写图形液晶的标准程序
//2003.4.29
//copyright wangqi liulili
//#include   "msp430x14x.h" 
//#include   "string.h"
#include   "lcd_gdf.h"
#include   "ziku.h"
//内部函数如下:
void write_com(void);                       //开显示命令
void write_data(char csab,unsigned char value);                       //写显示数据命令
void send_data(unsigned char x);                             //595数据函数
void send_en(void);                                          //使能函数
//void clk_595(void);                                          //595脉冲函数
void delay(unsigned int x);
void send_sel(unsigned char x) ;                             //CSB,CSA,RS
void write_col(char csab,unsigned int x);                    //写LCD列
void write_line(char csab,unsigned int x);                   //写LCD行
void write_page(char csab,unsigned int x);                   //写LCD页
void csab(char x);                                           //选择写入LCD哪一块
//******************************************************************************************
//可用的外部函数如下:
void clr(void);                                              //清屏
void disp(int x,int y,char aa[32]);                          //写一个汉字
void disp_char(int x,int y,char ee[16]);                     //写一个字母,不推荐使用,若写字母,最好采用函数disp_char_long
void disp_char_long(unsigned char x,unsigned char y,char *array);//写一串字母
void disp_picture(char *a);                                  //写图片
 
void clr(void)
{  unsigned int i,j,m;
   write_com();
   for(m=0;m<=2;m++)
   {
//   write_page(m,0xb8);
   for(i=0xb8;i<=0xbf;i++)
    {  write_page(m,i);
  //   delay(50);   
       write_col(m,0x40);    
 //    delay(50);          
       for(j=0x0;j<=0x3f;j++)
       {
        write_data(m,0x00);
 //       delay(50);
        }
    }
   }   
}
void disp_picture(char *a)
{
   int i,j,m;
   unsigned int k=0; 
   for(i=0xb8;i<=0xbf;i++)
   {
      for(m=0;m<=2;m++)
      {  
        write_page(m,i);
       write_col(m,0x40);            
        for(j=0x40;j<=(0x40+63);j++)
        {  
//         write_col(m,j);
         write_data(m,a[k]);
         k++;
        }   
      }
   }
  
}
void disp_char(int x,int y,char ee[16])
{   
   char right_bit,left_bit,i,block,pag,col;
   char bb[8];//,cc[8],dd[8];
 //  aa{32]=a[32];
   pag=(x/8)+0xb8;
   left_bit=x%8;
   right_bit=8-left_bit;
   write_com();   
   for(i=0;i<=7;i++)
   {  
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      bb[i]=ee[i]<<left_bit;
      write_page(block,pag);
      write_col(block,col);
      write_data(block,bb[i]);
     
    }  
    for(i=0;i<=7;i++)
   { 
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      bb[i]=(ee[i]>>right_bit) | (ee[i+8]<<left_bit);
      write_page(block,pag+1);
      write_col(block,col);
      write_data(block,bb[i]);
     
    }   
       for(i=0;i<=7;i++)
   {
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      bb[i]=ee[i+8]>>right_bit;
      write_page(block,pag+2);
      write_col(block,col);
      write_data(block,bb[i]);
     
    }  
   
}
void disp_char_long(unsigned char x,unsigned char y,char *array)
{
   char i,l,m;
   l=strlen(array);
   for(i=0;i<=l-1;i++)
   {
    m=array[i]-' ';
    disp_char(x,y+8*i,(char *)asc[m]);
   }
}
void disp(int x,int y,char aa[32])
{  int right_bit,left_bit,i,block,pag,col;
   char bb[16],cc[16],dd[16];
 //  aa{32]=a[32];
   pag=(x/8)+0xb8;
   left_bit=x%8;
   right_bit=8-left_bit;
   for(i=0;i<=15;i++)
   {  
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      bb[i]=aa[i]<<left_bit;
      write_page(block,pag);
      write_col(block,col);
      write_data(block,bb[i]);
     
    }  
    for(i=0;i<=15;i++)
   { 
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      cc[i]=(aa[i]>>right_bit) | (aa[i+16]<<left_bit);
      write_page(block,pag+1);
      write_col(block,col);
      write_data(block,cc[i]);
     
    }   
    for(i=0;i<=15;i++)
   {
      block=(y+i)/64;
      col=(y+i)%64+0x40;
      dd[i]=aa[i+16]>>right_bit;
      write_page(block,pag+2);
      write_col(block,col);
      write_data(block,dd[i]);
     
    }  
} 
void write_col(char y,unsigned int x)
{  unsigned int col;
   col=x;
  csab(y);
//  send_sel(0x00);     
//P1OUT=y<<6;
P1OUT&=0XEF;
  send_data(col);
  
}
void write_page(char y,unsigned int x)
{  unsigned int page;
   page=x;
   csab(y);
//   send_sel(0x00);
//P1OUT=y<<6;
P1OUT&=0XEF;
   send_data(page);

}
void write_line(char y,unsigned int x)
{  unsigned int line;
   line=x;
   csab(y);
//   send_sel(0x00);
//P1OUT=y<<6;
P1OUT&=0XEF;
   send_data(line);

}
void write_com(void)
{  unsigned int disp,startline;
   disp=0x3f;   
   startline=0xc0;
//   csab(0);
//   send_sel(0x00);
  P1OUT=0X0F;   //RS=0 EN=0 CSA/CSB=0
  send_data(disp);      //开显示
  delay(10);  
  P1OUT=0X0F;   //RS=0 EN=0 CSA/CSB=0
  send_data(startline); //设置起始行
  delay(10);   
  P1OUT=0X4F;   //RS=0 EN=0 CSA/CSB=1
   send_data(disp);     //块2开显示
   delay(10);      
  P1OUT=0X4F;   //RS=0 EN=0 CSA/CSB=1
   send_data(startline);
  delay(10);   
  P1OUT=0X8F;   //RS=0 EN=0 CSA/CSB=2
   send_data(disp);
  delay(10);      
  P1OUT=0X8F;   //RS=0 EN=0 CSA/CSB=2
   send_data(startline);
  delay(10);   
}
void write_data(char y,unsigned char value)
{  
   csab(y);
//   send_sel(0x01);
//P1OUT=y<<6;
P1OUT|=0X10;
   send_data(value);
}
void send_data(unsigned char x)   
{
 P4DIR=0XFF;
 P4OUT=x;
 send_en();
}
void send_sel(unsigned char x)   
{
  if (x&0x01==0x01)
    { P5OUT|=0X02;}
  else
    { P5OUT&=0Xfc;}
  
//  clk_595();      
}   
//void clk_595(void)
//{
// P5OUT &=0x0fe;
// delay(1);
// P5OUT|=0x01;
// delay(1);
 }
 void delay(unsigned int x)
 { int i;
   i=x;
   while(i!=0) i--;
 }    
void send_en(void)
{
 P1DIR|=0X20;         //产生 _|-|_
// P5OUT|=0X40;
// P5OUT&=0XBF;
 P1OUT&=0XDF;
 delay(0);
 P1OUT|=0X20;
 delay(0);
 P1OUT&=0XDF;
// P1OUT|=0X20; 
}
void csab(char x)
{switch(x)
  {
   case 0:
     { P1OUT=0X00;
       //send_sel(0x00);          //CSB
       //send_sel(0x00);          //CSA
     }
       break;
   case 1:
     { P1OUT=0X80;
//       send_sel(0x01);          //CSB
//       send_sel(0x00);          //CSA
      }
       break;
   case 2:
     { P1OUT=0X40;
//       send_sel(0x00);          //CSB
//       send_sel(0x01);          //CSA
      }
       break;
   default: 
     { P1OUT=0X00; 
//       send_sel(0x00);          //CSB
//       send_sel(0x00);          //CSA   
     }
   }    
}  

⌨️ 快捷键说明

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