标题: 新人求教 16位摇摇棒中 下面这两句代码是什么意思 [打印本页]

作者: stephan    时间: 2016-10-16 09:42
标题: 新人求教 16位摇摇棒中 下面这两句代码是什么意思
想问一下16位摇摇棒中 这两句是什么意思

for(i=0;i<64;i++)

{

    P0=~hanzi[disp*128+i*2];

    P2=~hanzi[disp*128+i*2+1];

    DelayUs(100);

}


作者: yzwzfyz    时间: 2016-10-16 11:42
本帖最后由 yzwzfyz 于 2016-10-16 12:01 编辑

不懂猜一下:
估计“摇摇棒中”有16个发光二极管,排可一例。试图显示汉字。
但显示汉字需要16*16的点阵才能完成,计64个LED显示一个汉字。
作者: yzwzfyz    时间: 2016-10-16 11:44
本帖最后由 yzwzfyz 于 2016-10-16 12:02 编辑

于是利用摇动,在不同的位置上切换显示的内容,利用人的视觉残留,来显示汉字。这是常用的扫描显示方式。如此就不需用64LED个来显示一个汉字了。
作者: yzwzfyz    时间: 2016-10-16 11:48
本帖最后由 yzwzfyz 于 2016-10-16 12:05 编辑

16个LED灯接在P0,P2口上,每隔100的时间(DelayUs(100)的时间),换一列显示值(切换一个汉字的不同列,一个汉字可看成由16个列组成,每列16个点),周期是64列,即显示4个汉字(也可以是16个西文字母,一个汉字的位置可放4个西文字母)。
作者: yzwzfyz    时间: 2016-10-16 11:55
本帖最后由 yzwzfyz 于 2016-10-16 12:06 编辑

i从0-63计数
数组:hanzi中,至少存了128个汉字列,每32列一个汉字
偶数列是汉字的上部或下部,对应P0所显示的LED,所以P0=~hanzi[disp*128+i*2];
奇数列是汉字的下部或上部,对应P2所显示的LED,所以 P2=~hanzi[disp*128+i*2+1];

作者: yzwzfyz    时间: 2016-10-16 11:59
本帖最后由 yzwzfyz 于 2016-10-16 12:07 编辑

数组:hanzi极可能有更多的汉字,即i>128.
disp*128是个显示位置的基地址,即从disp*128开始取字模,连续128个字节,分奇偶列且分时64次取出。
“摇摇棒”在摇动中,便形成4个汉字显示出来。

作者: stephan    时间: 2016-10-16 12:57
yzwzfyz 发表于 2016-10-16 11:55
i从0-63计数
数组:hanzi中,至少存了128个汉字列,每32列一个汉字
偶数列是汉字的上部或下部,对应P0所 ...

那为什么前边要取反啊

作者: yzwzfyz    时间: 2016-10-16 13:02
这与LED灯的接法相关,
如果:输出端口接在LED的阴极,阳极接电源。
输出1时就不亮,而输出0就亮。
另一个方法是:把汉字库的字模,事先取反。
道理一样。
作者: stephan    时间: 2016-10-16 13:05
yzwzfyz 发表于 2016-10-16 13:02
这与LED灯的接法相关,
如果:输出端口接在LED的阴极,阳极接电源。
输出1时就不亮,而输出0就亮。

奥奥,经你这么一说我都明白了,太谢谢你了。刚刚学习单片机,以后希望能多帮助
作者: stephan    时间: 2016-10-16 13:06
yzwzfyz 发表于 2016-10-16 13:02
这与LED灯的接法相关,
如果:输出端口接在LED的阴极,阳极接电源。
输出1时就不亮,而输出0就亮。

太谢谢你了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1