新手什么网站做外贸,工程建设科学技术奖申报网站,重庆好玩的地方,无法访问服务器上网站LCD12864液晶显示屏
屏幕介绍
① 可显示四行字符#xff0c;每行可显示8个汉字或者16个数字和字母#xff1b; ②可串行通信和并行通信#xff1b; ③ 串口接口管脚信号 通信方法
#xff08;一#xff09;八位并行通信方法 #xff08;二#xff09;串行通信方法 用…LCD12864液晶显示屏
屏幕介绍
① 可显示四行字符每行可显示8个汉字或者16个数字和字母 ②可串行通信和并行通信 ③ 串口接口管脚信号 通信方法
一八位并行通信方法 二串行通信方法 用户指令集
一般常用的指令有 扩充功能设定指令集当需要自定义图案可以把绘图模式打开 清除显示指令这个指令只能清除DDRAM里的数据不能清除绘图模式GDRAM的数据 显示状态指令打开后才能显示数据 进入点设定指令具体操作看说明一般为0x06 注意在切换指令集写入数据时会导致闪屏现象因此不要在程序中频繁的切换指令集 驱动程序
12864带字库驱动程序
LcdWrods_Printf(类似prinf使用方法用起来超级方便
#include stdio.h
#include stdarg.h
#define WRITE_CMD 0xF8//写命令
#define WRITE_DAT 0xFA//写数据
void SendByte(uint8_t byte)
{uint8_t i; for(i 0;i 8;i){if((byte i) 0x80) //0x80(1000 0000) 只会保留最高位{SID 1; // 引脚输出高电平代表发送1}else{SID 0; // 引脚输出低电平代表发送0}/*或 SID (Dbyte i) 0x80; 上面那样为了方便理解*/SCLK 0; //时钟线置低 允许SID变化Delay_us(5); //延时使数据写入SCLK 1; //拉高时钟让从机读SID}
}
void Lcd_WriteData(uint8_t Dat )
{Delay_ms(1); SendByte(WRITE_DAT); //11111,RW(0),RS(1),0SendByte(0xf0Dat); //高四位SendByte(Dat4); //低四位(先执行)
}
int fputc(int ch, FILE *f)
{Lcd_WriteData(ch); //将printf的底层重定向到自己的发送字节函数return ch;
}void Display_Words(uint8_t x,uint8_t y,char *str)
{ Lcd_WriteCmd(LCD_addr[x][y]); //写初始光标位置while(*str0){ Lcd_WriteData(*str); //写数据str; }
}void LcdWrods_Printf(int row, int col, char *format, ...)
{char String[100]; //定义字符数组va_list arg; //定义可变参数列表数据类型的变量argva_start(arg, format); //从format开始接收参数列表到arg变量vsprintf(String, format, arg); //使用vsprintf打印格式化字符串和参数列表到字符数组中va_end(arg); //结束变量argDisplay_Words(row,col,String); //串口发送字符数组字符串
}12864绘图模式驱动程序
#define WRITE_CMD 0xF8//写命令
#define WRITE_DAT 0xFA//写数据
void Lcd_WriteCmd(uint8_t Cmd )
{Delay_ms(1); //由于我们没有写LCD正忙的检测所以直接延时1ms使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测SendByte(WRITE_CMD); //11111,RW(0),RS(0),0 SendByte(0xf0Cmd); //高四位SendByte(Cmd4); //低四位(先执行)
}
void Lcd_WriteData(uint8_t Dat )
{Delay_ms(1); SendByte(WRITE_DAT); //11111,RW(0),RS(1),0SendByte(0xf0Dat); //高四位SendByte(Dat4); //低四位(先执行)
}
void LCD_Display_Picture(const uint8_t *img,uint8_t num)
{uint8_t x,y,i;for(i 0; i 1; i) //上下屏写入{for(y0;y32;y) //垂直Y写32次{ for(x0;x1;x) //横向X写1次{Lcd_WriteCmd(0x80 y); //行地址Lcd_WriteCmd(0x80num xi); //列地址Lcd_WriteData(*img ); //写高位字节数据 D15D8 Lcd_WriteData(*img ); //写低位字节数据 D7D0}}}
} 创作不易麻烦点赞收藏关注感谢各位亲们