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

📄 1602 zhongwen.c

📁 液晶1602显示中文
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=" BM-TR/IS ";
uchar code table1[]="  BM-R/IS  ";
sbit lcden=P3^4;  //LCD使能位引脚定义
sbit lcdrs=P3^5;  //LCD数据命令选择引脚定义
sbit dula=P2^6;	  //数码管段选
sbit wela=P2^7;	  //数码管位选
uchar num; 
//----------------------------------------------------------------

//----------------------------------------------------------------

uchar tab[] ={  
             0x04,0x04,0x1f,0x15,0x15,0x1f,0x04,0x04, //中
             0x04,0x04,0x04,0x04,0x0A,0x0A,0x11,0x11, //人
             0x0A,0x1B,0x0E,0x0B,0x04,0x1F,0x04,0x04, //华
             0x1F,0x11,0x1F,0x14,0x1F,0x14,0x12,0x19, //民
             0x0A,0x0A,0x1F,0x0A,0x1F,0x00,0x0A,0x11, //共
             0x0C,0x18,0x0B,0x1F,0x1B,0x1B,0x08,0x08, //和
             0x1F,0x1F,0x15,0x1F,0x15,0x17,0x1F,0x1F, //国
             0x00,0x0A,0x1F,0x1F,0x1F,0x0E,0x04,0x00, //心型图案
             };
uchar code tab1[]={
			0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //℃,代码 0x00
			0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00, //一,代码 0x01
			0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, //二,代码 0x02
			0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, //三,代码 0x03
			0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, //四,代码 0x04
			0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, //五,代码 0x05
			0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, //六,代码 0x06
			0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00, //日,代码 0x07
			};
//----------------------------------------------------------------

void delay(uint z)//延时子程序 
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=100;y>0;y--);
}



void write_com(uchar com) //写命令 
{
    lcdrs=0;
    P0=com;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
}


void write_data(uchar date)  //写数据 
{
    lcdrs=1;
    P0=date;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
}


void init() //初始化 
{
    dula=0;
    wela=0;
    lcden=0;
    write_com(0x38);//显示模式设置
    write_com(0x0c);//不显示光标
    write_com(0x06);
    write_com(0x01);//显示清零 
    write_com(0x80+0x10);
}


//写地址函数
void LCD_set_rc( uchar r, uchar c )
{
    uchar address;    
    if (r == 1)
    address = 0x80 + c;
    else if(r == 2)
    address = 0xc0 + c;    
    write_com( address );
}


//写一个字符
void LCD_write_char(uchar r, uchar c, uchar date)
{
  LCD_set_rc( r, c );                 //写地址
  write_data( date );
}

//向CGRAM写入字模数据
void write_CGRAM( uchar TAB[], uchar n )     //定义输入CGRAM的字模代码,字模的个数
{
    uchar tmp;
    uchar i;
    uchar j;
    uchar k;
    tmp = 0x40;                       //设置CGRAM地址的格式字
    k = 0;
    for( j = 0; j < n; j++)
    {
    	for(i = 0; i < 8; i++)
        {
         	write_com(tmp + i); // 设置自定义字符的 CGRAM 地址
         	write_data(TAB[k]);   // 向CGRAM写入自定义字符表的数据
        	k++;
         }
         tmp = tmp + 0x08;
     }
}

//主函数
void main(void)
{
    uchar c;                  //定义显示的列位置
    uchar i;
    init();
    write_CGRAM(tab, 8);
    delay(2);
	while(1)
	{        
	    for( i = 0, c = 21; i < 7; i++)  //在液晶板上的第1行第21个位置显示中华人民共和国
	    {
	        LCD_write_char(1, c, i);
	        c++;
	    }
	    LCD_write_char(2, 17, 7);        //显示心型图案
	    LCD_write_char(2, 31, 7);       //显示心型图案 	  

        for(num=0;num<16;num++)						  
        {
            write_com(0x18);   //整屏左移 
            delay(400);
		}
		delay(1000); 	
		write_com(1);
		delay(1);
		write_com(0x80+0x10);
        for(num=0;num<9;num++)
        {
            write_data(table[num]);	//第一行显示BM-TR/IS 
            delay(100);
        }
		write_com(0x80+0x52);
        for(num=0;num<9;num++)
        {
            write_data(table1[num]); //第二行显示BM-R/IS 
            delay(100);
        } 
        for(num=0;num<16;num++)
        {
            write_com(0x18);   //整屏左移 
            delay(400);
		}
	    delay(1000); 
		write_com(1);
		delay(1);	
	}

}

⌨️ 快捷键说明

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