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

📄 text1.c

📁 51单片接在LCD1602汉字显示的c语言写的驱动程序。
💻 C
字号:
#include <reg51.h>
/*unsigned char table1[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 
                           0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 
                           0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 
                           0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E, 
                           0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 
                           0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01, 
                           0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00, 
                           0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心图案 */
unsigned char table1[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,     	//"年"代码=00H 
           					    0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00,     	//"月"代码=01H
           						0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,     	//"日"代码=02H
           						0x11,0x0A,0x04,0x1F,0x04,0x1F,0x04,0x00,     	//"$"代码=03H
           						0x0E,0x00,0x1F,0x0A,0x0A,0x0A,0x13,0x00,     	//"元"代码=04H
           						0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,    	//"℃"代码=05H
           			 			0x04,0x0A,0x15,0x04,0x04,0x04,0x04,0x00,     	//"↑"代码=06H
           			 			0x17,0x15,0x15,0x15,0x15,0x15,0x17,0x00};   	//字符℃ 
unsigned char table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};

#define     CLEARSCREEN     LCD_write_command(0x01)

/**************定义接口************************/

#define     LCDIO      P1 
sbit LCD1602_RS=P3^4;     
sbit LCD1602_RW=P3^5;    
sbit LCD1602_EN=P3^6;   

/**************定义函数************************/ 
void LCD_write_command(unsigned char command);//写入指令函数 
void LCD_write_dat(unsigned char dat);//写入数据函数 
void LCD_set_xy( unsigned char x, unsigned char y );//设置显示位置函数 
void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat);//显示一个字符函数 
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s);//显示字符串函数 
void LCD_init(void);//初始化函数 
void delay_nms(unsigned int n);//延时函数 
/********************************************/

/************初始化函数****************/ 
void LCD_init(void) 
{  
CLEARSCREEN;//clear screen  
LCD_write_command(0x38);//set 8 bit data transmission mode  
LCD_write_command(0x0c);//open display (enable lcd display) 
LCD_write_command(0x80);//set lcd first display address  
CLEARSCREEN;//clear screen 
} 
/****************************************************/

/**************写指令函数********************************/   
void LCD_write_command(unsigned char command) 
{ 
      LCDIO=command; 
      LCD1602_RS=0;    
      LCD1602_RW=0; 
      LCD1602_EN=0; 
      LCD1602_EN=1; 
      delay_nms(10); 
} 
/***************************************************/ 
/****************写数据函数************************/ 
void LCD_write_dat(unsigned char dat) 
{ 
LCDIO=dat; 
LCD1602_RS=1; 
LCD1602_RW=0; 
LCD1602_EN=0; 
delay_nms(1); 
LCD1602_EN=1; 
} 
/****************************************************/

/***************设置显示位置**************************/ 
void LCD_set_xy( unsigned char x, unsigned char y ) 
{ 
unsigned char address; 
if (y == 1)  
     address = 0x80 + x; 
else  
        address =0xc0+ x; 
LCD_write_command(address);  
} 
/***************************************************/

/****************显示一个字符**********************/ 
void LCD_dsp_char( unsigned char x,unsigned char y,unsigned char dat) 
{ 
LCD_set_xy( x, y );  
LCD_write_dat(dat); 
} 
/**********************************************/

/***************显示字符串函数***************/ 
void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s) 
{ 
       LCD_set_xy( X, Y );  
       while (*s)   
       { 
         LCD_write_dat(*s);    
         s ++; 
       } 
} 
/***********************************************/

/********** 延时**********************/ 
void delay_nms(unsigned int n)       
{ 
       unsigned int i=0,j=0; 
       for (i=n;i>0;i--) 
       for (j=0;j<10;j++);   
} 
/**************************************/

/***********主函数**************/ 
void main(void) 
{ 
	unsigned char i,j,k,tmp; 
	LCD_init(); 
	delay_nms(100); 
	tmp=0x40;//设置CGRAM地址的格式字   CGRAM地址格式很复杂  01 000 000  01是固定的  左起第一个000是代码的大小,最后的000是个偏移量(存储每个代码数据的偏移量)
	k=0; 
	for(j=0;j<8;j++) { 
        for(i=0;i<8;i++) {  
           LCD_write_command(tmp+i); // 设置自定义字符的 CGRAM 地址   
           delay_nms(2); 
           LCD_write_dat(table1[k]); // 向CGRAM写入自定义字符表的数据 
           k++; 
           delay_nms(2); 
         } 
        tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据  
      } 
     LCD_dsp_string(1,1,"LCD TEST        ");//
     LCD_dsp_string(1,2,"SUCCESSFUL      ");//
     for (i=0;i<4;i++) 
       { 
         LCD_dsp_char( 12+i,1,i);//在第一行第12列位置显示心图案的上半部 
         delay_nms(1); 
       } 
     for (i=4;i<8;i++) 
       { 
         LCD_dsp_char( 12+i-4,2,i);//在第二行第12列位置显示心图案的下半部 
         delay_nms(1); 
       } 

	
	for(i=0;i<30;i++){
		delay_nms(1000);
	}
	CLEARSCREEN;
	LCD_dsp_string(0,1,"XIONGJIALE");
	LCD_dsp_string(5,2,"ICEXIONG");
    while (1); 
} 
/********************************************************************/

⌨️ 快捷键说明

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