|
本帖最后由 hwtech 于 2012-9-16 11:34 编辑
很多同学都一直在使用字符屏,实际上点阵屏要比字符屏灵活得多,
看看现在市场上大产量的产品都是点阵屏,只有仪器等之类小量产品才采用字符屏
为了方便大家,我简单写下
一,点阵屏内部结构
点阵屏内部有个显示内存(DISPLAY RAM),点阵屏的驱动电路芯片(如KSS0725,ST7565,SSD1815...)负责把显示内存的内容刷新到显示屏上,使用者只需操作显示内存就可以啦。内部就这么简单
二,驱动芯片初始化
每个驱动芯片一般要初始化的,看一个例子
1,先要复位显示屏
复位脚给个复位信号,这样让屏回到初始状态,有的驱动芯片有软件复位命令
2,初始化命令
MC_DSC_COMMAND_WRITE(DSC_LCD_ON_COMMAND); //LCD ON
MC_DSC_TIMER_DELAY(1);//延时
MC_DSC_COMMAND_WRITE(DSC_COM_DIR); //COM direction
MC_DSC_TIMER_DELAY(1);
MC_DSC_COMMAND_WRITE(0x40|DSC_Y_OFFSET); //start line
MC_DSC_TIMER_DELAY(1);
MC_DSC_COMMAND_WRITE(DSC_SEG_DIR); //start line
MC_DSC_COMMAND_WRITE(DSC_LCD_BIAS_COMMAND); //BIAS
MC_DSC_TIMER_DELAY(1);//2y
MC_DSC_COMMAND_WRITE(DSC_LCD_POWER_CTRL_COMMAND|0x05);
MC_DSC_TIMER_DELAY(1);//2y
MC_DSC_COMMAND_WRITE(DSC_LCD_POWER_CTRL_COMMAND|0x07);
MC_DSC_TIMER_DELAY(1);//2y
// Initializing 2
MC_DSC_COMMAND_WRITE(DSC_LCD_V5_VOLTAGE_COMMAND);
//lcd 对比度调节,固定位置
MC_DSC_COMMAND_WRITE(DSC_CONTRAST);//默认的
MC_DSC_TIMER_DELAY(1);//2y
上面我都用宏来写啦,这样容易看懂,也容易修改代码
三,汉字显示
相信大家都知道内码概念
汉字和英文在存盘时候都是有自己的编码的,英文是一个字节,如ASCII 码 0 ,实际存盘是0X30, '啊',的存盘是0XB0,0XA1,如果按照BIG_END来读就是U16型0xa1b0,小的在低字节
知道内码了就可以计算字库的字模位置啦
比如16X16点阵的字库,每个点是1BIT,一般是每个汉字占用32个字节,有横排竖排之分哟,调试时候要注意
//这个例子是在单片机里也开了一个显示缓存,对于不是复杂系统是没有必要的,复杂系统就需要,比如绘图啦,等等,滚动字啦。。。。
void diplay_hzk16(u8 x, u8 y,u8 x1,u8 y1,u8 * hzcode)
{
u32 hzk_address;
u8 hzk_buf[32];
u8 ch,j,k;
// HZK_16_ADDRESS 汉字库放在FLASH的位置
//汉字每个区是94个汉字
hzk_address=(u32)((u16) 94*(hzcode[0]-0xa1)+(u16)(hzcode[1]-0xa1))*32+HZK_16_ADDRESS;//计算偏移量
//从字库里读到局部变量hzk_buf里
sFLASH_ReadBuffer(hzk_buf, hzk_address,32);
///显示汉字
for(k=0;k<32;)
{
for(j=0,ch=0x80;j<8;j++)
{
if(ch&hzk_buf[k])
{
if(((x+j)<=x1)&&(y<=y1))
{
show_dot(x+j, y,1);//写点,我在单片机里开了内存哟,要修改
}
}
ch>>=1;
}
k++;
for(j=0,ch=0x80;j<8;j++)
{
if(ch&hzk_buf[k])
{
if(((x+j+8)<=x1)&&(y<=y1))
{
show_dot(x+8+j, y,1);//写点,我在单片机里开了内存哟,要修改
}
}
ch>>=1;
}
k++;
y++;
}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|