搜索
bottom↓
回复: 0

点阵屏汉字显示的基本原理与方法

[复制链接]

出0入0汤圆

发表于 2012-9-16 11:32:46 | 显示全部楼层 |阅读模式
本帖最后由 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碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 08:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表