LCD2004 LCD1602显示自定义汉字详解
1.1 打开取字模软件
1.2 新建图像8×8
1.3 描绘自定义汉字,只用后5×8点阵(因为LCD2004/LCD1602每个显示单元为5×8点阵)
1.5 取模方式C51格式
- 复制字模代码,给每一个自定义图汉字/图标定义一个数组
1.6 LCD2004共可显示80个字符(LCD1602共可显示32个字符,原理相同,程序通用)
1.7 只需根据不同的硬件注意PIN口的定义就能正确显示
// .c 文件 // - #include<reg51.h>
- #include<intrins.h> // _nop_();
- #include"lcd.h"
- //#include"temp.h"
- //#include"ds1302.h"
- //#include"i2c.h"
-
-
- sbit K1=P3^0; //数据-
- sbit K2=P3^1; //数据+
- sbit K3=P3^2; //设置
-
-
-
- sbit BZ=P1^5; //蜂鸣器
-
- uchar Set[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-
- uchar sheng[]={0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00}; //“生”字字模
- uchar ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; //“日”字字模
- uchar kuai[]={0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00}; //“快”字字模
- uchar le[]={0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00}; //“乐”字字模
-
-
-
-
- void IntConfiguration();
-
- uchar SetState=0,SetPlace=10;
- uchar SetState2=0,SetPlace2=10;
-
- void Delay10ms(void); //误差 0us
- void Delayms(unsigned char c);
- void Delay(uint y);
-
-
- /*******************************************************************************
- * 函数名 : main
- * 函数功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void main()
- {
- uint i;
- uint count=0;
-
- LcdInit();
-
- IntConfiguration();
-
- K3=1;
-
- Delay10ms();
- Delay(1);
- Delayms(1);
-
-
-
- for(i=0;i<8;i++) //1 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //2 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+1);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //3 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //4 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+3);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //5 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //6 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+5);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //7 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //8 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+7);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //9 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //10 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+9);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //11 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //12 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //13 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //14 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+13);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //15 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //16 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //17 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //18 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+17);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //19 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //20 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+19);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //21 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //22 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //23 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //24 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //25 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //26 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //27 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //28 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //29 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //30 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //31 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //32 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //33 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //34 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //35 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //36 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //37 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //38 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //39 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //40 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+19);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //41 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //42 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //43 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //44 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //45 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //46 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //47 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //48 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //49 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //50 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //51 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //52 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //53 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //54 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //55 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //56 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //57 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //58 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //59 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //60 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+19);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //61 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //62 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //63 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //64 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //65 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //66 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //67 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //68 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //69 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //70 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //71 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //72 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //73 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //74 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //75 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //76 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //77 显示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //78 显示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //79 显示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //80 显示‘乐’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+19);
- LcdWriteData(0x03);
-
-
-
- while(1)
- {
- while(SetState==1)
- {
- LCDWrite_String(0, 0, 12, "Frequency Modulation");
- }
-
-
- while(SetState==2)
- {
- LCDWrite_String(0, 0, 12, "ANTENNA IS CONNETED?");
- }
- }
- }
-
-
-
-
- /*******************************************************************************
- * 函数名 : IntConfiguration()
- * 函数功能 : 配置外部中断0
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void IntConfiguration()
- {
- //设置INT0
- IT0=1;//跳变沿出发方式(下降沿)
- EX0=1;//打开INT0的中断允许。
-
- EA=1;//打开总中断
- }
-
- /*******************************************************************************
- * 函数名 : Int0()
- * 函数功能 : 外部中断0 中断函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void Int0() interrupt 0
- {
- Delay10ms();
- if(K3==0)
- {
- SetState++;
- //SetPlace=0;
- while(SetState==3)
- SetState=0;
- }
- }
-
-
- /*******************************************************************************
- * 函数名 : Delay10ms
- * 函数功能 : 延时函数,延时10ms
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void Delay10ms(void) //误差 0us
- {
- unsigned char a,b,c;
- for(c=1;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
-
- void Delayms(unsigned char c) //误差 0us
- {
- unsigned char a,b;
- for( ;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
-
- void Delay(uint y)
- {
- unsigned int x;
- for(y;y>0;y--)
- for(x=65;x>0;x--);
- }
复制代码
// lcd.c 文件 // - #include"lcd.h"
- /*******************************************************************************
- * 函 数 名 : Lcd1602_Delay1ms
- * 函数功能 : 延时函数,延时1ms
- * 输 入 : c
- * 输 出 : 无
- * 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
- *******************************************************************************/
- void Lcd1602_Delay1ms(uint c) //误差 0us
- {
- uchar a,b;
- for (; c>0; c--)
- {
- for (b=55;b>0;b--)
- {
- for(a=1;a>0;a--);
- }
- }
- }
-
- /*******************************************************************************
- * 函 数 名 : void LCDWrite_String(uchar x, uchar y, uchar *s)
- * 函数功能 : 向LCD写入一个字符串
- * 输 入 : x,y,*s
- * 输 出 : 无
- *******************************************************************************/
- void LCDWrite_String(uchar x, uchar y, uchar z, uchar *s) //x 0~15 , y 0,1,2,3
- {
- LCD_set_xy(x,y,z);
- while(*s)
- {
- LcdWriteData(*s);
- s++;
- }
- }
-
- /*******************************************************************************
- * 函 数 名 : void LCD_set_xy(uchar x, uchar y,uchar z)
- * 函数功能 : 指定向LCD写入字符串的位置
- * 输 入 : x,y,z //x:横坐标 y:纵坐标 z:字符串长度
- * 输 出 : 无
- *******************************************************************************/
- void LCD_set_xy(uchar x,uchar y,uchar z)
- {
- uchar i;
- if(y==0)
- {
- LcdWriteCom(0x80+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0x80+x);
- }
- if(y==1)
- {
- LcdWriteCom(0xc0+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0xc0+x);
- }
- if(y==2)
- {
- LcdWriteCom(0x94+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0x94+x);
- }
- if(y==3)
- {
- LcdWriteCom(0xd4+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0xd4+x);
- }
- }
-
- /*******************************************************************************
- * 函 数 名 : LcdWriteCom
- * 函数功能 : 向LCD写入一个字节的命令
- * 输 入 : com
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
- void LcdWriteCom(uchar com) //写入命令
- {
- LCD1602_E = 0; //使能
- LCD1602_RS = 0; //选择发送命令
- LCD1602_RW = 0; //选择写入
-
- LCD1602_DATAPINS = com; //放入命令
- Lcd1602_Delay1ms(1); //等待数据稳定
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5); //保持时间
- LCD1602_E = 0;
- }
- #else
- void LcdWriteCom(uchar com) //写入命令
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 0; //选择写入命令
- LCD1602_RW = 0; //选择写入
-
- LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
-
- // Lcd1602_Delay1ms(1);
- LCD1602_DATAPINS = com << 4; //发送低四位
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 数 名 : LcdWriteData
- * 函数功能 : 向LCD写入一个字节的数据
- * 输 入 : dat
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdWriteData(uchar dat) //写入数据
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //选择输入数据
- LCD1602_RW = 0; //选择写入
-
- LCD1602_DATAPINS = dat; //写入数据
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5); //保持时间
- LCD1602_E = 0;
- }
- #else
- void LcdWriteData(uchar dat) //写入数据
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //选择写入数据
- LCD1602_RW = 0; //选择写入
-
- LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
-
- LCD1602_DATAPINS = dat << 4; //写入低四位
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 数 名 : LcdInit()
- * 函数功能 : 初始化LCD屏
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x38); //开显示
- LcdWriteCom(0x0c); //开显示不显示光标
- LcdWriteCom(0x06); //写一个指针加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //设置数据指针起点
- }
- #else
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x32); //将8位总线转为4位总线
- LcdWriteCom(0x28); //在四位线下的初始化
- LcdWriteCom(0x0c); //开显示不显示光标
- LcdWriteCom(0x06); //写一个指针加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //设置数据指针起点
- }
- #endif
复制代码
// LCD.h 文件 // - #ifndef __LCD_H_
- #define __LCD_H_
- /**********************************
- 当使用的是4位数据传输的时候定义,
- 使用8位取消这个定义
- **********************************/
- #define LCD1602_4PINS
- /**********************************
- 包含头文件
- **********************************/
- #include<reg51.h>
- //---重定义关键词---//
- #ifndef uchar
- #define uchar unsigned char
- #endif
- #ifndef uint
- #define uint unsigned int
- #endif
- /**********************************
- PIN口定义
- **********************************/
- #define LCD1602_DATAPINS P0
- sbit LCD1602_E=P2^7;
- sbit LCD1602_RW=P2^5;
- sbit LCD1602_RS=P2^6;
- /**********************************
- 函数声明
- **********************************/
- /*在51单片机12MHZ时钟下的延时函数*/
- void Lcd1602_Delay1ms(uint c); //误差 0us
- /*LCD1602写入8位命令子函数*/
- void LcdWriteCom(uchar com);
- /*LCD1602写入8位数据子函数*/
- void LcdWriteData(uchar dat) ;
- /*LCD1602初始化子程序*/
- void LcdInit();
- /*LCD1602写入字符串*/
- void LCDWrite_String(uchar x, uchar y,uchar z, uchar *s);
- /*设置LCD1602写入字符串的位置*/
- void LCD_set_xy(uchar x, uchar y, uchar z);
-
- #endif
复制代码
4.注意!!!
|