一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

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

可以测试vfd屏幕cu20026scpb用的lcd_smartie-5.3.2

[复制链接]
发表于 2010-8-17 20:19 | 显示全部楼层 |阅读模式
本帖最后由 狗狗百里游 于 2010-8-18 14:01 编辑

有人反应20×2的vfd,型号cu20026scpb,用串口驱动,上位机用lcd_smartie不能正常使用。
我修改了lcd_smartie5.3.2版本的程序,添加了选择cu20026scpb,供测试vfd屏幕是否正常工作而已...

5.PNG

lcd_smartie-5.3.2_final-src_YUKI_2010-8-18.rar
更新:
可以调节cu20026scpb亮度。
可以使用5×7的自定字符。


lcd_smartie-5.3.2_final-src_YUKI_2010-8-18.rar (771.13 KB, 下载次数: 635)
发表于 2010-8-17 20:32 | 显示全部楼层
太好了!十分感谢!
发表于 2010-8-17 20:51 | 显示全部楼层
测试完全正常!!太感谢了!!上图
aaaa.jpg
发表于 2010-8-18 14:54 | 显示全部楼层
我想用你的屏做个GPS钟,网上搜到一个类似的东东,可惜和你的屏不太一样(日立的)接上后乱码
http://www.hellocq.net/forum/showthread.php?t=149836&page=1&pp=30

你能帮我改一下原代码吗,只要能适应你这块屏即可,十几年前玩过单片机,都还给老师了,汇编读着很费劲,谢谢!

GPS_VFD.asm

28.28 KB, 下载次数: 283, 下载积分: 一乐金币 -1

 楼主| 发表于 2010-8-18 19:52 | 显示全部楼层
我不用汇编的...汇编项目不好维护。
发表于 2010-8-19 16:52 | 显示全部楼层
我也想用这个屏做那个GPS钟呀!不知上面遇到什莫情况?接上后是乱码吗?波特率设对没?问题解决没有呀?
发表于 2010-8-23 18:52 | 显示全部楼层
弱弱的问一下,不知道点阵屏能用不?
发表于 2010-8-23 19:54 | 显示全部楼层
点阵屏应该不行!期待百里游大侠可以看一下那个GPS钟的程序!我用cu20026scpb做了一个,字符都可以正常显示,就是碰到的问题和此贴开头一样VFD两行都显示相同内容,不知能麻烦您帮忙修改一下吗?其他都正常!只要两行可以分开显示不同内容就OK!
 楼主| 发表于 2010-8-23 22:50 | 显示全部楼层
本帖最后由 狗狗百里游 于 2010-8-24 02:10 编辑

你源程序是汇编的,我改不了的。
给个delphi的代码你参考,你可以改成驱动cu20026scpb的单片机c语言驱动库,让汇编调用c语言,或者直接改成汇编的。




  1. procedure TLCD_CU.initLCD;
  2. var
  3. // g: Cardinal;
  4.   e1: AnsiString;
  5.   e2: AnsiString;
  6. begin
  7.   if (not bConnected) then Exit;
  8.   e1 := 'HD44780_4Bit    YUKI';
  9.   e2 := '1234567890ABCDEFGHIJ';
  10.   writeDevice($1B); //软件重启VFD,需要等待100ms以上
  11.   writeDevice($49);
  12.   Sleep(333);
  13.   writeDevice($16); //关闭 光标显示下划线/光标闪烁
  14. //设置当前光标的坐标,Position cursor,第一行 0x00 0x01 ..... 0x13,第二行 0x14 0x15 ..... 0x27
  15.   writeDevice($1B);
  16.   writeDevice($48);
  17.   writeDevice($00);
  18.   writeDevice(e1); //发送可见字符串
  19. //设置当前光标的坐标,Position cursor,第一行 0x00 0x01 ..... 0x13,第二行 0x14 0x15 ..... 0x27
  20.   writeDevice($1B);
  21.   writeDevice($48);
  22.   writeDevice($14);
  23.   writeDevice(e2);
  24. //writeDevice(0x0D);//Carriage Return 回车
  25.   Sleep(2000);
  26.   writeDevice($0E); //Clear Display 清除显示
  27. end;
  28. procedure TLCD_CU.setBrightness(level: Integer); //设置亮度
  29. begin //level=0到255
  30.   writeDevice($1B);
  31.   writeDevice($4C);
  32.   writeDevice(level);
  33. end;
  34. procedure TLCD_CU.setPosition(x, y: Integer);
  35. var b: Byte;
  36. begin
  37.   if (41 > x) and (x > 0) then
  38.     if (3 > y) and (y > 0) then
  39.     begin
  40.       writeDevice($1B);
  41.       writeDevice($48);
  42.       b := Byte((x - 1) + 20 * (y - 1));
  43.       writeDevice(b);
  44.     end;
  45. //  writeDevice(AnsiChar ($FE)+AnsiChar ('G')+AnsiChar (x)+AnsiChar (y));
  46.   inherited;
  47. end;
  48. procedure TLCD_CU.write(str: AnsiString);
  49. var
  50.   i: Cardinal;
  51. begin
  52.   for i := 1 to Length(str) do
  53.   begin
  54.     case Ord(str[i]) of
  55.       176: str[i] := AnsiChar(0);
  56.       158: str[i] := AnsiChar(1);
  57.       131: str[i] := AnsiChar(2);
  58.       132: str[i] := AnsiChar(3);
  59.       133: str[i] := AnsiChar(4);
  60.       134: str[i] := AnsiChar(5);
  61.       135: str[i] := AnsiChar(6);
  62.       136: str[i] := AnsiChar(7);
  63.     end;
  64.   end;
  65.   writeDevice(str);
  66. end;

  67. procedure TLCD_CU.customChar(character: Integer; data: array of Byte);
  68. var
  69.   a: array[0..7] of Byte; // hd44780格式8个字符
  70.   b: array[0..4] of Byte; //cu20026scpb格式  5个字符
  71.   P: array[1..40] of Byte; //自定义字符的字模
  72.   i, j: Integer;
  73. begin
  74.   for i := 0 to 7 do a[i] := data[i];
  75.   for i := 1 to 40 do
  76.     P[i] := 0;
  77.   j := 1;
  78.   for i := 0 to 7 do //组合自定义字符的字模
  79.   begin
  80.     P[j] := (a[i] and $10)div$10;
  81.     P[j + 1] := (a[i] and $8)div$8;
  82.     P[j + 2] := (a[i] and $4)div$4;
  83.     P[j + 3] := (a[i] and $2)div$2;
  84.     P[j + 4] := (a[i] and $1);
  85.     j := j + 5;
  86.   end;
  87.      //  P[36] := 0;  //不显示下划线
  88.   j := 1; //从35个像素,分割成5个字节
  89.   for i := 0 to 4 do
  90.   begin
  91.     b[i] := Byte(P[j] + P[j + 1] * 2 + P[j + 2] * 4 + P[j + 3] * 8 + P[j + 4] * 16 + P[j + 5] * 32 + P[j + 6] * 64 + P[j + 7] * 128);
  92.     b[i] := Byte(P[j] + P[j + 1] * 2 + P[j + 2] * 4 + P[j + 3] * 8 + P[j + 4] * 16 + P[j + 5] * 32 + P[j + 6] * 64 + P[j + 7] * 128);
  93.     j := j + 8;
  94.   end;
  95.   writeDevice($1B);
  96.   writeDevice($43);
  97.   writeDevice(Byte(character)); //可以在$00到$FF,没有命令控制字符重复的范围内,定义最多16个字符
  98.   writeDevice(b[0]);
  99.   writeDevice(b[1]);
  100.   writeDevice(b[2]);
  101.   writeDevice(b[3]);
  102.   writeDevice(b[4]); Sleep(10);
  103. end;
  104. procedure TLCD_CU.writeDevice(byte: Byte);
  105. begin
  106. serial.Write_AnsiString(AnsiChar(byte));
  107. // uart1_putc(AnsiChar(byte));
  108. end;
  109. procedure TLCD_CU.writeDevice(buffer: AnsiString);
  110. begin
  111. serial.Write_AnsiString(buffer);
  112. // uart1_putc(buffer);
  113. end;

复制代码
发表于 2010-8-26 08:50 | 显示全部楼层
费了毛大的劲,又重新复习了一下汇编,一行行程序的翻译、跟踪,终于算看懂了GPS钟的输出部分,wangyonjie 可以打开原程序,修改所有CALL S_COM前一句,类似MOV A,#XXX部分,可以输出字符、变量和vfd的控制代码,这块VFD有很多玩法 ,继续研究中。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-25 00:30 , Processed in 0.087184 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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