📄 lcd128_64.c
字号:
#include "app_ex_main.h"
#include "app_ex_util.h"
#include "RF04EB.h"
#include "hal.h"
#include "Font.h"
#define RECALIB_TIMEOUT 12000 // Every 2 minutes
#define MSG_PING 0x00
#define MSG_SEND 0x10
#define MSG_RECIVE 0x20
#define MSG_NEEDSEND 0x30
/****************************************************
* B) Command Table per device *
****************************************************/
#define DisplayOff 0xAE
#define DisplayOn 0xAF
#define DisplayStart 0x40
#define PageAddr 0xB0
#define ColAddrHi 0x10
#define ColAddrLo 0x00
#define SegRemapOff 0xA0
#define SegRemapOn 0xA1
#define NormalDisp 0xA6
#define ReverseDisp 0xA7
#define ExitEntireD 0xA4
#define EntEntireD 0xA5
#define EnterRMW 0xE0
#define ExitRMW 0xEE
#define SWRest 0xE2
#define ComRemapOff 0xC0
#define ComRemapOn 0xC8
#define PwrCtrlReg 0x28
#define OPampBuffer 0x01
#define IntReg 0x02
#define IntVolBstr 0x04
#define IntRegRatio 0x20
#define ContCtrlReg 0x81
#define CmdMuxRatio 0x48
#define CmdBiasRatio 0x50
#define DispOffset 0x44
#define IconModeOn 0xA3
#define IconModeOff 0xA2
#define NlineInver 0x4C
#define DCDCconver 0x64
#define PowersavStandby 0xA8
#define PowersavSleep 0xA9
#define PowersavOff 0xE1
#define InterOsc 0xAB
#define Device SSD1821 /* device under demo */
#define ColNo 132 /* number of Column/Seg on LCD glass*/
#define RowNo 64 /* number of Row/Com/Mux */
#define PS 1 /* fixed to Parallel mode */
#define PageNo 10 /* Total no of RAM pages */
#define IconPage 10 /* Icon Page number */
#define All0 6 /* 3 for all 0, 4 for all 1 */
#define All1 4
#define iIntRegValue 1 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValue 16 /* Contrast Control Register Value */
#define iIntRegValuea 1 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValuea 16 /* Contrast Control Register Value */
#define iIntRegValueb 1 /*Internal Regulator Resistor Ratio Value */
#define iContCtrlRegValueb 16 /* Contrast Control Register Value */
#define MSGNo 16
#define MSGLength 22
#define SSLNameNo 4
#define DevicePg 0 //RAM page for showing device name
#define FeaturePg 1 //RAM page for showing feature
#define GRAPHICNo 13
#define xlogo 38
#define ylogo 5
#define xsolomon 91
#define ysolomon 2
#define xsystech 81
#define ysystech 2
#define xlimited 70
#define ylimited 2
#define xcc 16
#define ycc 2
#define xpageq 128
#define ypageq 4
#define horizonal 0
#define d_time 60
////////////////////////////////////////////////////////////////////////////////////////////
INT8U ContrastValue = 10;
INT8U BT_State;
void Print(INT8U y, INT8U x, INT8U ch[], INT16U yn);
void Print6(INT8U xx,INT8U yy,INT8U ch1[],INT8U yn);
//void LoadICO(INT8U y , INT8U x , INT8U n);
/*******************************************************************************
//函数名:void delaylcd (int16u x)
//功能:廷时
//输入:时间
//输出:无
********************************************************************************/
void delaylcd (INT16U x)
{
INT8U j;
while (x--)
{
for (j=0;j<115;j++);
}
}
/*******************************************************************************
//函数名:void fdelay(unsigned int n)
//功能:廷时
//输入:时间
//输出:无
********************************************************************************/
void fdelay(unsigned int n) /* wait n seconds*/
{
INT16U i;
INT16U j;
for (i=0;i<5;i++)
for (j=0;j<n*2;j++) ;
}
/*******************************************************************************
//函数名:void Lcdwritecom(int8u com)
//功能:lcd写指令
//输入:com指令
//输出:无
********************************************************************************/
void Lcdwritecom(INT8U com)
{
INT8U i, temp;
LCD_CLK = 0;
LCD_CS = 0;
LCD_RS = 0;
temp = com;
for(i=0; i<8; i++)
{
if(temp & 0x80)
{
LCD_SDO = 1;
}
else LCD_SDO = 0;
temp <<= 1;
LCD_CLK = 1;
// asm("nop");
LCD_CLK = 0;
// asm("nop");
}
LCD_CS = 1;
// asm("nop");
}
/*******************************************************************************
//函数名:void Lcdwritedata(int8u dat)
//功能:lcd写数据
//输入:dat数据
//输出:无
********************************************************************************/
void Lcdwritedata(INT8U dat)
{
INT8U i, temp;
LCD_CS = 0;
LCD_RS = 1;
temp = dat;
for(i=0; i<8; i++)
{
if(temp & 0x80)
{
LCD_SDO = 1;
}
else LCD_SDO = 0;
temp <<= 1;
LCD_CLK = 1;
LCD_CLK = 0;
}
LCD_CS = 1;
}
/*******************************************************************************
//函数名:void Prog_Reset(void)
//功能:lcd复位
//输入:无
//输出:无
********************************************************************************/
void Prog_Reset(void)
{
LCD_RST = 0;
delaylcd(100);
LCD_RST = 1;
}
/*******************************************************************************
//函数名:void Resetchip(void)
//功能:lcd软件复位
//输入:无
//输出:无
********************************************************************************/
void Resetchip(void)
{
Prog_Reset();
Lcdwritecom(0xe2);
}
/*******************************************************************************
//函数名:void SetRamAddr (INT8U Page, INT8U Col)
//功能:lcd位置选择
//输入:Page-页,Col-列
//输出:无
********************************************************************************/
void SetRamAddr (INT8U Page, INT8U Col)
{
INT8U temp;
temp = 0x0f & Page;
Lcdwritecom(PageAddr | temp);
temp = 0x0f & (Col >> 4);
Lcdwritecom(ColAddrHi | temp); //高位
temp = 0x0f & Col;
Lcdwritecom(ColAddrLo | temp); //低位
}
/*******************************************************************************
//函数名:void SetContrast(INT8U Gain, INT8U Step)
//功能:lcd对比度设定
//输入:Page-页,Col-列
//输出:无
********************************************************************************/
void SetContrast(INT8U Gain, INT8U Step)
{
Lcdwritecom(IntRegRatio | (0x0f & Gain)); //设定内部电阻
Lcdwritecom(ContCtrlReg); //设定内部对比控制器
Lcdwritecom((0x3f & Step));
}
/*******************************************************************************
//函数名:void InitDisplay(void)
//功能:lcd设定为正常显示状态
//输入:无
//输出:无
********************************************************************************/
void InitDisplay(void)
{
Lcdwritecom(DisplayOff); //关显示
Lcdwritecom(SegRemapOn); //ks0713/ssd1815
Lcdwritecom(ComRemapOn); //ssd1815
SetContrast(iIntRegValue, iContCtrlRegValue); //设定缺省对比度
Lcdwritecom(PwrCtrlReg | IntVolBstr | IntReg | OPampBuffer); //turn on booster, regulator & divider
Lcdwritecom(DisplayOn); //开显示
}
/*******************************************************************************
//函数名:void contrastctrl(INT8U start,stop)
//功能:lcd对比度调整
//输入:无
//输出:无
********************************************************************************/
void contrastctrl(INT8U start, INT8U stop)
{
INT8U i;
if (start < stop)
{
for (i=start; i<stop; i+=1)
{
SetContrast(iIntRegValue, i); //slowly turn on display
fdelay(80);
}
}
else
{
for (i=start; i>stop; i-=1)
{
SetContrast(iIntRegValue, i); //slowly turn off display
fdelay(120);
}
}
}
void LcdPortInit(void)
{
IO_DIR_PORT_PIN(1, 4, IO_OUT);
IO_DIR_PORT_PIN(2, 0, IO_OUT);
IO_DIR_PORT_PIN(1, 1, IO_OUT);
IO_DIR_PORT_PIN(1, 5, IO_OUT);
IO_DIR_PORT_PIN(1, 6, IO_OUT);
}
/*******************************************************************************
//函数名:void InitLcd(void)
//功能:lcd初始化
//输入:无
//输出:无
********************************************************************************/
void InitLcd(void)
{
LcdPortInit();
LCD_CS = 1;
LCD_RS = 1;
LCD_RST = 1;
Resetchip();
Lcdwritecom(InterOsc);
Lcdwritecom(0x67);
InitDisplay(); // initialize normal display environment
Lcdwritecom(DisplayOff);
Lcdwritecom(0x40);
contrastctrl(10,iContCtrlRegValue);
Lcdwritecom(0x24);
// iDispStLn=0;
Lcdwritecom(DisplayOn); // blank display update RAM
Lcdwritecom(0xa6);
SetContrast(iIntRegValuea,ContrastValue);
delaylcd(20);
SetRamAddr(1,15);
}
/*******************************************************************************
//函数名:void LoadICO(INT8U y , INT8U x , INT8U Ico[])
//功能:打开一个指定指针的图标
//输入:x,y坐标 Ico[]图片
//输出:无
********************************************************************************
void LoadICO(INT8U y , INT8U x , INT8U n)
{
INT8U adder = 0;
INT8U wm;
SetRamAddr(y , x);
for(wm = 0;wm < 16;wm++)
{
Lcdwritedata(ICOBattery[n][adder]);
adder += 1;
}
}
*/
/*******************************************************************************
//函数名:void LoadICO(INT8U y , INT8U x , INT8U Ico[])
//功能:打开一个指定指针的图标
//输入:x,y坐标 Ico[]图片
//输出:无
********************************************************************************/
void LoadICO(void)
{
INT8U i,j;
for(i=0; i<8; i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -