做过杜洋MINI1608的请进,点扫描问题讨论。
这是原版的电路图。个人认为有点出入,进行了修改,见下图。
修改后的原理图。
另附上LED的直观图。
现在的问题是在上图情况下,以共阳方式进行扫描,也就是先选中第一行,然后数据以阴码输出,再选中第二行,输出第二行的数据。。。。。。
但问题是选中第一行后还没进行数据输出,第一行的灯全亮了?。。。。初始化里5个口有全设定为高电平啊。 选中行之前 先初始化列输出 都关闭即可。 是必须这样做的。 他的东西你不可能一次做成功的~~~~~~~~~~~~~~ 本帖最后由 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个之多。 gracialee 发表于 2014-12-22 15:18
成功是成功了,只是看上面的程序显得有点累赘,相信肯定有精简的算法来代替。比如:
void displayHH1 (u ...
我的意思是说
他的东西必须是做2次以上才会成功
很少几乎没有一次会做成功的
懂我的意思了吧? 他的东西里面有意或者无意的加BUG,原因你懂得。这个论坛里好多人领教过的 wajlh 发表于 2014-12-22 16:34
他的东西里面有意或者无意的加BUG,原因你懂得。这个论坛里好多人领教过的 ...
哦,明白了,请问做过了的人,或者刷过他的程序的人,他那里的汉字用的何种字体?有点像正楷的那种?但在我这里显示的楷体有点单薄,没他那个好看。
页:
[1]