gracialee 发表于 2014-12-22 09:32:11

做过杜洋MINI1608的请进,点扫描问题讨论。



这是原版的电路图。个人认为有点出入,进行了修改,见下图。


修改后的原理图。


另附上LED的直观图。

现在的问题是在上图情况下,以共阳方式进行扫描,也就是先选中第一行,然后数据以阴码输出,再选中第二行,输出第二行的数据。。。。。。

但问题是选中第一行后还没进行数据输出,第一行的灯全亮了?。。。。初始化里5个口有全设定为高电平啊。

kebaojun305 发表于 2014-12-22 09:44:45

选中行之前 先初始化列输出 都关闭即可。 是必须这样做的。

lxa0 发表于 2014-12-22 13:18:34

他的东西你不可能一次做成功的~~~~~~~~~~~~~~

gracialee 发表于 2014-12-22 15:18:42

本帖最后由 gracialee 于 2014-12-22 15:19 编辑

lxa0 发表于 2014-12-22 13:18
他的东西你不可能一次做成功的~~~~~~~~~~~~~~

成功是成功了,只是看上面的程序显得有点累赘,相信肯定有精简的算法来代替。比如:

void displayHH1 (unsigned char d){ //第1列横向显示程序
        unsigned char i;
        i = d & 0x01;
        if(i == 0x01){
                DY_LED1_H1 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x02;
        if(i == 0x02){
                DY_LED1_H2 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x04;
        if(i == 0x04){
                DY_LED1_H3 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x08;
        if(i == 0x08){
                DY_LED1_H4 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x10;
        if(i == 0x10){
                DY_LED1_H5 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x20;
        if(i == 0x20){
                DY_LED1_H6 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x40;
        if(i == 0x40){
                DY_LED1_H7 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
        i = d & 0x80;
        if(i == 0x80){
                DY_LED1_H8 = 1;DY_LED1_L1 = 0;delay(DY_PWM);dis_off();}
}
这类的子程序就达16个之多。

lxa0 发表于 2014-12-22 16:29:49

gracialee 发表于 2014-12-22 15:18
成功是成功了,只是看上面的程序显得有点累赘,相信肯定有精简的算法来代替。比如:

void displayHH1 (u ...

我的意思是说
他的东西必须是做2次以上才会成功
很少几乎没有一次会做成功的
懂我的意思了吧?

wajlh 发表于 2014-12-22 16:34:49

他的东西里面有意或者无意的加BUG,原因你懂得。这个论坛里好多人领教过的

gracialee 发表于 2014-12-23 15:24:28

wajlh 发表于 2014-12-22 16:34
他的东西里面有意或者无意的加BUG,原因你懂得。这个论坛里好多人领教过的 ...

哦,明白了,请问做过了的人,或者刷过他的程序的人,他那里的汉字用的何种字体?有点像正楷的那种?但在我这里显示的楷体有点单薄,没他那个好看。
页: [1]
查看完整版本: 做过杜洋MINI1608的请进,点扫描问题讨论。