📄 lcd_12864a_driver.c
字号:
/****************************************************************************
** - lcd_12864a_driver.c -
**
** 12864a型号的LCD驱动程序
**
**
**
** mader:高其良
**
** File version: $2007.7.5$
**
***************************************************************************/
#include "lcd_12864a_driver.h"
/******************************************基本函数********************************************/
/*8bit写入*/
void Lcd12864aWrite8Bit(unsigned char byte)
{
unsigned char temp;
for(temp=8;temp>0;temp--)
{
LCD_12864A_SCL = 0;
LCD_12864A_SI = (byte&0x80)>>7;
byte = byte<<1;
LCD_12864A_SCL = 1;
}
}
/*写数据*/
void Lcd12864aWdat(unsigned char dat)
{
LCD_12864A_CS1 = 0;
LCD_12864A_A0 = 1;
Lcd12864aWrite8Bit(dat);
LCD_12864A_CS1 = 1;
}
/*写命令*/
void Lcd12864aWcom(unsigned char com_type,unsigned char format,unsigned com)
{
LCD_12864A_CS1 = 0;
LCD_12864A_A0 = 0;
Lcd12864aWrite8Bit((com_type&(~format))|(com&format));
LCD_12864A_CS1 = 1;
}
/****************************************扩展函数*******************************************/
/*初始化函数*/
void Lcd12864aInitializtion()
{
LCD_12864A_IO_INITIALIZTION();
LCD_12864A_RES = 1;
_NOP_ms(10);
LCD_12864A_RES = 1;
_NOP_ms(10);
Lcd12864aWcom(LCD_12864A_RESET,0x00);
Lcd12864aWcom(LCD_12864A_BIAS,0x01);
Lcd12864aWcom(LCD_12864A_ADC,0x00);
Lcd12864aWcom(LCD_12864A_OFF_ON,0x01);
Lcd12864aWcom(LCD_12864A_POWER,0x07);
Lcd12864aWcom(LCD_12864A_INTERNAL_RESISTOR,0x03);
Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x01);
Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_L,0x03);
Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x00);
Lcd12864aWcom(LCD_12864A_BRIGHTNESS_H,0x00);
Lcd12864aWcom(LCD_12864A_BRIGHTNESS_L,0x26);
Lcd12864aWcom(LCD_12864A_OUTPUT_STATUS,0x00);
Lcd12864aWcom(LCD_12864A_OFF_ON,0x01);
Lcd12864aWcom(LCD_12864A_NORMAL_REVERSE,0x00);
Lcd12864aWcom(LCD_12864A_START_LINE,0x00);
}
/*睡眠模式*/
void Lcd12864aSleepMode()
{
Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x00);
Lcd12864aWcom(LCD_12864A_OFF_ON,0x00);
Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x01);
}
/*Standby模式*/
void Lcd12864aStandbyMode()
{
Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_H,0x01);
Lcd12864aWcom(LCD_12864A_STATIC_INDICATOR_L,0x03);
Lcd12864aWcom(LCD_12864A_OFF_ON,0x00);
Lcd12864aWcom(LCD_12864A_ENTIRE_DISPLAY_OFF_ON,0x01);
}
/*定位函数*/
void Lcd12864aLocate(unsigned char page,unsigned char column)
{
Lcd12864aWcom(LCD_12864A_PAGE,0x0f&page);
Lcd12864aWcom(LCD_12864A_COLUMN_H,column>>4);
Lcd12864aWcom(LCD_12864A_COLUMN_L,column);
}
/*清屏函数*/
void Lcd12864aCls()
{
unsigned char temp1,temp2;
for(temp1=0;temp1<9;temp1++)
{
Lcd12864aLocate(temp1,0x00);
for(temp2=0;temp2<128;temp2++)
{
Lcd12864aWdat(0x00);
}
}
}
/****************************************常用函数*******************************************/
/*ASC码输出*/
void Lcd12864aAscPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{
unsigned char temp;
Lcd12864aLocate(page,column);
for (temp=0;temp<8;temp++)
{
Lcd12864aWdat(p[temp]);
}
Lcd12864aLocate(page+1,column);
for (temp=8;temp<16;temp++)
{
Lcd12864aWdat(p[temp]);
}
}
/*汉字输出*/
void Lcd12864aCcharPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{
unsigned char temp;
Lcd12864aLocate(page,column);
for (temp=0;temp<16;temp++)
{
Lcd12864aWdat(p[temp]);
}
Lcd12864aLocate(page+1,column);
for (temp=16;temp<32;temp++)
{
Lcd12864aWdat(p[temp]);
}
}
/*BMP图象输出*/
void Lcd12864aBmpPrintf(unsigned char page,unsigned char column,unsigned char __flash *p)
{
unsigned char width,height;
unsigned int temp = 0x02;
for(height=0;height< p[1]/8+((p[1]%8!=0x00)&0x01);height++)
{
Lcd12864aLocate(page+height,column);
for(width=0;width<p[0];width++)
{
Lcd12864aWdat(p[temp]);
temp++;
}
}
}
/*数字输出*/
void Lcd12864aNumberPrintf(unsigned char page,unsigned char column,unsigned char __flash *p,unsigned int s)
{
unsigned char tk,k,h,t;
tk=(unsigned char)(s/10000);s=s-tk*10000;
k=(unsigned char)(s/1000);s=s-k*1000;
h=(unsigned char)(s/100);s=s-h*100;
t=(unsigned char)(s/10);s=s-t*10;
if (tk!=0) Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*tk),column=column+8;
if (k!=0||tk!=0) Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*k),column=column+8;
if (h!=0||k!=0||tk!=0) Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*h),column=column+8;
if (t!=0||h!=0||k!=0||tk!=0) Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*t),column=column+8;
Lcd12864aAscPrintf(page,column,p+16*'0'-32*16+16*s);
}
/*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -