📄 1602 zhongwen.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 + -