行驱74HC154,列驱8个74HC595 程序如下
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit CCLK=P2^0; //数据在上升沿进入移位寄存器sbit LOAD=P2^1; //74HC595串行数据输入端sbit HCLK=P2^2; //上升沿时将数据输出到并行端口sbit OG=P0^0;uchar A[16][1]={0x02,0x02,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02};/*"计",右*/uchar F[16][1]={0x00,0x04,0x08,0x08,0x00,0x00,0xEF,0x08,0x08,0x08,0x08,0x08,0x28,0x18,0x08,0x00};/*"计",左*//*延时函数*/void Delay(unsigned int wait){ unsigned char a; for(;wait>0;wait--) for(a=0;a<125;a++); }/*向74HC595发送数据*/void Send(uchar byte){ uchar b,temp1; temp1=byte; for(b=0;b<8;b++) { temp1=temp1<<1; LOAD=CY; CCLK=0; _nop_(); _nop_(); CCLK=1; }}void leftoned (){ uchar u,p;for(u=0;u<16;u++) { A[u][0]=(A[u][0])>>1; if((F[u][0])&0x01){A[u][0]=(A[u][0])|0x80;} F[u][0]=(F[u][0])>>1; if((A[u][0])&0x01){F[u][0]=(F[u][0])|0x80;} //就是这里的A[u][0]已经不是初始值了导致出现了偏差
}}void main (){ uchar *ip1,*ip2,temp1,temp2,d,e;while(1){ for(d=0;d<30;d++){ip1=&A[0];ip2=&F[0];for(e=0;e<16;e++) { temp1=*ip1;temp2=*ip2; Send(temp1);//测试程序一个“计”显示了四遍。。。 Send(temp2); Send(temp1); Send(temp2); Send(temp1); Send(temp2); Send(temp1); Send(temp2); ip1++;ip2++; HCLK=0; _nop_(); _nop_(); HCLK=1; P3=e; OG=0; Delay(3); OG=1;} } leftoned(); } }
结果出现了图片这种偏差 要怎么解决。。。另外这个程序中“计”的字模数组的定义是uchar 二不是uchar code 使得程序占空间较多 若是改为uchar code 定义 要如何实现一个灯一个灯的左移?
关于51单片机16*64LED点阵左移程序~~高手进~~~
这不仅仅是简单的移位,我也做过,你生成字型码的时候是横着扫描吗?如果是,移位也会横向,如果不是,移位的话会乱码。存放字型码的最好是Uchar code,这样占用数据空间会减小。你移位的时候用中间变量和指针进行操作。还有,你扫码方式,我做的是1\/4行扫。你的如果是逐行扫描就不太一样 了。
51单片机7219芯片组的16*64LED点阵如何实现左移
这种可以靠软件来完成,把原本在第二列的换到第一列,第三列换到第二列来显示就可以了
大家好,请问有谁做过51单片机的16*64点阵吗,,求仿真图和程序
我写过一个8*8点阵 是用的 串入并出 方式 是汇编的 你参考下吧 其实可以考虑下用液晶 成本也不高 ;MyDesign 8x8LEDboard by MCU ;阴极(行ROW);共阳极(列COL);P3.4---MD ;P3.5---CLR_COL 164并出端清零(显示);P3.6---CLK1 164移位脉冲输出(驱动);P3.7---CLK2 164移位...
求51单片机驱动16X64点阵,行列用74HC595芯片驱动的程序
\/\/74HC595练习程序 \/\/串入并出实现16流水灯效果 \/\/2009.12.28 include"reg52.h"sbit shcp=P2^0; \/\/数据在上升沿进入移位寄存器 sbit date1=P2^1; \/\/串行数据输入端 sbit clock=P2^2; \/\/上升沿时将数据输出到并行端口 unsigned char tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb...
单片机51,LED点阵如何使点阵上显示的字会左右移动,或上下移动?
回答:液晶显示屏是不停闪烁的,而且一次只能显示一个图案。显示屏上显示12345也是每次在一个位置上显示一个数字,不停的显示五次,由于计算速度快,及人眼暂留现象,使人感觉上显示的是12345。现在,你如果需要动画效果,需要从底层做起。一,写函数,完成指定位置显示指定字符。二,写延时函数,三,写延时显示字符...
16*32点阵屏如何左移,点阵屏是行扫,但字模取模是横向,现在只能上下移动...
横扫要用到移位了,第一个字节往左(也可能是往右,看你取模高位在先还是低位在先)移移位,右边补零,再或上第二个字节的高位就得到了移动后的第一个字节的数据,以此类推计算出第二、第三个字节的数据 并送达点阵上显示
51单片机led 16x64点阵可以显示多少数字和字母
静止可以显示4个汉字、8个字母。滚动只要单片机程序能存的下可以显示无数个了
51单片机16*16点阵4个汉字LED屏显示 请帮忙修改下程序,其他都不变...
共16行,第三次中断,从行缓存头上开始,每行送18个BIT,共16行,。。。依此类推。第九次中断,更新缓存字节的内容,每行送16个BIT。每次送的BIT超过了实际显示的象素,这样从显示的效果看起来就是字在向左移动。与之对应,如果先送24个BIT,然后,23,然后22,则显示效果是右移 ...
51单片机+10片 74hc595 控制16*64点阵屏显示
unsigned char buffer[8]={0x01,0,0,0,0,0,0,0};\/\/64列 void main(){ HC595_OE = 0;HC595_OE = 1;\/\/假设行低电平有效,列高电平有效,显示效果为第一行,第一列坐标为(0,0)的像素点亮,其他均不亮 Lattice_WriteData(buffer,0xfe,0xff);while(1){ } } \/\/如有问题,可再...
求51单片机16*16的点阵汉字移动原理
首先是让汉字能够静态显示,显示一段时间后(时间可能很短)把所显示的汉字编码移一位重新送出,比如要向左移动,原本显示在第一列的数据就丢弃了,把第二列的数据送到第一列上显示,依次移动显示一屏,显示一段时间再进行一次移动,人们看起来也就是移动的了。 还搞不明白的话,可以晚上问我。