4039|2

1372

帖子

2

TA的资源

五彩晶圆(初级)

楼主
 

驱动无控制器的单色点阵LCD模块 [复制链接]

本帖最后由 cruelfox 于 2015-2-27 09:54 编辑

     5年前买的160x64点阵单色液晶模块,没有控制器,没有资料。当初尝试单片机驱动,以失败而告终。最近想起来这个模块,搜了一下,发现有日本人将它玩起来了:http://d.hatena.ne.jp/libio50m-EX/20111106 。此外,在国内某论坛上,有人贴了个51程序(但是图片已看不到了): http://bbs.mydigit.cn/read.php?tid=324300 。根据这线索我写了个FPGA代码来尝试驱动。





模块共有DR2, CL2, M, DL1, CL1 五条信号线,经过两晚上折腾,终于驱动成功。
  1. module lcddriver(clk, dl1, m, cl1, cl2, dr2, bmp_byte, vram_addr);
  2. input clk;
  3. output reg dl1;
  4. output reg m;
  5. output cl1;
  6. output cl2;
  7. output reg dr2;
  8. input [7:0] bmp_byte;
  9. output reg [10:0] vram_addr=11'd1;

  10. reg [7:0] col_cnt;
  11. reg [5:0] row_cnt;
  12. reg col_latch;

  13. always @(posedge clk) begin
  14.         if(col_cnt<8'd159) begin
  15.                 col_cnt <= col_cnt + 1'b1;
  16.                 col_latch <= 0;
  17.         end
  18.         else begin
  19.                 col_cnt <= 0;
  20. //                if(row_cnt<7'd79)
  21.                         row_cnt <= row_cnt + 1'b1;
  22. //                else
  23. //                        row_cnt <= 0;
  24.                 col_latch <= 1;
  25.         end
  26. end

  27. always @(posedge clk) begin
  28.         if(col_cnt==8'd159) begin
  29.                 if(row_cnt==0)
  30.                         dl1 <= 1;
  31.                 else
  32.                         dl1 <= 0;
  33.         end
  34. end

  35. /*  test patterns
  36. always @(posedge clk) begin
  37. //        if (col_cnt[3]!=row_cnt[3]) // pattern 8x8
  38. //        if (col_cnt[3:0] < row_cnt[3:0])  // pattern triangle
  39.         if( ( col_cnt >= row_cnt+16 ) && (col_cnt  <= row_cnt + 96))   // pattern
  40.                 dr2 <= 1;
  41.         else
  42.                 dr2 <= 0;
  43. end
  44. */

  45. reg [11:0] ac;
  46. always @(posedge clk) begin
  47.         if(ac>=1600) begin
  48.                 m <= ~m;
  49.                 ac <= 1;
  50.         end
  51.         else
  52.                 ac <= ac+1'b1;
  53. end

  54. assign cl2 = clk;
  55. assign cl1 = col_latch & (~cl2);

  56. reg [2:0] bitcnt=1;
  57. reg [7:0] sr;
  58. always @(posedge clk) begin
  59.         dr2 <= sr[7];
  60.         bitcnt <= bitcnt+1'b1;
  61.         if(bitcnt==3'd0) begin
  62.                 sr <= bmp_byte;
  63.                 if(vram_addr >=1279)
  64.                         vram_addr <= 0;
  65.                 else
  66.                         vram_addr <= vram_addr + 1'b1;
  67.         end
  68.         else begin
  69.                 sr <= {sr[6:0],1'b0};
  70.         end
  71. end


  72. endmodule
复制代码
CL2, DR2 用来串行输入显示数据,分别是时钟和数据。我用的时钟是50MHz系统时钟分频得到的390kHz。在每行160位数据移位进去后,需要锁存一下,产生列驱动。这个锁存信号是CL1,CL1还有一个作用是行扫描驱动的移位,而行扫描的数据是DL1(在第0行时为1,其它时候为0)。

下面是这个demo的顶层模块,vram是一个双端口RAM。写RAM没启用,demo只能显示初始化的数据。
  1. module lcddummy(clk50, dl1, m, cl1, cl2, dr2);
  2. input clk50;
  3. output dl1;
  4. output m;
  5. output cl1;
  6. output cl2;
  7. output dr2;

  8. reg [6:0] clcnt;

  9. always @(posedge clk50)
  10.         clcnt <= clcnt + 1'b1;

  11. wire [10:0] raddr;
  12. wire [7:0] rdata;
  13. lcddriver dummy(.clk(clcnt[6]),
  14.                                 .dl1(dl1),
  15.                                 .m(m),
  16.                                 .cl1(cl1),
  17.                                 .cl2(cl2),
  18.                                 .dr2(dr2),
  19.                                 .bmp_byte(rdata),
  20.                                 .vram_addr(raddr));

  21. /*   --- fake ram
  22. always @(posedge clcnt[6]) begin
  23.         if( raddr < 600)
  24.                 rdata <= raddr[7:0];
  25.         else
  26.                 rdata <= 8'h80;
  27. end
  28. */


  29. vram bitmap(.rdclock(clcnt[6]),
  30.                         .rdaddress(raddr),
  31.                         .q(rdata),
  32.                         .wren(0));

  33. endmodule
复制代码


最新回复

屏幕已经点亮了。 [attach]190298[/attach]   详情 回复 发表于 2015-3-7 15:02

赞赏

2

查看全部赞赏

点赞 关注
 

回复
举报

165

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
好,对于这种没有资料的LCM来说,真是无从下手。
我手里有一块儿VFD12864显示屏,也想尝试点亮,可是自己基础不好,尝试多次都失败了。自己英语基础也不行,看说明书也是稀里糊涂的。
如果网友有类似的程序,希望能给我一份作为参考了。
屏幕一直都还放着呢。


 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
屏幕已经点亮了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表