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

📄 12864_st7920.c

📁 51单片机LCM12864 ST7920控制芯片 , 带中文字库 驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************************************************
 ---  LCM12864   ST7920控制芯片
 ---  数据口采用并口方式
 ---  
 ---  
 ---  
 ---  
 ---  2009.04.29   by 

***************************************************************************************************************/
#include <stdio.h>
#include <math.h>
#include <reg52.h>
#include <string.h>

unsigned char code IC_DAT[];
unsigned char code IC_DAT2[];
unsigned char code pic1[];
unsigned char code pic2[];


sbit    RS =P2^4;
sbit    WRD=P2^5;
sbit    E=  P2^6;
sbit    PSB=P2^1;
sbit    RES=P2^3;


void    TransferData(char data1,bit DI);
void    display(void);
void    display_grapic(void);
void    delayms(unsigned int n);
void    DisplayLine(unsigned char line1,unsigned char line2);
void    DisplayGraphic(unsigned char code *adder);
void    delay(unsigned int m);
void    lcd_mesg(unsigned char code *adder1,unsigned char Lw);
void    lcd_mesg_line(unsigned char code *adder1,unsigned char a,unsigned char b);


unsigned char code IC_DAT[]={
"桂林电子科技大学"  
"杭州电子科技大学"
"西安电子科技大学"
"成都电子科技大学"
"中国电子科技大学"
};
unsigned char code IC_DAT2[]={
"海纳百川宽容为先"
"欲成大业诚信为先"
"游弋商海济世为先"
"人立于世守法为先"
};


/***********************************************************************************************************************
程序名称 	---  
程序功能 	---  
			---  
			---  
 			---  

*************************************************************************************************************************/
void     initinal(void)           //
          {
           delay(40);             //大于40MS的延时程序
           PSB=1;                 //设置为8BIT并口工作模式
           delay(1);              //延时
           RES=0;                 //复位
           delay(1);              //延时
           RES=1;                 //复位置高
           delay(10);
           TransferData(0x30,0);  //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
           delay(100);            //大于100uS的延时程序
           TransferData(0x30,0);  //Function Set
           delay(37);             ////大于37uS的延时程序
           TransferData(0x08,0);  //Display on Control
           delay(100);            //大于100uS的延时程序
           TransferData(0x10,0);  //Cursor Display Control光标设置
           delay(100);            //大于100uS的延时程序
           TransferData(0x0C,0);  //Display Control,D=1,显示开
           delay(100);            //大于100uS的延时程序
           TransferData(0x01,0);  //Display Clear
           delay(10);             //大于10mS的延时程序
           TransferData(0x06,0);  //Enry Mode Set,光标从右向左加1位移动
           delay(100);            //大于100uS的延时程序
          }


/***********************************************************************************************************************
程序名称 	---  
程序功能 	---  
			---  
			---  
 			---  

*************************************************************************************************************************/
void     initina2(void)           //LCD显示图片(扩展)初始化程序
          {
           delay(40);             //大于40MS的延时程序
           PSB=1;                 //设置为8BIT并口工作模式
           delay(1);              //延时
           RES=0;                 //复位
           delay(1);              //延时
           RES=1;                 //复位置高
           delay(10);

           TransferData(0x36,0);  //Extended Function Set RE=1: extended instruction
           delay(100);            //大于100uS的延时程序
           TransferData(0x36,0);  //Extended Function Set:RE=1: extended instruction set
           delay(37);             ////大于37uS的延时程序
           TransferData(0x3E,0);  //EXFUNCTION(DL=8BITS,RE=1,G=1)
           delay(100);            //大于100uS的延时程序
           TransferData(0x01,0);  //CLEAR SCREEN
           delay(100);            //大于100uS的延时程序
          }


void    main(void)
     {
         while(1)
	    {
		  initina2();            //调用LCD显示图片(扩展)初始化程序
  
          DisplayGraphic(pic1);  //显示图片2
          delayms(200);

 /*
 		  DisplayGraphic(pic3);  //显示图片3
          delayms(200);
*/
          initinal();   		 //调用LCD字库初始化程序
          delay(100);            //大于100uS的延时程序
          lcd_mesg_line(IC_DAT2,1,2);      //显示中文汉字1
          delayms(240);
          delayms(240);
 	  
          initinal();   		 //调用LCD字库初始化程序
          delay(100);            //大于100uS的延时程序 
          lcd_mesg(IC_DAT,1);    //从第2行开始显示连续的4行
          delayms(240);
		  delayms(240);
        }
      }


/***********************************************************************************************************************
程序名称 	---  LCD显示1行函数
程序功能 	---  例如要在LCD的第2行显示IC_DAT[]中的第1行汉字,则只需调用lcd_mesg_line(IC_DAT2,1,0) 即可
入口参数	---  *adder1:	要显示汉字的地址指针
 				 a:		LCD的显示行数					a的值 0~3  分别表示LCD的	1~4行
				 b:		adder1中将要显示的汉字的行数	b的值 0~3  分别表示汉字的	1~4行
			---  
 			---  

*************************************************************************************************************************/
void   lcd_mesg_line(unsigned char code *adder1,unsigned char a,unsigned char b)
{
	unsigned char i;
    switch( a )
	{
		case 0:
   			TransferData(0x80,0);  //0x80是LCD第1行的显示地址
			break;
		case 1:
       	 	TransferData(0x90,0);  //0x90是LCD第2行的显示地址
 			break;
		case 2:
        	TransferData(0x88,0);  //0x88是LCD第3行的显示地址
			break;
		case 3:
        	TransferData(0x98,0);  //0x98是LCD第4行的显示地址
			break;
      	}

        delay(100);

	adder1=adder1+b*16;		   //算出adder1中的从第几行开始显示的地址
	for(i=0;i<16;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}
}

/***********************************************************************************************************************
程序名称 	---  LCD显示连续4行函数
程序功能 	---  例如要显示IC_DAT[]中的第2行开始的连续4行汉字,则只需调用lcd_mesg(IC_DAT,1) 即可
入口参数	---  *adder1:	要显示汉字的地址指针
	 				 Lw:	adder1中的从第几行开始显示					Lw=0  表示  第1行;以此类推
			---  
 			---  

*************************************************************************************************************************/
void   lcd_mesg(unsigned char code *adder1,unsigned char Lw)
{
	unsigned char i;

		adder1=adder1+Lw*16;   //算出adder1中的从第几行开始显示的地址

        TransferData(0x80,0);  //0x80是LCD第1行的显示地址
        delay(100);
	for(i=0;i<16;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}

        TransferData(0x90,0);  //0x90是LCD第2行的显示地址
        delay(100);
	for(i=0;i<16;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}

        TransferData(0x88,0);  //0x88是LCD第3行的显示地址
        delay(100);
	for(i=0;i<16;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}

        TransferData(0x98,0);  //0x98是LCD第4行的显示地址
        delay(100);
	for(i=0;i<16;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}
}

/***********************************************************************************************************************
程序名称 	---  
程序功能 	---  
			---  

⌨️ 快捷键说明

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