📄 text1.c
字号:
#include <REG51RC2.h>
#include <intrins.h>
unsigned char COM ; //command register
unsigned char DAT ; //data register
/*unsigned char code CGTAB[64]={ 0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02, //"年"代码=00H
0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00, //"月"代码=01H
0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00, //"日"代码=02H
0x11,0x0A,0x04,0x1F,0x04,0x1F,0x04,0x00, //"$"代码=03H
0x0E,0x00,0x1F,0x0A,0x0A,0x0A,0x13,0x00, //"元"代码=04H
0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //"℃"代码=05H
0x04,0x0A,0x15,0x04,0x04,0x04,0x04,0x00, //"↑"代码=06H
0x17,0x15,0x15,0x15,0x15,0x15,0x17,0x00}; //"10"代码=07H*/
unsigned char code sanjiaobo[]={0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00, //第一行
0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00, //第二行
0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00, //第三行
0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00, //第四行
0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00, //第五行
0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00, //第六行
0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00, //第七行
0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00, //第八行
};
unsigned char code Tab_z[12]={0x42,0x43,0x44,0x41,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
sbit Rs = P3^4;
sbit RW = P3^5;
sbit E = P3^6;
void Delay(unsigned int ms)
{
unsigned int i;
while(ms--)
{
for(i = 0; i< 250; i++){
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
unsigned char ReadCommand(void)
{
unsigned char iData;
Rs=0;
RW=1;
E=1; //延迟一段时间,建立控制信号
_nop_();
_nop_();
_nop_();
_nop_();
iData=P1;
return iData;
}
void WriteCommand(unsigned char command)
{
unsigned char wCom,rCom;
wCom=command;
rCom=ReadCommand();
rCom=rCom&0x80;
while(rCom!=0){ //it is busy
rCom=ReadCommand();
rCom=rCom&0x80;
}
//it is not busy
P1=wCom;
RW=0;
Rs=0;
E=0; //延迟一段时间,来建立信号
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
unsigned char ReadData(void)
{
unsigned char rData,rCom;
rCom=ReadCommand();
rCom=rCom&0x80;
while(rCom!=0){ //it is busy
rCom=ReadCommand();
rCom=rCom&0x80;
}
//it is not busy
RW=1;
Rs=1;
E=1;//延迟一段时间控制时序
_nop_();
_nop_();
_nop_();
_nop_();
rData=P1;
return rData;
}
void WriteData(unsigned char dat)
{
unsigned char wData,rCom;
wData=dat;
rCom=ReadCommand();
rCom=rCom&0x80;
while(rCom!=0){ //it is busy
rCom=ReadCommand();
rCom=rCom&0x80;
}
//it is not busy
P1=wData;
Rs=1;
RW=0;
E=0;
_nop_();
_nop_();
_nop_();
_nop_();
E=1; //此时建立高电平准备下降沿,写数据
_nop_();
_nop_(); //
_nop_();
_nop_();
E = 0;
}
void LCDPosition(unsigned int pos)
{
WriteCommand(pos | 0x80);
}
void InitLCD(void)
{
COM=0x01;
WriteCommand(COM);
Delay(1);
COM=0x38; //设置工作方式:8位数据接口,两行显示,5*7点阵字符(要显示5*11的数据就要将行显示设置为一行显示)
WriteCommand(COM);
Delay(1);
COM=0x06; //设置输入方式:数据读、写操作后,AC自动增一,数据读、写操作,画面不动
WriteCommand(COM);
Delay(1);
COM=0x0c; //设置显示方式:显示开,光标开,闪烁开
WriteCommand(COM);
Delay(1);
COM=0x40;
WriteCommand(COM);//设置第一次显示地址
Delay(1);
COM=0x01; //清屏
WriteCommand(COM);
Delay(1);
}
/*void Creat_CGRAM(void) //调用自己的字库时如同调用CGROM一样
{
unsigned char i,j,k,tmp;
tmp=0x40;//设置CGRAM地址的格式字 CGRAM地址格式很复杂 01 000 000 其中01是固定的 左起第一个000是代码的大小,最后的000是个偏移量(存储每个代码数据的偏移量)
k=0;
for(j=0;j<8;j++) {
for(i=0;i<8;i++) {
WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址
Delay(12);
WriteData(CGTAB[k]); // 向CGRAM写入自定义字符表的数据
k++;
Delay(12);
}
tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据
}
}
void Display_input_CGRAM(void)
{
unsigned char i;
COM=0x06; //设置输入方式:数据读、写操作后,AC自动增一,数据读、写操作,画面不动
WriteCommand(COM);
COM=0x80; //设置DDRAM
WriteCommand(COM);
for(i=0;i<=8;i++){
DAT=Tab_z[i];
WriteData(DAT);
Delay(10);
}
}
*/
void main(void)
{
// unsigned char i;
unsigned char i,j,k,tmp;
InitLCD();
Delay(100);
/* tmp=0x40;//设置CGRAM地址的格式字 CGRAM地址格式很复杂 01 000 000 其中01是固定的 左起第一个000是代码的大小,最后的000是个偏移量(存储每个代码数据的偏移量)
k=0;
for(j=0;j<8;j++) {
for(i=0;i<8;i++) {
WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址
Delay(12);
WriteData(CGTAB[k]); // 向CGRAM写入自定义字符表的数据
k++;
Delay(12);
}
tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据
}
//Creat_CGRAM();
//Display_input_CGRAM();
//Delay(1);
COM=0x80; //设置DDRAM
WriteCommand(COM);
LCDPosition(0x00);
Delay(1);
for(i=0;i<10;i++){
DAT=Tab_z[i];
WriteData(DAT);
}
Delay(100);
*/
tmp=0x40;//设置CGRAM地址的格式字 CGRAM地址格式很复杂 01 000 000 其中01是固定的 左起第一个000是代码的大小,最后的000是个偏移量(存储每个代码数据的偏移量)
k=0;
for(j=0;j<8;j++) {
for(i=0;i<8;i++) {
WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址
Delay(12);
WriteData(sanjiaobo[k]); // 向CGRAM写入自定义字符表的数据
k++;
Delay(12);
}
tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据
}
COM=0x80; //设置DDRAM
WriteCommand(COM);
LCDPosition(0x00);
Delay(1);
for(i=0;i<4;i++){
DAT=Tab_z[i];
WriteData(DAT);
}
LCDPosition(0x40);
for(i=4;i<12;i++){
DAT=Tab_z[i];
WriteData(DAT);
}
Delay(100);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -