紧急求助,LCD12864的列显示问题
本帖最后由 孤独将一 于 2013-7-4 12:23 编辑1:写的卡住了,LCD12864用育松电子的QC12864B.看截图,我想每一列显示一个传过来的数字,但是这样只能是“lcd12864_put_string(0,0,"123456789ABCDEFG");”,即字符串传入的方式
2:我想写一个数组,希望显示“2013-07-04”,但是问题来了,显示是“2 0 1 3 - 0704 ”。
3:LCD共16列,直接“0x30+数字”会占俩列
4:帮帮忙啊
=========================
新截图了,看看。
1:我写进去比如坐标是(0x80,写入0x35(“显示数字,ASCII表示5”),写下一个0x81,则会空下一截。我知道每一行是(0x88-0x80)8列的)
2:我就想以写数字的方式把那个空的利用起来
===========================unsigned char aa[] = {1,2}
就让它显示“12”,而不是“1 2”
===================================
原因找到,19楼-22楼。上写成的
完全看不懂楼主想表达什么意思 数字和字母是单字节,汉字是双字节,不明白你弄个0x30要干什么一行显示8个汉字或者16个数字或者字母你不会这个都没搞清楚吧 可能是把字符发给了 显示汉字的子程序了。 菜鸟5莫元自己留着花。哈 babysnail 发表于 2013-7-4 10:53 static/image/common/back.gif
可能是把字符发给了 显示汉字的子程序了。 菜鸟5莫元自己留着花。哈
看看这,新截图了 本帖最后由 孤独将一 于 2013-7-4 10:59 编辑
jiaowoxiaolu 发表于 2013-7-4 10:50 static/image/common/back.gif
数字和字母是单字节,汉字是双字节,不明白你弄个0x30要干什么一行显示8个汉字或者16个数字或者字母你不 ...
新截图了,看看。
1:我写进去比如坐标是(0x80,写入0x35(“显示数字,ASCII表示5”),写下一个0x81,则会空下一截。我知道每一行是(0x88-0x80)8列的)
2:我就想以写数字的方式把那个空的利用起来 哈哈,这个问题我能帮楼主解决,分给我吧!{:shy:}void Data_Set_XY(uchar x, uchar y, uchar temp)
{
unsigned char tt;
tt = temp>>4;
if(tt<10)tt += '0';
else tt = tt-10+'A';
tt = temp&0x0f;
if(tt<10)tt += '0';
else tt = tt-10+'A';
tt = 0;
Char_Set_XY(x,y,tt);
}其实你用的显示函数应该类似Char_Set_XY(x,y,tt);显示是“2 0 1 3 - 0704 ”,用我上面的函数把数据分别放在高位、低位就好了。
一次显示一个字节,分别是高4位和低四位,两个英文字符,不懂PM我 {:smile:}{:smile:} sprintf一下就搞定了 工程师030 发表于 2013-7-4 10:57 static/image/common/back.gif
哈哈,这个问题我能帮楼主解决,分给我吧!其实你用的显示函数应该类似Char_Set_XY(x,y,tt);显示是 ...
1:首先tt是干嘛的?
2:为啥要小于10,你的意思是不是要小于{t<‘0’},这样的话应该是小于0x30(0d48) 你这图要是数组没有空格,输入的时候没有用中文输入法的话那就是你的显示函数没有区分单字节的数字和双字节的汉字 孤独将一 发表于 2013-7-4 11:07 static/image/common/back.gif
1:首先tt是干嘛的?
2:为啥要小于10,你的意思是不是要小于{t
1、转义字符,表示字符串结束。
2、要显示大于10的数字,10+‘0’的ASCII码不是'A',所以要判断一下 本帖最后由 孤独将一 于 2013-7-4 11:17 编辑
工程师030 发表于 2013-7-4 11:10 static/image/common/back.gif
1、转义字符,表示字符串结束。
2、要显示大于10的数字,10+‘0’的ASCII码不是'A',所以要判断一下 ...//============================定位显示================================================
void lcd12864_put_char( char x,char y,unsigned char dat)
{
//=============处理坐标====================
unsigned char temp;
temp = x & 0x07; //屏蔽高5位,限定x坐标的范围为0-7
y &= 0x03; //屏蔽高6位,限定y坐标的范围为0-3
switch(y)
{
case 0: temp |= 0x80; //第0行显示
break;
case 1: temp |= 0x90; //第1行显示
break;
case 2: temp |= 0x88; //第2行显示
break;
case 3: temp |= 0x98; //第3行显示
break;
}
write_lcd12864_commond(temp); //把坐标信息以命令的方式写进去。
//=============处理数字====================
unsigned char data_temp;
data_temp = dat >> 4;
if( data_temp <10 ) data_temp += '0';
else data_temp = data_temp - 10 + 'A';
data_temp = dat & 0x0f;
if( data_temp <10 ) data_temp += '0';
else data_temp = data_temp - 10 + 'A';
data_temp = 0;
write_lcd12864_data(data_temp);
}========================================================================
========================================================================
不行啊,还是有空格的 孤独将一 发表于 2013-7-4 11:14 static/image/common/back.gif
========================================================================
========================= ...
data_temp[]这个数组你要让他的第三个元素为数字0,你这个数组只有两个元素 工程师030 发表于 2013-7-4 11:17 static/image/common/back.gif
data_temp[]这个数组你要让他的第三个元素为数字0,你这个数组只有两个元素 ...
加了,还是有空格的。 孤独将一 发表于 2013-7-4 11:17 static/image/common/back.gif
加了,还是有空格的。
你试一下我的程序吧,希望能帮到你,至少我用的是没问题的 工程师030 发表于 2013-7-4 11:21 static/image/common/back.gif
你试一下我的程序吧,希望能帮到你,至少我用的是没问题的
===========================
unsigned char aa[] = {1,2}
复制代码
就让它显示“12”,而不是“1 2” 比如你要显示两个在一起的12,直接在函数Data_Set_XY(uchar x, uchar y, uchar temp),参数temp中传入0x12就行了,你可以试一下我给你的程序。我的这个函数就是相当于把0x12转换成字符串“12”,函数内部的数组tt,就是字符串“12”。你上面都可以正常写入字符串,而且达到你想要的效果,这个肯定没问题,一定是你哪里弄错了 本帖最后由 孤独将一 于 2013-7-4 11:53 编辑
工程师030 发表于 2013-7-4 11:33 static/image/common/back.gif
比如你要显示两个在一起的12,直接在函数Data_Set_XY(uchar x, uchar y, uchar temp),参数temp中传入0x12 ...
我知道原因了,但愁怎么以合适的方法解决
1:因为我想表示的列是16列,但列地址(0x80-0x88是8列),每次x坐标加一次,就意味着直接俩列。
2:可以在0x80 + x 地址处写俩次数据,就把空的补上了。是写俩次数据,但光标一次就占2列(0x80-0x88) 呵呵,只显示一个单列也行,就是根据12864字符集,找个空字符对应的序号,把要写的数字和空字符合并一下就行。当然我给你的函数解决不了就无法实现了。
页:
[1]