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

📄 1602.c

📁 液晶显示模块1602简单的测试程序
💻 C
字号:
# include <reg52.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 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
}
 /***********************************
函数功能:测试LCD忙碌状态子程序
入口参数:
出口参数:result
************************************/
/*bit lcd_bz()
{
	bit result;
	LCD1602_RS=0;
	LCD1602_RW=1;
	LCD1602_EN=1;
	result=(bit)(P1&0x80);
	LCD1602_EN=0;
	return result;
}  */
/****************************************************/ 
/**************写指令函数********************************/  
void LCD_write_command(unsigned char command)
{	  
      LCDIO=command;
      LCD1602_RS=0;   
      LCD1602_RW=0;
      LCD1602_EN=0;
      delay_nms(10);
	  LCD1602_EN=1;
	  LCD1602_EN=0;	//没有恢复指令则不能显示
}

/***************************************************/
/****************写数据函数************************/
void LCD_write_dat(unsigned char dat)
{
LCDIO=dat;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_EN=0;
delay_nms(1);
LCD1602_EN=1;
LCD1602_EN=0;	//没有恢复指令则不能正常显示
}
/****************************************************/ 
/***************设置显示位置**************************/
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 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地址的格式字
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;
      }
     LCD_dsp_string(1,1,"LCD TEST        ");//在第一行第一列显示“LCD TEST”
     LCD_dsp_string(1,2,"SUCCESSFUL      ");//在第二行第一列显示“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);
       }
    while (1);
}

⌨️ 快捷键说明

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