` 本帖最后由 eehome 于 2013-1-5 10:09 编辑
转自疑似版主OYL同校同级同学但唐兵如有不适,请告知
仿真效果图:
16x64点阵学习过程
首先学习的是数码管,如下图
来看看我的仿真图
如果对74hc373、74hc138不懂的同学可以看下下面的芯片资料
现在我想数码管显示01234567,请注意:你眼见的可能感觉他们没有变化是静态的,其实他们正在以很快的速度动态扫描。数码管是共阴极数码管。
程序如下:
-
- #include
- unsigned char code display[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7b,0x39,0x5e,0x79,0x71,
- };
- void delay(unsigned int n)
- {
- unsigned int x,y;
- for(x=n;x>0;x--)
- for(y=120;y>0;y--);
- }
- main()
- {
- unsigned char i;
- while(1)
- {
- for(i=0;i<8;i++)
- {
- P3=i;
- P2=display[i];
- delay(5);
- P2=0x00;
- }
- }
- }
复制代码
仿真效果图:
现在来学习学习8*8点阵,如下图
仿真图
这里用到了74hc595,这是一个8位串行输入并行输出移位寄存器芯片。我个人对它的记忆方法是这样的:DS是数据位输入端口,当SH_CP来一个上升沿时DS数据传移位寄存器bit0位,SH_CP再来一个上升沿之前的bit0数据移到了bit1位,传来的DS赋给了bit0,就这样来8个上升沿移位寄存器就有8位数据了,但是芯片输出端还没有收到数据,这就得ST_CP控制了,当它来一个上升沿时,寄存器里的数据就传到了输出端。之前一直不知道是SH_CP和ST_CP上升沿各是传的什么,这SH_CP和ST_CP中的H和T字母按字母表的顺序是H在前T在后,所以ST_CP起终结者的作用,因为移位是从低位向高位移,要想使74hc595输出的数据一致,DS得先传数据的高位。个人浅见,如有错误请指出,方便他人!
74hc595芯片资料:
程序如下:
-
- void hc595_senddat(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DS=dat&0x80;
- SH_CP=1;
- SH_CP=0;
- dat<<=1;
- }
- }
复制代码
来学习下点阵取模软件,我使用的是PCtoLCD2002完美版:
打开软件
点击文件->新建
点击确定
在那格子上左键单击就会选中,右键单击选中的就会取消。
点击选项
设置如下
点击确定
再点击生成字模,再拷贝代码
现在就得编程序了
-
- #include
- ***it SH_CP=P2^0;
- ***it DS=P2^1;
- ***it ST_CP=P2^2;
- unsigned char code display[]={
- 0x04,0xFE,0x81,0xBE,0xAA,0xAA,0xBE,0x80,/*"未命名文件",0*/
- };
- void delay(unsigned int n)
- {
- unsigned int x,y;
- for(x=n;x>0;x--)
- for(y=120;y>0;y--);
- }
- void hc595_senddat(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DS=dat&0x80;
- SH_CP=1;
- SH_CP=0;
- dat<<=1;
- }
- }
- main()
- {
- unsigned char i;
- SH_CP=0;
- ST_CP=0;
- while(1)
- {
- for(i=0;i<8;i++)
- {
- hc595_senddat(display[i]);
- P3=i;
- ST_CP=1;
- ST_CP=0;
- delay(5);
- }
- }
- }
复制代码
仿真效果图:
向16*16进军了!
仿真图
现在这74hc595级联,就是16位串行输入并行输出了,所以得调用两次hc595_senddat函数。
我们取模时得选择模式->字符模式,然后在生成字模左边打入汉字、数字或字符!我们就显示一个“湖”字吧!
主程序如下:
-
- main()
- {
- unsigned char i;
- SH_CP=0;
- ST_CP=0;
- while(1)
- {
- for(i=0;i<16;i++)
- {
- hc595_senddat(display[2*i+1]);
- hc595_senddat(display[2*i]);
- P3=i;
- ST_CP=1;
- ST_CP=0;
- }
- }
- }
复制代码
仿真效果图
你可以移动他们组合成16*16点阵再仿真,这样效果会更加漂亮!
现在来实现16*64了!
仿真图
我们来显示“湖北师院”四个字!取模生成代码拷贝到display数组去。
主程序如下:
-
- main()
- {
- unsigned char i;
- char j;
- SH_CP=0;
- ST_CP=0;
- while(1)
- {
- for(i=0;i<16;i++)
- {
- for(j=3;j>=0;j--)
- {
- hc595_senddat(display[32*j+2*i+1]);
- hc595_senddat(display[32*j+2*i]);
- }
- P3=i;
- ST_CP=1;
- ST_CP=0;
- }
- }
- }
复制代码
现在来看看这16*64点阵怎么移动显示汉字的,我是从数码管得出的经验,在 论坛上有同学做过拉幕式技术,即0123456789 循环显示(意思就是8个数码管第一次动态显示01234567一段时间,第二次动态显示12345678一段时间,第三次动态显示23456789一段时间……
第N次动态显示6789 0,第N+1次动态显示789 01……);效果图如下:
点阵跟数码管原理差不多,就这样我把程序也仿抄了。结果测试成功了。。。。。。
把它们拼起来,ISIS 点击系统->设置动画选项
效果图如第一图
目前正在做实物,已完成8*8点阵,实物图如下:
已完成8*16点阵,实物图如下:
|