|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-6-17 22:44:17
|
显示全部楼层
再贴两个函数。没经过优化,大家多指教。
/*********************************************************************
* 函数名: lcd_draw_bmp(); *
* 功 能: 在LCD指定坐标绘制一指定大小的BMP图像 *
* 输 入: x(0 - 7) y(0 -63) width(1 - 128) height(1 - 63) *
* ******************************************************************/
extern void lcd_draw_bmp(uchar x, uchar y, uchar width, uchar height, char *bmp)
{
uchar i, j;
uchar y_byte = y / 32;
uchar y_bit = y % 32;
lcd_write_cmd(EXTEND_SET); //扩展指令集
lcd_write_cmd(DRAW_OFF); //绘图显示关
if (y >= 32 || (y < 32 && y + height <= 32)) //要绘制的图案全部在上半屏或下半屏
{
for (i = 0; i < height; i++)
{
for (j = 0; j < width / 16; j++)
{
lcd_write_cmd(0x80 + y_bit + i);
lcd_write_cmd(0x80 + x + j + y_byte * 8); //通过y_byte * 8 来选定上半屏或下半屏
lcd_write_data(*bmp++);
lcd_write_data(*bmp++);
}
}
}
else if (y < 32 && y + height > 32) //要绘制的图案一半在上半屏,一半在下半屏
{
for (i = 0; i < 32 - y; i++) //上半屏部分
{
for (j = 0; j < width / 16; j++)
{
lcd_write_cmd(0x80 + y_bit + i);
lcd_write_cmd(0x80 + x + j);
lcd_write_data(*bmp++);
lcd_write_data(*bmp++);
}
}
for (i = 0; i < y + height - 32; i++) //下半屏部分
{
for (j = 0; j < width / 16; j++)
{
lcd_write_cmd(0x80 + i);
lcd_write_cmd(0x88 + x + j);
lcd_write_data(*bmp++);
lcd_write_data(*bmp++);
}
}
}
lcd_write_cmd(DRAW_ON); //绘图显示开
lcd_write_cmd(BASIC_SET); //基本指令集
return ;
}
/*******************************************************
* 函数名: lcd_put_var() *
* 功 能: 向指定坐标输出一个两位数变量 *
* 输 入: x坐标(1 - 14) y坐标(1 - 4) *
* ****************************************************/
void lcd_put_var(uchar x, uchar y, uchar var)
{
uchar xx, addr, tmp, varh;
x--;
y--;
varh = (var / 10 % 10) + '0'; //算出变量高位的ASCII码
var = (var % 10) + '0'; //变量低位的ASCII码
//xx = x % 2;
xx = x & 0x01; //x是奇数还是偶数
//x = x / 2;
x >>= 1; //x右移一位, 相当于 x / 2
//根据y的值算出对应的地址
if (y == 0)
{
addr = 0x80 + x;
}
else if (y == 1)
{
addr = 0x90 + x;
}
else if (y == 2)
{
addr = 0x88 + x;
}
else if (y == 3)
{
addr = 0x98 + x;
}
if (xx) //如果x % 2不为零, 说明数据在某一地址的低八位上
{
lcd_write_cmd(addr); //先写地址
lcd_read_data(); //空读一次
tmp = lcd_read_data(); //读出高八位数据
lcd_write_cmd(addr); //设置地址
lcd_write_data(tmp); //写原来高八位的数据
lcd_write_data(varh); //写变量的高位
lcd_write_data(var); //写变量的低位
}
else //数据在某地址上, 高八位一个数字, 低八位一个数字, 直接写入
{
lcd_write_cmd(addr);
lcd_putc(varh);
lcd_putc(var);
}
return ;
}
我试着贴了一下软件生成的Html代码,给果出来效果不理想,还是贴文本吧。 |
|