📄 lcm.c
字号:
程序名: LcmSetCurPoint
说 明: 光标指针地址设置(addry 为水平位置(列),addrx 为垂直位置(行))
********************************************************************************/
void LcmSetCurPoint(INT8U addrx, INT8U addry)
{
INT16U wc;
wc = ((INT16U)addrx)*2 + 1;
wc <<= 8;
wc += (INT16U)addry;
LcmWrTwoPara(wc);
LcmWrCmd(LCM_SET_CURS_POINT);
}
/*******************************************************************************
程序名: LcmSetAddrPoint
说 明: 显示缓冲区地址指针设置
********************************************************************************/
void LcmSetAddrPoint(INT16U addr)
{
LcmWrTwoPara(addr);
LcmWrCmd(LCM_SET_ADDR_POINT);
}
/*******************************************************************************
程序名: LcmDataOnceIncWr
说 明: 一次写一字节数据,且完后,地址指针自动加一
********************************************************************************/
void LcmDataOnceIncWr(INT8U da)
{
LcmWrOnePara(da);
LcmWrCmd(LCM_DATA_ONCE_INC_WR);
}
/*******************************************************************************
程序名: LcmDataOnceIncWr
说 明: 一次写一字节数据,且完后,地址指针不变
********************************************************************************/
void LcmDataOnceOnlyWr(INT8U da)
{
LcmWrOnePara(da);
LcmWrCmd(LCM_DATA_ONCE_ONLY_WR);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*******************************************************************************
程序名: GraphChar0808
说 明: 图形方式写一个8x8 ascii字符 ,(addrx,addry)为位置,da为写入字符 ,y_n_bit为正反显标志
********************************************************************************/
void GraphChar0808(INT8U addrx, INT8U addry, INT8U da, BOOLEAN y_n_bit)
{
INT8U i;
INT16U wc;
wc = ((INT16U)addrx) * HT6963C_GRAPH_Y*8 + (INT16U)addry;
ReadZK(1, da, 0, y_n_bit);
for(i=0; i<8; i++)
{
LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
LcmDataOnceOnlyWr(chZK[i]);
}
}
/*******************************************************************************
程序名: GraphChar0816
说 明: 图形方式写一个8*16 ascii字符 ,(addrx,addry)为位置,da为写入字符 ,y_n_bit为正反显标志
********************************************************************************/
INT8U ConvertXAChar1(INT8U da)
{
SfrByte = da;
if(!(SB0 ^ SB7)); else { SB0 = ~SB0;SB7 = ~SB7;}
if(!(SB1 ^ SB6)); else { SB1 = ~SB1;SB6 = ~SB6;}
if(!(SB2 ^ SB5)); else { SB2 = ~SB2;SB5 = ~SB5;}
if(!(SB3 ^ SB4)); else { SB3 = ~SB3;SB4 = ~SB4;}
return(SfrByte);
}
void GraphChar0816(INT8U addrx,INT8U addry,INT8U da,BOOLEAN y_n_bit)
{
INT8U i;
INT16U wc;
wc = (INT16U)addrx * HT6963C_GRAPH_Y * 16 + (INT16U)addry;
ReadZK(2, da, 0, y_n_bit);
for(i=0; i<16; i++)
{
LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
LcmDataOnceOnlyWr(ConvertXAChar1(chZK[i]));
}
}
/*******************************************************************************
程序名: GraphChar1616
说 明: 写一汉字在位置(addrx,addry),汉字区号为da1,位号为da2 ,y_n_bit为正反显标志
********************************************************************************/
void GraphChar1616(INT8U addrx, INT8U addry, INT8U da1, INT8U da2, BOOLEAN y_n_bit)
{
INT8U i, j;
INT16U wc;
ReadZK(3, da1, da2, y_n_bit);
wc = (((INT16U)addrx) * HT6963C_GRAPH_Y)*16 + ((INT16U)addry)*2;
for(i=0; i<16; i++)
{
LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
j = i<<1;
LcmDataOnceIncWr(chZK[j]);
LcmDataOnceIncWr(chZK[j+1]);
}
}
/*******************************************************************************
程序名: GraphStr0816
说 明: 图形方式写一个8x16 ascii字符串 ,(addrx,addry)为起始位置,
*p为写入字符串指针 ,y_n_bit为正反显标志 num为最多显示的字符数
********************************************************************************/
void GraphStr0816(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit, INT8U num)
{
INT8U i,j,k,n=0;
k = addry;
for(i = addrx; i < HT6963C_GRAPH_HALFX; i++) //不能超过一屏的范围
{
for(j = k; j < HT6963C_GRAPH_Y; j++)
{
if(*p == 0x0)return;
GraphChar0816(i, j, *p++, y_n_bit);
n++;
if(n == num)return;
}
k = 0;
}
}
/*******************************************************************************
程序名: GraphStr1616
说 明: 图形方式写一个汉字串 ,(addrx,addry)为起始位置,
*p为写入汉字串指针 ,y_n_bit为正反显标志
********************************************************************************/
void GraphStr1616(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit)
{
INT8U i,j,k;
k = addry;
for(i = addrx; i < HT6963C_GRAPH_HALFX; i++)
{
for(j = k; j < HT6963C_GRAPH_HALFY; j++)
{
if(*p == 0x0) return;
GraphChar1616(i, j, *p++, *p++, y_n_bit);
}
k = 0;
}
}
/*******************************************************************************
程序名: GraphDSChin
说 明: 图形方式写一个数字汉字串 ,(addrx,addry)为起始位置,
*p为写入汉字串指针 ,y_n_bit为正反显标志
********************************************************************************/
void GraphDS1616(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit)
{
INT8U i,j,k;
k = addry;
for(i = addrx; i < HT6963C_GRAPH_HALFX; i++)
{
for(j = k; j < HT6963C_GRAPH_HALFY; j++)
{
if(*p == 0x0)return;
GraphChar1616(i, j, 0x23, *p++, y_n_bit);
}
k = 0;
}
}
/*******************************************************************************
程序名: ClearLcm
说 明: 清屏
********************************************************************************/
void ClearLcm(void)
{
INT16U i;
LcmSetAddrPoint(HT6963C_GRAPH_HOME_ADDR); //清除图像
for(i=0; i<HT6963C_GRAPH_Y * HT6963C_GRAPH_X * 8; i++)
LcmDataOnceIncWr(0x00);
LcmSetAddrPoint(HT6963C_TEXT_HOME_ADDR); //清除文本
for(i = 0; i < HT6963C_TEXT_Y * HT6963C_TEXT_X + 30; i++)
LcmDataOnceIncWr(0x00);
}
/*******************************************************************************
程序名: OutBmp
说 明: 开机界面
********************************************************************************/
void OutBmp(INT8U start_col,INT8U start_row,INT8U col,INT8U row)
{
INT16U offset,k = 0;
INT8U i,j;
col = col;
row = row;
offset = HT6963C_GRAPH_HOME_ADDDR + 480 + start_row * 30 + start_col; //30=1(rows)*30(bytes)
LcmSetAddrPoint(offset);
for(i = 0; i< 80; i++)
{
ReadZK(0, i, 0, 1);
for(j=0; j<30; j++)
{
LcmDataOnceIncWr(chZK[j]);
}
delay_10ms();
offset += 30;
LcmSetAddrPoint(offset);
}
}
/*******************************************************************************
程序名: InitLcm
说 明: 液晶屏初始化
********************************************************************************/
void InitLcm(void)
{
LcmWrTwoPara(HT6963C_GRAPH_HOME_ADDR); //设置图形界面首地址
LcmWrCmd(LCM_SET_GRAPH_HOME_ADDR);
LcmWrTwoPara(HT6963C_GRAPH_Y & 0x00ff); //图形显示区域设置设置--函数参数的低八位为区域值
LcmWrCmd(LCM_SET_GRAPH_Y);
LcmWrTwoPara(HT6963C_TEXT_HOME_ADDR); //文本显示区首地址设置
LcmWrCmd(LCM_SET_TEXT_HOME_ADDR);
LcmWrTwoPara(HT6963C_TEXT_Y & 0x00ff); //文本显示区域设置--函数参数的低八位为区域值
LcmWrCmd(LCM_SET_TEXT_Y);
LcmWrCmd(LCM_SET_DISP_MODE+8); //图形方式开
LcmWrCmd(LCM_SET_CGROM_MODE_OR);
LcmWrCmd(LCM_SET_CURS_FIGU+0); //光标形状设置,1行光标
ClearLcm(); //清显示屏
}
/*******************************************************************************
程序名: ClearGraph
说 明: 清除图像
********************************************************************************/
void ClearGraph(void)
{
INT16U i;
LcmSetAddrPoint(HT6963C_GRAPH_HOME_ADDDR + 480);
for(i = 0; i < HT6963C_OPER_AREA; i++)
LcmDataOnceIncWr(0x0);
}
void CheckGraph(void)
{
INT8U i;
ClearGraph();
OutBmp(0,0,30,80);
delay_1sec();
delay_1sec();
delay_1sec();
ClearGraph();
for(i=0; i<10; i++)
{
GraphChar0808(2, i, i+0x30, 1);
GraphChar0808(3, i, i+0x40, 1);
}
delay_1sec();
delay_1sec();
delay_1sec();
ClearGraph();
GraphStr1616(1, 0, "以热爱祖国为荣,以危害祖国为耻以服务人民为荣,以背离人民为耻以崇尚科学为荣,以愚昧无知为耻以辛勤劳动为荣,以好逸恶劳为耻以团结互助为荣,以损人利己为耻", 1);
delay_1sec();
delay_1sec();
delay_1sec();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -