lcd12864.c
#include "lcd12864.h"void LcdSt7565_WriteCmd(cmd) //写入一个命令到12864
{LCD12864_CS = 0; //chip select,打开片选LCD12864_RD = 1; //disable read,读使能LCD12864_RS = 0; //select command,选择命令LCD12864_RW = 0; //select write,选择写模式_nop_();_nop_();DATA_PORT = cmd; //put command,写入命令_nop_();_nop_();LCD12864_RW = 1; //command writing,写入命令
}void LcdSt7565_WriteData(dat) //写入一个数据到12864
{LCD12864_CS = 0; //chip select,打开片选LCD12864_RD = 1; //disable read,读使能LCD12864_RS = 1; //select data,选择数据LCD12864_RW = 0; //select write,选择写模式_nop_();_nop_();DATA_PORT = dat; //put data,写入数据_nop_();_nop_();LCD12864_RW = 1; //data writing,写入数据
}void Lcd12864_Init()
{uchar i;LCD12864_RSET = 0;for(i=0;i<100;i++);LCD12864_CS = 0;LCD12864_RSET = 1;LcdSt7565_WriteCmd(0xE2);for(i=0;i<100;i++);LcdSt7565_WriteCmd(0xa0); //表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)LcdSt7565_WriteCmd(0xC8); //表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向LcdSt7565_WriteCmd(0xA6); //-表格第9个命令,0xA6为设置字体为黑色,背景为白色. 0xA7为设置字体为白色,背景为黑色//--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//LcdSt7565_WriteCmd(0xA4); //normal display//--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//LcdSt7565_WriteCmd(0xA2); //bias set 1/9//--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--////--0xF801,选择增压为5X,其实效果差不多--// LcdSt7565_WriteCmd(0xF8); //Boost ratio setLcdSt7565_WriteCmd(0x01); //x4//--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--////--选择从0x00到0X3F。用来设置背景光对比度。---/LcdSt7565_WriteCmd(0x81); //V0 a setLcdSt7565_WriteCmd(0x23);//--表格第17个命令,选择调节电阻率--//LcdSt7565_WriteCmd(0x25); //Ra/Rb set//--表格第16个命令,电源设置。--//LcdSt7565_WriteCmd(0x2F);for (i=0; i<100; i++);//--表格第2个命令,设置显示开始位置--//LcdSt7565_WriteCmd(0x40); //start line//--表格第1个命令,开启显示--//LcdSt7565_WriteCmd(0xAF); // display onfor (i=0; i<100; i++);
}void Lcd12864_ClearScreen()
{uchar i,j;for(i=0;i<8;i++){//y轴有64个,一个坐标8位,就总共有8个坐标////所有我们所使用的坐标是0xb0到0xb7//LcdSt7565_WriteCmd(0xb0+i); // y轴坐标//上面48行,当初始化是0xa1时,x坐标从(0x10,0x04)到(0x18,0x04),一共128位////当你的段初始化为0xA0时,X坐标从(0x10,0x00)到(0x18,0x00),一共128位//LcdSt7565_WriteCmd(0x10); // 我们初始化是0xa0,设置x轴坐标LcdSt7565_WriteCmd(0x00);for(j=0;j<128;j++){ //x轴有128位,就一共刷128次,x坐标会自动加1,所以不需要再次设置坐标LcdSt7565_WriteData(0x00); }}
}#ifdef CHAR_CODE
#include "charcode.h"uchar Lcd12864_Write16CnCHAR(uchar x,uchar y,uchar *cn)
{uchar j,x1,x2,wordNum;if(y > 7){return 0;} //Y的坐标只能从0到7,大于则直接返回if(x > 128){return 0;} //X的坐标只能从0到128,大于则直接返回y += 0xb0; //得到y坐标的值LcdSt7565_WriteCmd(y); //设置Y坐标while(*cn !='