#include "includes.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
void LCD12864_Printf(uint8_t x,uint8_t y,const char *fmt, ...)
{
char buf[32];
va_list args;
va_start (args, fmt);
vsprintf (buf,fmt,args);
va_end (args);
LCD12864_Display_Chars(x, y,buf);
}
//向12864中写入数据
void LCD12864_Write_Data(unsigned char dat)
{
LCD12864_E = 0;
LCD12864_WR = 0;//选择写模式
LCD12864_RS = 1;//选择数据模式
//延时
// Delay_ms(1);
//将数据准备
LCD12864_Data = dat;
Delay_ms(1);
LCD12864_E = 1;//表示开始写入数据,上升沿写入数据
// Delay_ms(1); //延时等待数据全部发送完成
}
//向12864中写入命令
void LCD12864_Write_Com(unsigned char com)
{
//首先我们设置片选信号
LCD12864_E = 0;//片选信号一般设置为0表示片选
LCD12864_WR = 0;//选择写模式
LCD12864_RS = 0;//选择命令模式
//延时
// Delay_ms(1);
//将数据准备
LCD12864_Data = com;
Delay_ms(1);
LCD12864_E = 1;//表示开始写入数据,上升沿写入数据
// Delay_ms(1);
}
//对LCD12864进行初始化
void LCD12864_Init()
{
LCD12864_CS1=1;
LCD12864_CS2=1;
//首先对LCD进行复位
LCD12864_REST = 0;
Delay_ms(1);
LCD12864_REST = 1;
Delay_ms(1);
/* 开始初始化的步骤 */
LCD12864_Write_Com(0x30);
LCD12864_Write_Com(0x08);
LCD12864_Write_Com(0x01);
LCD12864_Write_Com(0x06);
LCD12864_Write_Com(0x0c);
}
//显示非中文字符 和 中文字符都差不多,因为自带汉字库,只是注意写汉字的时候要连续写!
// 注意这里的坐标变了,一定要注意!!!
/*
实际坐标:
0x80 -> 0x87
0x90 -> 0x97
0x88 -> 0x8f
0x98 -> 0x9f
//这个坐标我们自己规定的,再换算成上面的实际坐标就可以了
指出坐标(1,1) -> (1,8)
(4,1) -> (4,8)
再指出需要显示的字符
*/
unsigned char addresses[] = {0x80,0x90,0x88,0x98};
//显示汉字
void LCD12864_Display_Chars(unsigned char x,unsigned char y,unsigned char *dat){
LCD12864_Write_Com(0x30);
LCD12864_Write_Com(0x06);
//写入地址
LCD12864_Write_Com(addresses[x-1]+(y-1));
//写入数据
while(*dat != '\0'){
LCD12864_Write_Data(*dat);
dat++;
}
}
void LCD12864_Clear(void)
{
LCD12864_Write_Com(0x01);
LCD12864_Write_Com(0x34);
LCD12864_Write_Com(0x30);
}