一、想出代码
#include<reg51.h>
#define uchar unsigned char
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar txt_5x7[]={
"一二三年月日克心度"
};
uchar code table[]={
0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,
0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,
0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,
0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,
0x00,0x00,0x00,0x0A,0x15,0x0A,0x04,0x00,
0x00,0x04,0x15,0x0E,0x1F,0x0E,0x11,0x00,
0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00
};
void delay(int x){
int i;
while(x--) for(i=0;i<120;i++);
}
char Busy(){
char a=0;
RS=0,RW=1,EN=1;
if(P0&0x80==0x80) a=1;
EN=0;
return a;
}
void W_CMD(uchar dat){
while(Busy());
RS=0,RW=0,EN=0;
P0=dat;
EN=1,delay(1),EN=0;
}
void W_DATA(uchar dat){
while(Busy());
RS=1,RW=0,EN=0;
P0=dat;
EN=1,delay(1),EN=0;
}
void Init_LCD(){
int i=0;
W_CMD(0x38);
W_CMD(0x01);
W_CMD(0x06);
W_CMD(0x0c);
W_CMD(0x40);
for(i=0;i<72;i++) W_DATA(table[i]);
}
void Show_txt(uchar x,uchar y,uchar i){
if(y==0) W_CMD(0x80 |x);
if(y==1) W_CMD(0xc0 |x);
W_DATA(i);
}
void Show_str(uchar x,uchar y,uchar *s){
int i=0;
if(y==0) W_CMD(0x80 |x);
if(y==1) W_CMD(0xc0 |x);
for(i=0;i<16;i++) W_DATA(s[i]);
}
void main(){
Init_LCD();
Show_str(0,0,"2020t08t26t ");
Show_txt(4,0,3);
Show_txt(7,0,4);
Show_txt(10,0,5);
Show_str(0,1,"29.3t ");
Show_txt(4,1,8);
while(1){
}
}
二、代码的细究
- code的探索:51单片机的存储区的关系 ,这里不多说。
- LCD的显示文字:总的过程为,先写入字模的数据,然后读出写入的数据信息,显示出来。