#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 自定义字符 一共可写入16个自字义字符,写入后可用其CGRAM代码直接提取显示。
uchar code Xword[]={
0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //℃,代码 0x00
0x00,0x00,0x00,0x00,0xff,0x00,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,0xFF, //日,代码 0x07
};
sbit RS = P3^5;
sbit EN = P3^4;
sbit RW = P3^6;
void delay1ms(uint time);//延时N毫秒
void init_1602(void); //初始化1602
void writecmd_1602(uint cmd); //写指令函数
void writedata_1602(uchar dat); //写数据函数
void CgramWrite(void) { // 装入CGRAM //
uchar i;
writecmd_1602(0x40); // CGRAM地址设为00处
for(i=0;i<64;i++)
{
writedata_1602(Xword[i]);// 按数组写入数据
}
}
int main()
{
init_1602(); //初始化1602
writecmd_1602(0xC0); //设置显示的起始位置
writedata_1602(0x00);
writedata_1602(0x01);
writedata_1602(0x02);
writedata_1602(0x03);
writedata_1602(0x04);
writedata_1602(0x05);
writedata_1602(0x06);
writedata_1602(0x07);
writedata_1602(0x20);
while(1);
return 0;
}
void delay1ms(uint time)
{
unsigned char a,b,i;
for(i = time; i != 0;i–)
for(b=199;b>0;b–)
for(a=1;a>0;a–);
}
void init_1602(void)
{
writecmd_1602(0x38); //模式设置,8位数据,2行显示,5*8点阵字符
writecmd_1602(0x0F); //显示设置,显示开,光标显示,光标闪烁
writecmd_1602(0x06); //显示模式,写入新数据后光标右移
writecmd_1602(0x01); //清屏
delay1ms(5);
CgramWrite();
}
void writecmd_1602(uint cmd)
{
RS = 0;
RW = 0;
P1 = cmd;
EN = 1;
delay1ms(1);
EN = 0;
}
void writedata_1602(uchar dat)
{
RS = 1;
RW = 0;
P1 = dat;
EN = 1;
delay1ms(1);
EN = 0;
}
|