![]() |
wulin提供代码,可能需要修改点阵LED的接线图,要把器件反转180度后,照图连接。这个需要特别注意。 |
如果想使用595,那么修改一下代码,增加595部分(红色文字代码)的处理即可: P2=rows[i+j]; col_data(rows[i+j]); P0=(1<<j)^255; 电路修改为: ![]() 经测试,是一样的效果 |
这是我修改后的代码,没有使用595,用P2口代替了 #include <reg51.h> //定义74HC595控制管脚 sbit SCK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; unsigned char rows[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x3e,0x7f,0x1c,0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; void delay(unsigned int a) { while(a--); } void col_data(unsigned char dat) { unsigned char i=0; //循环8次即可将一个字节写入寄存器中 for(i=0;i<8;i++) { SER=dat>>7;//!优先传输一个字节中的高位 dat<<=1; SCK=0; delay(1); SCK=1; delay(1); //上升沿时数据移位 } RCK=0; delay(1); RCK=1; } void main() { unsigned char i,j; while(1) { for(i=0;i<16;i++) { for(j=0;j<8;j++) { P2=rows[i+j]; P0=(1<<j)^255; delay(1300); P0=255; } } } } |
![]()
|
suncat0504 发表于 2022-1-14 19:49 额。道理懂,但是我就是不太会改。我这就是扫描列,然后让列移动。 |
最简单的方法,就是把 8x8的箭头图,变成 16x8 ,其中8x8还是你原来的箭头,另外的8x8 为全0,然后让它 滚起来。 |
你先搞清楚思路。显示滚动其实就是利用时间差,静态显示数据,形成动态的图案。这个时间差,你可以根据实验结果来调整。在某一个时刻A图,间隔一定时间后,显示B图;再次间隔一定时间显示C图...... 具体就是这个思路。按照这个思路,如果想在箭头后清除画面,就是发送能让LED灭掉的数据而已。看你提供的电路图,应该是在显示箭头后的数据中,向P0口发送全1数据即可。即P0=0xFF; |
我想让移动后无图案的数组清0,应该就能熄灭,但不知道怎么弄 |