1、LCD12864 串行方式画sin直线显示图像#include#include#include /*/#define uchar unsigned char#define uint unsigned int #define clear 0x01 /清屏#define reset_DDRAM 0x02 /DDRAM地址归位#define left_move 0x04 /游标左移#define right_move 0x06 /游标右移#define all_left_move 0x05 /画面整体左移#define all_right_move 0x07 /画面整体右移#define displ
2、ay_left_move 0x10 /显示游标左移#define display_right_move 0x14 /显示游标右移#define set_function1 0x30 /基本指令集动作#define set_CGRAM 0x40 /设定CGRAM地址#define set_DDRAM 0x80 /设定DDRAM地址#define set_function2 0x34 /扩充指令集动作#define fanbai 0x04 /反白第一行(扩充指令集)#define set_GDRAM 0x80 /设定GDRAM地址(扩充指令集)#define ON_G 0x36 /开绘图显示(扩充
3、指令集)#define set_function2 0x34 /关绘图显示(扩充指令集)/端口定义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,
4、0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
5、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,0x01,0xFF,0xFF,0x80,0x00,0x00,0x05,0x5E,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x3F,0xFF,
6、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,0x00,0x01,0xF1,0xFF,0xFF,0xFF,0xFF,0xCF,0xC0,0x00,0x05,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
7、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,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x3F,0xFF,0xFF,0xF0,0x00,0x04,0x04,0x00,0x00,
8、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,0xC0,0x00,0x03,0xFC,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x03,0xFF,0xF8,0x00,0x00,
9、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,0x80,0x07,0xFF,0xC0,0x00,0x00,0x0F,0xFE,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x0F,
10、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,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x06,0x18,0x1F,0xC0,0x00,0x00,0x00,0x00,
11、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,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x0B,0x00,
12、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,0x00,0x00,0x01,0x80,0x13,0x60,0x00,0x00,0x00,0x00,0x00,0x7F,0xFD,0xE0,0x00,0x00,0x00,0x00,
13、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,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xF8,0x00,
14、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,0x00,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xF8,0x00,0x00,
15、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,0x07,0xC2,0x03,0xFE,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC2,
16、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,0x00,0x00,0x00,0x00,0x05,0xC0,0x01,0xFD,0xC0,0x0F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
17、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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x82,0x00,0xFE,0x78,0x07,0xF0,0x00,0x00,0x00,
18、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,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x08,0x3F,0x0E,0x00,
19、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,0x03,0x00,0x00,0x03,0x97,0xBF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,
20、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,0x00,0x00,; /*/延时函数/*/void Delay_nms(uchar n) uchar i; uchar j; for(i=0;in;i+) for(j=0;j12
21、5;j+) /大概1ms _nop_();/*/串行发送一个字节/*/void LCD_sendbyte(uchar byte) uchar i; for(i=0;i8;i+) LCD_SCLK=0; /拉低时钟线 _nop_(); LCD_SID=(bit)(byte&0x80); /发送最高位数据 LCD_SCLK=1; /上升沿发送数据 byte=byte1; /左移一位 /*/写指令/*/void LCD_write_com(uchar com) LCD_CS=1; LCD_sendbyte(0xf8); /送入5个连续的“1“,启动一个周期,11111,RW(0),RS(0),0 L
22、CD_sendbyte(0xf0&com); /取高四位,数据分两次传送, /每个字节的内容被送入两个字节 /高四位放在第一个字节的高四位 LCD_sendbyte(0xf0&(com4); /低四位放在第二个字节的高四位 LCD_CS=0; Delay_nms(10); /串行不支持读操作,不可检测忙操作,这里用延时替代 /*/写数据/*/void LCD_write_dat(uchar dat) LCD_CS=1; LCD_sendbyte(0xfa); /送入5个连续的“1“,启动一个周期,11111,RW(0),RS(1),0 LCD_sendbyte(0xf0&dat); /取高四位
23、,数据分两次传送, /每个字节的内容被送入两个字节 /高四位放在第一个字节的高四位 LCD_sendbyte(0xf0&(dat4); /低四位放在第二个字节 LCD_CS=0; Delay_nms(10);/*/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(0x0
24、2); /清DDRAM位址归位,此处貌似与清屏重复 LCD_write_com(0x06); /设定光标右移,整体显示不移动/*/显示字符串/*/void print(uchar *s) while(*s!=0) LCD_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; break; case 3: addr=0x88+y-1
25、; break; case 4: addr=0x98+y-1; break; default : break; LCD_write_com(addr); /字符显示开始地址/*/让字符串显示在固定位置,设置(x,y)的位置,调用上面的函数/*/void LCD_Putstring( uchar x, uchar y, uchar *pData ) LCD_Setaddress(x,y); while( *pData != 0 ) LCD_write_dat( *pData+ ); /*- */打点绘图,适用于在屏幕上打稀疏的几个点,不能用于横行连续打点void LCD_draw_point(u
26、char x, uchar y) uchar x_byte, x_bit; /在横坐标的哪一个字节,哪一个位 uchar y_byte, y_bit; /在纵坐标的哪一个字节,哪一个位 x_byte=x /16; /算出它在哪一个字节(地址) /注意一个地址是16位的 x_bit=x%16; /(取模)算出它在哪一个位 y_byte=y/32; /y是没在哪个字节这个说法 /这里只是确定它在上半屏(32行为一屏)还是下半屏 /0:上半屏 1:下半屏 y_bit=y%32; /y_bit确定它是在第几行 LCD_write_com(0x34); /打开扩展指令集 LCD_write_com(0x
27、80+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 LCD_write_dat(0x00); /高字节全部填0 LCD_write_dat(0x01(15-x_bit); LCD_write_com(0x36); /打开绘图显示 LCD_write_com(0x30); /回到基本指令集 /*/ /打点绘图 一次打水平一行 可以避免断点现象 /x表示数组的首
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1