1、/端口定义sbit LCD_CS=P35; /片选信号sbit LCD_SID=P36; /串行数据线sbit LCD_SCLK=P34; /串上时钟输入/数组,字定义uchar code a=阿姆 YOUNG; /定义要显示的字符串uint x=0;/图片取模/*/ code uchar tu=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0
2、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x04,0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x07,0xFF,0x00,0x00,0x00,0x05,0xC6,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xE0,0
3、x01,0xFF,0xFF,0x80,0x00,0x00,0x05,0x5E,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x3F,0xFF,0xFF,0x80,0x00,0x00,0x07,0x7E,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x05,0xFE,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0x80,0x00,0x05,0xFE,0x00,0x00,0x00,0x00,0
4、x00,0x01,0xF1,0xFF,0xFF,0xFF,0xFF,0xCF,0xC0,0x00,0x05,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xDF,0xE0,0x00,0x07,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x04,0x1E,0
5、x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x3F,0xFF,0xFF,0xF0,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xBF,0xFE,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0xFC,0x03,0xFF,0xFF,0xE0,0x00,0x02,0x00,0x06,0x20,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x03,0xFF,0xFF,0
6、xC0,0x00,0x03,0xFC,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x03,0xFF,0xF8,0x00,0x00,0x02,0xC8,0x0D,0x80,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x03,0xFF,0xE0,0x00,0x00,0x02,0xC8,0x1D,0xC0,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x07,0xFF,0xC0,0x00,0x00,0x02,0x4E,0x30,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0
7、x80,0x07,0xFF,0xC0,0x00,0x00,0x0F,0xFE,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x0F,0xFF,0xC0,0x00,0x00,0x06,0xC8,0x12,0x40,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x3F,0xFF,0x80,0x00,0x00,0x06,0x58,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x07,0xFE,0x12,0x40,0x00,0x00,0
8、x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x06,0x18,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x78,0x12,0x40,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x30,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0
9、x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x01,0x80,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFE,0x00,0x00,0
10、x00,0x00,0x01,0x80,0x13,0x60,0x00,0x00,0x00,0x00,0x00,0x7F,0xFD,0xE0,0x00,0x00,0x00,0x00,0x01,0x80,0xFF,0xC0,0x00,0x00,0x00,0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0xC3,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0
11、xF8,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x00,0x60,0x00,0x00,0x03,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0
12、x00,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xF8,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x7F,0xC0,0xF8,0x00,0x00,0x3F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x03,0xFC,0x00,0x00,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
13、x07,0xC2,0x03,0xFE,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC2,0x03,0xF7,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xC2,0x03,0xFB,0x00,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC2,0x01,0xFB,0x80,0x07,0xFF,0x80,0x00,0x00,0x00,0x00,0
14、x00,0x00,0x00,0x00,0x05,0xC0,0x01,0xFD,0xC0,0x0F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x01,0xFC,0xE0,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x82,0x00,0xFC,0xE0,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x82,0x00,0xFE,0x70,0x0F,0xFC,0x00,0
15、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x82,0x00,0xFE,0x78,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x7E,0x38,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x7F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x00,0x7F,0
16、x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x08,0x3F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x00,0x3F,0x8F,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x00,0x3F,0x87,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
17、x03,0x00,0x00,0x03,0x97,0xBF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
18、x00,0x00,/延时函数void Delay_nms(uchar n) uchar i; uchar j; for(i=0;in;i+) for(j=0;j125;j+) /大概1ms _nop_();/串行发送一个字节void LCD_sendbyte(uchar byte)8; LCD_SCLK=0; /拉低时钟线 LCD_SID=(bit)(byte&0x80); /发送最高位数据 LCD_SCLK=1; /上升沿发送数据 byte=byte1; /左移一位 /*/写指令void LCD_write_com(uchar com) LCD_CS=1; LCD_sendbyte(0xf8
19、); /送入5个连续的“1“,启动一个周期,11111,RW(0),RS(0),0 LCD_sendbyte(0xf0&com); /取高四位,数据分两次传送, /每个字节的内容被送入两个字节 /高四位放在第一个字节的高四位(com4); /低四位放在第二个字节的高四位 LCD_CS=0; Delay_nms(10); /串行不支持读操作,不可检测忙操作,这里用延时替代 /*/写数据void LCD_write_dat(uchar dat) LCD_sendbyte(0xfa); /送入5个连续的“1“,启动一个周期,11111,RW(0),RS(1),0dat);(dat /低四位放在第二个
20、字节/*/LCD初始化void LCD_init(void) LCD_write_com(0x30); /选择基本指令集 LCD_write_com(0x0c); /开显示,无游标,不反白 LCD_write_com(0x01); /清除显示屏幕,把DDRAM位址计数器调整为00H Delay_nms(5); /清屏操作时间较长1.6ms 因此加此延时 LCD_write_com(0x02); /清DDRAM位址归位,此处貌似与清屏重复 LCD_write_com(0x06); /设定光标右移,整体显示不移动/*/显示字符串void print(uchar *s) while(*s!=0) L
21、CD_write_dat(*s); s+;/*/设置显示地址void LCD_Setaddress(uchar x,uchar y) /地址从第1行第1列开始不从0开始 uchar addr; switch(x) case 1: addr=0x80+y-1; break; case 2: addr=0x90+y-1; case 3: addr=0x88+y-1; case 4: addr=0x98+y-1; default : break; LCD_write_com(addr); /字符显示开始地址/*/让字符串显示在固定位置,设置(x,y)的位置,调用上面的函数void LCD_Putst
22、ring( uchar x, uchar y, uchar *pData ) LCD_Setaddress(x,y); while( *pData != ) LCD_write_dat( *pData+ );/*- */打点绘图,适用于在屏幕上打稀疏的几个点,不能用于横行连续打点void LCD_draw_point(uchar x, uchar y) uchar x_byte, x_bit; /在横坐标的哪一个字节,哪一个位 uchar y_byte, y_bit; /在纵坐标的哪一个字节,哪一个位 x_byte=x /16; /算出它在哪一个字节(地址) /注意一个地址是16位的 x_bi
23、t=x%16; /(取模)算出它在哪一个位 y_byte=y/32; /y是没在哪个字节这个说法 /这里只是确定它在上半屏(32行为一屏)还是下半屏 /0:上半屏 1:下半屏 y_bit=y%32; /y_bit确定它是在第几行 LCD_write_com(0x34); /打开扩展指令集 LCD_write_com(0x80+y_bit); /垂直地址(上) 貌似与说明书正好相反 LCD_write_com(0x80+x_byte+8*y_byte); /先写水平坐标(下) 貌似与说明书正好相反 /具体参照数据手册 /下半屏的水平坐标起始地址为0x88 /(+8*y_byte)就是用来确定在上半屏还是下半屏 if(x_bit8) /如果x_bit位数小于8 LCD_write_dat(0x01(7-x_bit); /写高字节。因为坐标是从左向右的 /而GDRAM高位在左,低位在右 LCD_write_dat(0x00); /低字节全部填0 else /高字节全部填0(15-x_bit); LCD_write_com(0x36); /打开绘图显示 /回到基本指令集/*/ /打点绘图 一次打水平一行 可以避免断点现象 /x表示数组的首
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1