搜索
bottom↓
回复: 19

紧急求助,LCD12864的列显示问题

[复制链接]

出0入0汤圆

发表于 2013-7-4 10:44:14 | 显示全部楼层 |阅读模式
本帖最后由 孤独将一 于 2013-7-4 12:23 编辑

1:写的卡住了,LCD12864用育松电子的QC12864B.看截图,我想每一列显示一个传过来的数字,但是这样只能是“lcd12864_put_string(0,0,"123456789ABCDEFG");”,即字符串传入的方式
2:我想写一个数组,希望显示“2013-07-04”,但是问题来了,显示是“2 0 1 3 - 0  7  0  4 ”。
3:LCD共16列,直接“0x30+数字”会占俩列
4:帮帮忙啊

=========================
新截图了,看看。
1:我写进去比如坐标是(0x80,写入0x35(“显示数字,ASCII表示5”),写下一个0x81,则会空下一截。我知道每一行是(0x88-0x80)8列的)
2:我就想以写数字的方式把那个空的利用起来

===========================
  1. unsigned char aa[] = {1,2}
复制代码
就让它显示“12”,而不是“1 2”

===================================
原因找到,19楼-22楼。上写成的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-4 10:46:33 | 显示全部楼层
完全看不懂楼主想表达什么意思

出0入22汤圆

发表于 2013-7-4 10:50:12 | 显示全部楼层
数字和字母是单字节,汉字是双字节,不明白你弄个0x30要干什么  一行显示8个汉字或者16个数字或者字母你不会这个都没搞清楚吧

出0入0汤圆

发表于 2013-7-4 10:53:32 | 显示全部楼层
可能是把字符发给了 显示汉字的子程序了。 菜鸟5莫元自己留着花。哈

出0入0汤圆

 楼主| 发表于 2013-7-4 10:55:23 | 显示全部楼层
babysnail 发表于 2013-7-4 10:53
可能是把字符发给了 显示汉字的子程序了。 菜鸟5莫元自己留着花。哈

看看这,新截图了

出0入0汤圆

 楼主| 发表于 2013-7-4 10:55:42 | 显示全部楼层
本帖最后由 孤独将一 于 2013-7-4 10:59 编辑
jiaowoxiaolu 发表于 2013-7-4 10:50
数字和字母是单字节,汉字是双字节,不明白你弄个0x30要干什么  一行显示8个汉字或者16个数字或者字母你不 ...


新截图了,看看。
1:我写进去比如坐标是(0x80,写入0x35(“显示数字,ASCII表示5”),写下一个0x81,则会空下一截。我知道每一行是(0x88-0x80)8列的)
2:我就想以写数字的方式把那个空的利用起来

出0入46汤圆

发表于 2013-7-4 10:57:22 | 显示全部楼层
哈哈,这个问题我能帮楼主解决,分给我吧!
  1. void Data_Set_XY(uchar x, uchar y, uchar temp)
  2. {
  3.     unsigned char tt[3];
  4.     tt[0] = temp>>4;
  5.     if(tt[0]<10)tt[0] += '0';
  6.     else        tt[0] = tt[0]-10+'A';
  7.     tt[1] = temp&0x0f;
  8.     if(tt[1]<10)tt[1] += '0';
  9.     else        tt[1] = tt[1]-10+'A';
  10.     tt[2] = 0;
  11.     Char_Set_XY(x,y,tt);
  12. }
复制代码
其实你用的显示函数应该类似Char_Set_XY(x,y,tt);显示是“2 0 1 3 - 0  7  0  4 ”,用我上面的函数把数据分别放在高位、低位就好了。
一次显示一个字节,分别是高4位和低四位,两个英文字符,不懂PM我

出0入0汤圆

发表于 2013-7-4 10:58:23 | 显示全部楼层

出0入0汤圆

发表于 2013-7-4 11:01:27 | 显示全部楼层
sprintf一下就搞定了

出0入0汤圆

 楼主| 发表于 2013-7-4 11:07:35 | 显示全部楼层
工程师030 发表于 2013-7-4 10:57
哈哈,这个问题我能帮楼主解决,分给我吧!其实你用的显示函数应该类似Char_Set_XY(x,y,tt);显示是 ...

1:首先tt[2]是干嘛的?
2:为啥要小于10,你的意思是不是要小于{t[1]<‘0’},这样的话应该是小于0x30(0d48)

出0入22汤圆

发表于 2013-7-4 11:08:39 | 显示全部楼层
你这图要是数组没有空格,输入的时候没有用中文输入法的话那就是你的显示函数没有区分单字节的数字和双字节的汉字

出0入46汤圆

发表于 2013-7-4 11:10:58 | 显示全部楼层
孤独将一 发表于 2013-7-4 11:07
1:首先tt[2]是干嘛的?
2:为啥要小于10,你的意思是不是要小于{t[1]

1、转义字符,表示字符串结束。
2、要显示大于10的数字,10+‘0’的ASCII码不是'A',所以要判断一下

出0入0汤圆

 楼主| 发表于 2013-7-4 11:14:56 | 显示全部楼层
本帖最后由 孤独将一 于 2013-7-4 11:17 编辑
工程师030 发表于 2013-7-4 11:10
1、转义字符,表示字符串结束。
2、要显示大于10的数字,10+‘0’的ASCII码不是'A',所以要判断一下 ...
  1. //============================定位显示================================================
  2. void lcd12864_put_char( char x,char y,unsigned char dat)
  3. {
  4.         //=============处理坐标====================
  5.         unsigned char temp;
  6.     temp = x & 0x07;       //屏蔽高5位,限定x坐标的范围为0-7
  7.     y &= 0x03;           //屏蔽高6位,限定y坐标的范围为0-3
  8.         switch(y)
  9.         {
  10.                 case 0:                temp |= 0x80;                //第0行显示
  11.                         break;
  12.                 case 1:                temp |= 0x90;                //第1行显示       
  13.                         break;
  14.                 case 2:                temp |= 0x88;                //第2行显示
  15.                         break;                       
  16.                 case 3:                temp |= 0x98;                //第3行显示
  17.                         break;
  18.         }
  19.         write_lcd12864_commond(temp);                //把坐标信息以命令的方式写进去。
  20.         //=============处理数字====================
  21.         unsigned char data_temp[3];
  22.         data_temp[0] = dat >> 4;
  23.         if( data_temp[0] <10 ) data_temp[0] += '0';
  24.         else data_temp[0] = data_temp[0] - 10 + 'A';
  25.         data_temp[1] = dat & 0x0f;
  26.         if( data_temp[1] <10 ) data_temp[1] += '0';
  27.         else data_temp[1] = data_temp[1] - 10 + 'A';
  28. data_temp[2] = 0;
  29.         write_lcd12864_data(data_temp);       
  30. }
复制代码
========================================================================
========================================================================
不行啊,还是有空格的

出0入46汤圆

发表于 2013-7-4 11:17:12 | 显示全部楼层
孤独将一 发表于 2013-7-4 11:14
========================================================================
========================= ...

data_temp[]这个数组你要让他的第三个元素为数字0,你这个数组只有两个元素

出0入0汤圆

 楼主| 发表于 2013-7-4 11:17:35 | 显示全部楼层
工程师030 发表于 2013-7-4 11:17
data_temp[]这个数组你要让他的第三个元素为数字0,你这个数组只有两个元素 ...

加了,还是有空格的。

出0入46汤圆

发表于 2013-7-4 11:21:11 | 显示全部楼层
孤独将一 发表于 2013-7-4 11:17
加了,还是有空格的。

你试一下我的程序吧,希望能帮到你,至少我用的是没问题的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-7-4 11:24:51 | 显示全部楼层
工程师030 发表于 2013-7-4 11:21
你试一下我的程序吧,希望能帮到你,至少我用的是没问题的

===========================
unsigned char aa[] = {1,2}
复制代码
就让它显示“12”,而不是“1 2”

出0入46汤圆

发表于 2013-7-4 10:44:15 | 显示全部楼层
比如你要显示两个在一起的12,直接在函数Data_Set_XY(uchar x, uchar y, uchar temp),参数temp中传入0x12就行了,你可以试一下我给你的程序。我的这个函数就是相当于把0x12转换成字符串“12”,函数内部的数组tt,就是字符串“12”。你上面都可以正常写入字符串,而且达到你想要的效果,这个肯定没问题,一定是你哪里弄错了

出0入0汤圆

 楼主| 发表于 2013-7-4 11:51:15 | 显示全部楼层
本帖最后由 孤独将一 于 2013-7-4 11:53 编辑
工程师030 发表于 2013-7-4 11:33
比如你要显示两个在一起的12,直接在函数Data_Set_XY(uchar x, uchar y, uchar temp),参数temp中传入0x12 ...


我知道原因了,但愁怎么以合适的方法解决
1:因为我想表示的列是16列,但列地址(0x80-0x88是8列),每次x坐标加一次,就意味着直接俩列。
2:可以在0x80 + x 地址处写俩次数据,就把空的补上了。是写俩次数据,但光标一次就占2列(0x80-0x88)

出0入46汤圆

发表于 2013-7-4 16:02:46 | 显示全部楼层
呵呵,只显示一个单列也行,就是根据12864字符集,找个空字符对应的序号,把要写的数字和空字符合并一下就行。当然我给你的函数解决不了就无法实现了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 04:02

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

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