文号
t49505
阅读
7222
回复
21
收藏
8
关于摇摇棒源码和汉字取模求单片机或者摇摇棒达人给点提示
2012/08/12
IP:江西
家里被水淹了,本来去参加年会的,结果只好窝在家里排水外加研究下摇摇棒。。。。我旁边的人家用荧光棒召唤来了武警叔叔送吃的。我各种羡慕,决定搞个摇摇棒,然后就从以前一个朋友剩下的摇摇棒空PCB板开始做。现在碰到取模的问题的,不知道大家能不能给我点提示。。。
是这样的。这个朋友的PCB是按照XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ,这个地址里面的修改而成。但是他给我的源程序和地址里面有一点小小的不同。造成我无法正确的给汉字取模。


下面我就贴上来,大家帮我分析下怎么取模。
/*****显示子程序1(汉字)*****/
void display1(void)
{
uchar i;
if(num>10){disp++;num=0;}     //12个汉字分为3次显示完(每次显示4个),每中断10次切换
if(disp>2)disp=0;
  DelayUs(5200);     //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
for(i=0;i<64;i++)
{
     P0=~hanzi[disp*128+i*2];
     P2=~hanzi[disp*128+i*2+1];
     DelayUs(100);
}
}

这是原帖的。
/*****显示子程序1(汉字)*****/
void display1(void)
{
uchar i;
if(num>10){disp++;num=0;}     //12个汉字分为3次显示完(每次显示4个),每中断10次切换
if(disp>2)disp=0;
  DelayUs(5200);     //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
for(i=64;i>0;i--)
{
     P2=~hanzi[disp*128+i*2];
     P0=~hanzi[disp*128+i*2+1];
     DelayUs(100);
}
}

这是我手边的源程序。
区别就在那条FOR语句,一个从0开始自增计数,一个从64开始自减计数。
按照我的理解,这两个的区别就是个取反的问题。


现在的情况是,我用自增的源程序也能显示,但是现实出来的内容左右镜像,并且顺序错误。
用自减的源程序不管是用PC TO LCD软件还是晓奇取模用相同的字都没法取出和他自减的程序里面一样的数值。
不巧暂时无法联系作者本人。。。不知道按照大家的理解是怎么样的或者如果我想的没错的话,取反怎么取才好?


目前,我分析出了ASCII码用这两个程序的区别,只要用自增的取模参数取模,然后每两串数据换位置就好,但是汉字我分析不出来了。


以下是自减程序里面的字模编码,大家或者看看是如何设置参数才能取得以上数值。正向逆向和上高位下高位的参数我都试了个遍,没法取成一样的。
0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,
0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,
0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,
0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00,//*"欢",0*/


0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,
0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,
0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,
0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00,//*"迎",1*/


0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,
0x20,0x01,0x27,0x81,0x24,0xA2,0x24,0x94,
0x24,0x88,0xFF,0xF4,0x24,0x82,0x24,0x82,
0x24,0x81,0x27,0x81,0x20,0x01,0x00,0x00,//*"使",2*/


0x00,0x01,0x00,0x06,0x7F,0xF8,0x44,0x40,
0x44,0x40,0x44,0x40,0x44,0x40,0x7F,0xFE,
0x44,0x40,0x44,0x40,0x44,0x42,0x44,0x41,
0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,//*"用",3*/
21
14年5个月前IP:未同步
437544
1楼
可能要字节倒序,这个功能一般的取模软件还没有
俺就用过一次,是个液晶屏的程序。
引用
评论
S.D.P作者
14年5个月前IP:未同步
437606
2楼
引用第1楼科学人于2012-08-12 00:36发表的  :
可能要字节倒序,这个功能一般的取模软件还没有
俺就用过一次,是个液晶屏的程序。


求软件名称。。。
引用
评论
14年5个月前IP:未同步
437619
3楼
这个取模软件····· QQ截图20120812104636.png
引用
评论
S.D.P作者
14年5个月前IP:未同步
437632
4楼
引用第3楼哈迪斯2001于2012-08-12 10:47发表的  :
这个取模软件·····


pc to lcd取出来的数据对我的程序显然没有能用的
引用
评论
S.D.P作者
14年5个月前IP:未同步
437633
5楼
引用第1楼科学人于2012-08-12 00:36发表的  :
可能要字节倒序,这个功能一般的取模软件还没有
俺就用过一次,是个液晶屏的程序。


用了字节倒序,果断无效。
引用
评论
14年5个月前IP:未同步
437634
6楼
我记得有软件专门生成这个的。
引用
评论
S.D.P作者
14年5个月前IP:未同步
437635
7楼
回 6楼(jrcsh) 的帖子
必然有。我用了七八种专门的软件了。。。。。哈哈哈哈哈
引用
评论
14年5个月前IP:未同步
437646
8楼
既然楼主的故障是左右镜像,那应该是程序问题了。
引用
评论
14年5个月前IP:未同步
437669
9楼
问题似乎没解决?提一下。
引用
评论
S.D.P作者
14年5个月前IP:未同步
437676
10楼
回 8楼(科学人) 的帖子
能具体点提示么?左右镜像是个什么情况?程序的点阵点亮顺序错误?
引用
评论
14年5个月前IP:未同步
437689
11楼
看楼主的程序比一般的复杂,可能是编者绕弯子了。换一个试试。
引用
评论
14年5个月前IP:未同步
437696
12楼
引用
评论
S.D.P作者
14年5个月前IP:未同步
437706
13楼
引用第12楼jxs于2012-08-12 13:59发表的  :
https://www.kechuang.org/t/40254
仔细看~~


我认真读了几遍,还研究了所有的取模参数,最后我试了垂直翻转和水平翻转,居然没用。。。所以才来求助的。。。
引用
评论
14年5个月前IP:未同步
437727
14楼
感觉摇摇棒这东西便宜,但是难做,建议楼主先做过LED点阵或液晶屏还有异步电动机的实验再来玩这个。
引用
评论
S.D.P作者
14年5个月前IP:未同步
437803
15楼
。。。。。之前只会模电,不过C的基础还行。。。
引用
评论
S.D.P作者
14年5个月前IP:未同步
437961
16楼
又有一个新的进展了。
用纵向上高位取模,从右到左从下到上的取模方式能够取出顺序完全相反的ASCII码。。大家真的一点灵感都木有么?
引用
评论
14年4个月前IP:未同步
447543
17楼
这个简单,只要把中断程序中的KY==0改为KY==1,
还有
void display1(void)
{
     uchar i;
     if(num>10)
     {
        disp++;num=0;
     }                                 //12个汉字分为3次显示完(每次显示4个),每中断10次切换
     if(disp>2)disp=0;
          DelayUs(5200);               //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
     for(i=0;i<64;i++)
     {
         P1=~hanzi[disp*128+i*2];
         P3=~hanzi[disp*128+i*2+1];
         DelayUs(100);
     }
}
中的disp++;要改为disp--

就可以了。
你手中的程序是从右往左显示的,而你参照的程序是从左往右显示的。所以会出现镜像和倒序的现象。估计你还是没有搞清摇摇显示的原理。
引用
评论
14年4个月前IP:未同步
447547
18楼
在补充一下,我所说的KY的值改变,就是往左或者往右摇动才会触发中断里的显示程序程序。
引用
评论
14年4个月前IP:未同步
448031
19楼
回 13楼(s.d.p) 的帖子
出现镜像的话可以用水平(左右?久没用,忘了。。。)翻转,反正在软件里就显示出镜像,到时摇的时候就是正常的了。。。反向这个最容易解决,你输入到软件时不会倒过来输入啊。。。比如,你的欢迎使用,就输入成用使迎欢。。。
引用
评论
S.D.P作者
14年4个月前IP:未同步
448074
20楼
回 19楼(jxs) 的帖子
问题半个月前就全部解决了。。。。最后无奈的抄板子复原原理图,重新写了整个程序,然后成功了。。。。不过还是谢谢JXS的帮助
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的