希望有大神能够有所指导啊。还是有点不是很了解,下面是自己调试代码的一些体验过程。
#include <ioCC2530.h>
#include <string.h> #define uint unsigned int #define uchar unsigned char #define time 10 uint i,k,p; //定义LED的端口 #define r P1_0 #define sclk P1_1 #define ckl P1_2 #define a P1_4 // 接了行控制信号A #define b P1_3 //接了行控制信号B #define oe P1_5 //自摸软件没有问题。里面的数值,不需要拍擦啦。看看其他地方有没有毛病。 //发现自模软件里面的自模型怎么对应不上来呢???(PS :虽然没有弄出来目前,但是最少还是了解了自摸软件是怎么弄的。 ) char tab[128]={/*-- 文字: 王 --*/ /*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0xFF,0xFF,0xFD,0xFF,0x80,0x03,0xFD,0xF7,0xFE,0xFF,0xC0,0x2F,0xFE,0xFF,0xFD,0xDF, 0xFE,0xFF,0xFD,0xBF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xC0,0x07,0xFD,0xFF, /*-- 文字: 者 --*/ /*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0xFE,0xFF,0xF0,0x0F,0xFE,0xFF,0xE7,0xEF,0xFE,0xFF,0xD7,0xEF,0xFE,0xFF,0xB0,0x0F, 0xFE,0xFF,0x77,0xEF,0xFE,0xFF,0xF7,0xEF,0x00,0x01,0xF0,0x0F,0xFF,0xFF,0xF7,0xEF, };//第一次的程序为什么只显示4行呢?是因为在循环体中只写入了4行的值。 //其次,就是一个16进制的数值代表8个小灯泡,那么一共就得对应于32*16/8=64个字符才对啊。 //对啊,这里就是64个16进制数啊,没毛病。 //函数声明 void Delay_ms(uint tt); void Delay_ms(uint tt) { uchar i; //for(i=0;i<tt;i++) for(i=tt;i>0;i--); } void input595(uchar dat) { uchar i; for(i=0;i<8;i++) { ckl=0; if(dat&0x80) r=1; else r=0; dat<<=1; // delay(2); ckl=1; ckl=0; } } void out595() { sclk=0; sclk=1; oe=1; Delay_ms(time); sclk=0; oe=0; } void main(void) { P1DIR |= 0x3F; int q; oe=0; k=0; //a=1; //即使是这样,还是亮的,这是为什么呢??无解。 //b=0; int boardnum=4; while(1) { // for(q=0;q<=6;q+=2) // { for(k=0;k<boardnum;k++) { for(p=0;p<4;p++) { input595(tab[48+p+4*k]); input595(tab[32+p+4*k]); input595(tab[16+p+4*k]); input595(tab[p+4*k]); } switch(k) { case 0: a=0;b=0; break; //选中每四行的其中一行 case 1 :a=1;b=0; break; //选中每四行的另外一行,以下2者均是如此。 case 2 :a=0;b=1; break; //果然找到原因了,就是由于延时没有弄好,才导致的问题。 case 3: a=1;b=1; break; //以上是由于测试找到的问题,遇到问题还是自己多测试。 } out595(); //0,0是第一行,1,0是第二行,0,1是第三行,1,1是第四行 } //一次循环后,把16个595都装满了。然后接下来释放了。然后又在下一次循环过程中重新给595装上新的值。 //但是就是还没有明白怎么装的过程。 //595中叫做锁存信号,而P10中的H信号叫做控制电路的控制信号。控制信号控制好了。led亮灭与否则取决于595了。 // } } } //SI4953ADY这个芯片的引脚输出怎么看? //另外扫描方式具体怎么扫描,那个大循环不会看? //a,b具体有什么用,没有理清楚?