找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12154|回复: 15
收起左侧

51单片机驱动2.4寸彩屏赏玩记

  [复制链接]
ID:51472 发表于 2013-7-9 10:00 | 显示全部楼层 |阅读模式
    前几天在网上找到一款2.4吋屏,买来几天一直没空玩,这几天放假,正在玩玩。这个屏价格不高,显示效果却非常好,分辨率为240×320的,显示非常细腻,买的时候看网上那个图片不太好,但反正不贵,所以抱着无所谓的态度买来玩玩。拿到手后看到的结果却远比当时的图片要好,全新的屏非常漂亮,光看外观就觉得值了。

    拿到手的是一个套件,就是作者开源的数码相框作品。拿到手的板比较粗糙,包括板上用于编程的编程插座都没有安装。因为是贴片的ATMEGA88,估计没装插座的话也没有写过代码。按作者提示找了个二节电池座,接上电,果然什么也没有显示出来。因此,要玩第一步就要将代码写进去。我手边有西尔特的SUPRO U280编程器,但对于焊在板上的贴片无能为力。所以只能找ISP编程器了,由于这个玩艺是3V电池供电,所以要用它能ISP编程器供电可能够呛,这样只能用USB型的ISPRO了。找来USB型ISPRO,它是十脚接口中,板上是6针,不能匹配,于是又找来一个双排十针座和单排针,单排孔,将单排针焊到板子上,单排孔与双排十针座用线连接,做个转接器。这里要注意板上的针是6针单排,所以一不小心有可能会插反,那可能会烧毁的,怎么办呢?从原来买的周立功的那个ISP座得到启发,6针中第一针是VCC,在USB型的编程器上用不到,仍装6针,但是将第一针(VCC)剪掉,而孔仍装6个,但是将第一个孔用一段线给塞上。这样,只要保证不错位插入,就可以保证不会插反了(插反了插不进去)。一阵忙活,一个下午完了。

20090428191954996.jpg
    说句多余的话,准备给板子上电时,是先做了个小开关电源将15V电源转成3V,这么做着,突然想明白了一件事。多年前就知道“本质安全”这个词,当时也觉得自己能理解了,但要自己表述就觉得讲不清,现在我能够完全理解“本质安全”的概念了,这样做不是“本质安全”的。做产品手边备件多不要紧,毁了一套也就丢掉些钱而已。现在手边就一套器件,做实验尤其是摸索性的实验还是保险为好,万一烧掉了,恐怕就再也没有兴致来玩这个东西了。所以放弃了这一方案,还是用电池了,至多就是多买几节电用着吧。

    上电、下载演示程序、将图片文件写入SD卡...一番忙之后,图片出来了,真个是非常的清晰!虽然是65K色的,但人眼根本分辨不出来。下载程序之前,很是犹豫了一会,因为我知道ATMEGA有锁死的问题,如果熔丝设得不对,一次性就完蛋。这个是贴片的,要拿下来修复或者外接晶振之类进行修复,相当麻烦,所以查了好半天的ATMEGA88的数据手册,上网查了关于锁死的答疑,但心里总不能踏实,最后想想算啦,保留其原来的熔丝,我不改它了,将自动编程里有关熔丝的设置全部勾掉。

    接下来当然就由简到难地玩了......先按作者的提示,找一些自己的图片替代原来的图片,虽不过是一些图形软件的分辨率调整、图片切割、转换、写SD卡之类的操作,实在没有什么技术含量,不过自己的图片出来了仍是非常兴奋。环顾左右,恨不能像贝尔德那样抓个人过来看看......当然,小兴奋一过,接下来就要修改程序了。AVR我不是很熟,但好歹还是玩过一段时间的,作者用的是WINAVR,我写过这方面的教程,所以还不至于手忙脚乱。装上WINAVR,用PE打开程序,一开始是简单改改,就是多写几张图片、改变一下浏览速度之类的......其实也没改着什么有用的功能,可是一个晚上却已过去了,明天继续。
    按作者的提示,到目前为止,要是要多装几个图片之类肯定是没有问题了,可是这个好像没有什么价值。还是要玩汉字显示,图形显示之类,接下来的一天半时间就是不断地查资料、写代码、下载软件(Avrstudio、字模生成软件)、安装软件……这里不是技术博客,就不一一细述了,反正到今天我写文章为止(第三天中午),我能随心所欲地在指定位置显示16点阵汉字,24点阵汉字,为什么要用到24点阵的汉字呢?这是因为在这个尺寸下16点阵的字实在是太小了,而24点阵的汉字则大小较为适宜。前景色、背景色可调,可以显示16点阵、24点阵的图形(如圆、三角形等),而且我还找了26种颜色及其对应的代码,并用#define语句作了定义,并将其单独作为一个文件mydef.h保存,也就是说,只要我在程序中用#include “mydef.h”就能用CBlue,CGreen,CRed之类的符号来表示所需要的颜色了,非常方便。最令我满意的是我可以用一般的单色点阵字库了,一个16点阵的单色字库只要32字节,如果用全色的,可是要512字节啊。在玩的过程中,早年学过的有关BMP图形结构的知识发挥了作用,并且我开始对所谓“透明”、“异或运算”等一些计算机图形操作中的专业述语有所悟了。只是可惜没有这个液晶屏的控制芯片手册,找不到不写数据而让地址指针增加的方法(当然,如果有的话),否则,可以写一些画线的函数,这样,可以做个分针不停转动的时钟玩玩了。
下面给出几个函数
const unsigned char Hz16[][32]=
{   
{0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0xFE,
    0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,
    0x7F,0xFC,0x41,0x04,0x01,0x00,0x01,0x00,
    0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00},

{0x03,0xC0,0x0F,0xF0,0x1F,0xF8,0x3F,0xFC,
    0x7F,0xFE,0x7F,0xFE,0xFF,0xFF,0xFF,0xFF,
    0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0x7F,0xFE,
    0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x03,0xC0},
{ 0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x80,
      0x03,0x80,0x07,0xC0,0x07,0xC0,0x0F,0xE0,
      0x0F,0xE0,0x1F,0xF0,0x1F,0xF0,0x3F,0xF8,
      0x3F,0xF8,0x7F,0xFC,0x00,0x00,0x00,0x00
}      
};
const uchar Hz24[]=
{     0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x3F,
    0xF0,0x07,0xF8,0x70,0x07,0x18,0x30,0x03,
    0x18,0x30,0x03,0x1F,0x30,0x02,0x7C,0x30,
    0x02,0x18,0x30,0x02,0x1B,0xB0,0x02,0x7F,
    0xB0,0x02,0xE0,0x30,0x06,0x02,0x30,0x06,
    0xFF,0x30,0x06,0xC7,0x30,0x06,0x46,0x30,
    0x04,0x4E,0x30,0x0C,0x7E,0x30,0x08,0x40,
    0x30,0x18,0x00,0x30,0x10,0x01,0xF0,0x20,
    0x00,0xF0,0x40,0x00,0x70,0x00,0x00,0x20
};
//////////////////////////////////有关位操作的代码
#define  testbit(var, vBit)   ((var) & (1 <<(vBit)))
#define  setbit(var, vBit)    ((var) |= (1 << (vBit)))
#define  clrbit(var, vBit)    ((var) &= ~(1 << (vBit)))
//参数:起始行,超始列,前景色,背景色,汉字序号
void DrawHz16(uchar StartH,uchar StartV,uint FColor,uint BColor,uint HzID)
{    uchar i,j,k;
     LCD_WR_CMD(0,0x02,StartH);       //起始行
     LCD_WR_CMD(1,0x03,StartV);       //起始列
     LCD_WR_CMD(0,0x04,StartH+15);    //16点阵
     LCD_WR_CMD(1,0x05,StartV+15);
     LCD_WR_REG(0x0E);               
     for(i=0;i<32;i++)
     {    j=Hz16[HzID][ i];            //从16点阵的小字库中取得字形码
         for(k=0;k<8;k++)
         {    if(testbit(j,(7-k)))  
                   LCD_WR_Data(FColor);
              else
                   LCD_WR_Data(BColor);
              L(CTL_P,LCD_WR );
              H(CTL_P,LCD_WR );
         }
     }
}
//参数:起始行,超始列,前景色,背景色,汉字序号
void DrawHz24(uchar StartH,uchar StartV,uint FColor,uint BColor,uint HzID)
{    uchar i,j,k;
     LCD_WR_CMD(0,0x02,StartH);       //起始行
     LCD_WR_CMD(1,0x03,StartV);       //起始列
     LCD_WR_CMD(0,0x04,StartH+23);
     LCD_WR_CMD(1,0x05,StartV+23);
     LCD_WR_REG(0x0E);     
     for(i=0;i<72;i++)
     {    j=Hz24[ i];                       //从24点阵字库中取得字形码
         for(k=0;k<8;k++)
         {    if(testbit(j,(7-k)))  
                   LCD_WR_Data(FColor);
              else
                   LCD_WR_Data(BColor);
              L(CTL_P,LCD_WR );
              H(CTL_P,LCD_WR );
         }
     }
}      
   
  最后用一个自己的图结束:
2009042819185422.jpg
回复

使用道具 举报

ID:52177 发表于 2013-7-23 23:54 | 显示全部楼层
不错的,好假货,大家一起学习下
回复

使用道具 举报

ID:48413 发表于 2013-10-16 01:46 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:56180 发表于 2013-10-21 21:35 | 显示全部楼层
学习一下 顶了
回复

使用道具 举报

ID:64053 发表于 2014-7-16 23:39 | 显示全部楼层
一起学习顶了
回复

使用道具 举报

ID:66338 发表于 2014-9-18 12:04 | 显示全部楼层
学习一下 顶了
回复

使用道具 举报

ID:67370 发表于 2014-10-14 16:30 | 显示全部楼层
蛮可爱的。顶起。
回复

使用道具 举报

ID:67894 发表于 2014-10-25 10:31 | 显示全部楼层
恩,不错不错
回复

使用道具 举报

ID:68028 发表于 2014-10-28 21:25 | 显示全部楼层
显示器驱动是怎么搞定的?
回复

使用道具 举报

ID:69092 发表于 2014-11-20 12:33 | 显示全部楼层
謝謝分享
回复

使用道具 举报

ID:11942 发表于 2015-1-7 14:29 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:65707 发表于 2015-1-15 17:42 | 显示全部楼层
这个值得玩玩,做个电子相框.
回复

使用道具 举报

ID:72901 发表于 2015-1-28 13:05 | 显示全部楼层
不错,值得学习。
回复

使用道具 举报

ID:72901 发表于 2015-1-28 13:06 | 显示全部楼层
看着不错,但是没有完整的资料 。
回复

使用道具 举报

ID:182843 发表于 2018-1-25 13:00 | 显示全部楼层
学习一下  
回复

使用道具 举报

ID:337487 发表于 2019-3-21 00:34 | 显示全部楼层
学习一下 ,谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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