📄 lcddrive12864.c
字号:
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display16X4(uint8 lcdrow,uint8 lcdline,uint8 datanumber) // display 16x4 data
{
uint8 i;
uint16 j;
if(lcdline<64)
{
// outmi(0xc0);
outmi(0xb8|lcdrow); //设置页地址
outmi(0x40|lcdline); //设置列地址
j=datanumber*8;
for(i=0;i<8;i++)
{
if(DotNot==1)
{
outmd(~lcd_lattice16_4[i+j]);
}
else
{
outmd(lcd_lattice16_4[i+j]);
}
if(i==3)
{
outmi(0xb8|(lcdrow+1)); //设置页地址
outmi(0x40|lcdline); //设置列地址
}
}
}
else if(lcdline<121)
{
// outsi(0xc0); //设置显示起始行
outsi(0xb8|lcdrow); //设置页地址
if(lcdline<121)
{
outsi(0x40|(lcdline-64)); //设置列地址
}
j=datanumber*8;
for(i=0;i<8;i++)
{
if(DotNot==1)
{
outsd(~lcd_lattice16_4[i+j]);
}
else
{
outsd(lcd_lattice16_4[i+j]);
}
if(i==3)
{
outsi(0xb8|(lcdrow+1)); //设置页地址
outsi(0x40|(lcdline-64)); //设置列地址
}
}
}
}
/*********************************************************************************************************
** 函数名称: Display6X8
** 功能描述: 在指定的行列绘16X8点阵
** 输 入:
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display6X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber) //display 6x8 data
{
uint8 i;
uint16 j;
outmi(0xc0);
outsi(0xc0); //设置显示起始行
if(lcdline<64)
{
outmi(0xb8|lcdrow); //设置页地址
outmi(0x40|lcdline); //设置列地址
j=datanumber*8;
for(i=0;i<6;i++)
{
outmd(lcd_lattice8_8[i+j]);
}
}
else
{
outsi(0xb8|lcdrow); //设置页地址
outsi(0x40|(lcdline-64)); //设置列地址
j=datanumber*8;
for(i=0;i<6;i++)
{
outsd(lcd_lattice8_8[i+j]);
}
}
}
/*********************************************************************************************************
** 函数名称: Display2X8
** 功能描述: 在指定的行列绘2X8点阵
** 输 入:
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display2X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber) //display 6x8 data
{
uint8 i;
uint16 j;
outmi(0xc0);
outsi(0xc0); //设置显示起始行
if(lcdline<64)
{
outmi(0xb8|lcdrow); //设置页地址
outmi(0x40|(lcdline-1)); //设置列地址
j=datanumber*8;
for(i=0;i<2;i++)
{
outmd(lcd_lattice8_8[i+j]);
}
outmd(0);
}
else
{
outsi(0xb8|lcdrow); //设置页地址
outsi(0x40|(lcdline-64-1)); //设置列地址
j=datanumber*8;
for(i=0;i<2;i++)
{
outsd(lcd_lattice8_8[i+j]);
}
outsd(0);
}
}
/*********************************************************************************************************
** 函数名称: DisplayCls
** 功能描述: 清屏
** 输 入:
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void DisplayCls(void)
{
uint8 i;
uint8 j;
lcdinit();
outmi(0xc0);
outsi(0xc0); //设置显示起始行
for(i=0;i<8;i++)
{
outmi(0xb8|i); //设置页地址
outmi(0x40|0); //设置列地址
for(j=0;j<64;j++)
{
outmd(0);
}
}
for(i=0;i<8;i++)
{
outsi(0xb8|i); //设置页地址
outsi(0x40|0); //设置列地址
for(j=0;j<64;j++)
{
outsd(0);
}
}
}
/*********************************************************************************************************
** 函数名称: Display16X8Item
** 功能描述: 在指定的行列绘一16X8点阵数组
** 输 入: DotNot的bit0~3:在液晶上的反显起始列0~15,bit4~7:反显个数
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年12月16日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display16X8ItemWord(uint8 dlcdrow,uint8 item,uint8 DotNot)
{
uint8 i,j;
lcdinit();// //left and right show open//
j = (DotNot>>4) & 0x0F;
DotNot = DotNot & 0x0F;
for(i=0;i<16;i++)
{
if(mb[item][i]=='`')
{
continue;
}
if(i>DotNot && j>0)
{
Display16X8(dlcdrow,i*8, mb[item][i],1);
j--;
}
else
{
Display16X8(dlcdrow,i*8, mb[item][i],0);
}
}
}
/*********************************************************************************************************
** 函数名称: void Display16X8ItemData(uint8 lcdrow,uint8 lcdline,uint8 item,uint8 DotNot,uint8 style);
** 功能描述: DotNot bit0~7为1则对应位反显
** 输 入: style:bit7为0显示前导0;bit0~3:显示数据的个数,bit4~6:小数点后起位位置。
** 输 出:
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display16X8ItemData(uint8 lcdrow,uint8 lcdline,uint16 temp16,uint8 DotNot,uint8 style)
{
uint8 number;
bit dispzero;
number = style &0x0F; //取出显示数据的个数
dispzero = (bit)(style & 0x80); //取出是否显示前导0位。
style = (style >>4)&0x07; //取出小数点后起位位置
lcdinit(); //left and right show open
switch(style)
{
case 0://无小数点
{
Display16X8(lcdrow,lcdline,temp16%10+0x30,(bit)(DotNot&1));
lcdline-=8;
DotNot = DotNot>>1;
if(number>1)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/10)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=10) ? (temp16/10)%10+0x30 : ' ',(bit)(DotNot&1) );
}
DotNot = DotNot>>1;
lcdline-=8;
if(number>2)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/100)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=100) ? (temp16/100)%10+0x30 : ' ',(bit)(DotNot&1) );
}
DotNot = DotNot>>1;
lcdline-=8;
if(number>3)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/1000)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=1000) ? (temp16/1000)%10+0x30 : ' ',(bit)(DotNot&1) );
}
DotNot = DotNot>>1;
lcdline-=8;
if(number>4)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/10000)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=10000) ? (temp16/10000)%10+0x30 : ' ',(bit)(DotNot&1) );
}
}
}
}
}
}break;
case 1://小数点后1位
{
Display16X8(lcdrow,lcdline,temp16%10+0x30,(bit)(DotNot&1));
lcdline-=8;
DotNot = DotNot>>1;
Display16X8(lcdrow, lcdline,'.',(bit)(DotNot&1));
DotNot = DotNot>>1;
lcdline-=8;
Display16X8(lcdrow, lcdline,(temp16/10)%10+0x30,(bit)(DotNot&1));
DotNot = DotNot>>1;
lcdline-=8;
if(number>2)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/100)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=100) ? (temp16/100)%10+0x30 : ' ',(bit)(DotNot&1) );
}
DotNot = DotNot>>1;
lcdline-=8;
if(number>3)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/1000)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=1000) ? (temp16/1000)%10+0x30 : ' ',(bit)(DotNot&1) );
}
DotNot = DotNot>>1;
lcdline-=8;
if(number>4)
{
if(dispzero)//显示前导0
{
Display16X8(lcdrow, lcdline,(temp16/10000)%10+0x30,(bit)(DotNot&1));
}
else//不显示前导0
{
Display16X8(lcdrow, lcdline,(temp16>=10000) ? (temp16/10000)%10+0x30 : ' ',(bit)(DotNot&1) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -