本帖最后由 示范法 于 2021-4-12 22:16 编辑
bqgup 发表于 2021-4-12 21:21 一个开发板的点阵电路原理图: 附加两个驱动程序 楼主参考一下
你好,我看了你发的文件。我大致了解了。程序代码是大致流程相同,但我花了一下午的时间,我好像发现了一个实质的问题,我发现我的po口一直输出的是00000000,也就是1-9脚一直输出的是0,我的程序我看了也没啥问题,我再发一遍。
我的点阵烧录程序后,是第一 二 四 排亮 其他不亮,然后我用万用表测量第三排的负责的引脚,发现是正常的,那说明是程序有问题。然后我把一二 四排量的程序写下来,发现是1-8 都是00000000 而 9-16是00101001 就是0x29 就说明让全部灯亮的代码一个已经是可以输入的。那就是stc po口负责的0xd3没有烧录,为什么呢。
如果不是程序问题的话那就是断路么。那就是pcb设置问题,但我觉得线都连上了,而且用万用表测量也没有断路的问题。
#include<reg51.h>
#include<intrins.h>
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char code TAB[8] = {0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3};
unsigned char code CHARCODE[8][8]=
{
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
};
void ys()
{
unsigned char q,w,e,r;
for(q=5;q>0;q--)
for(w=4;w>0;w--)
for(e=116;e>0;e--)
for(r=214;r>0;r--);
}
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<121;j++);
}
void Hc595SendByte(unsigned char dat)
{
unsigned char a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void xs(unsigned int o)
{
unsigned char tab, j;
unsigned int i;
unsigned int p=1;
unsigned int k;
for(k=0;k<o;k++) //改变值可以改变不显示的时间
{
ys();
}
while(p)
{
for(i= 0; i<50; i++ )
{
for(tab=0;tab<8;tab++)
{
Hc595SendByte(0x29);
P0= TAB[tab];
Hc595SendByte(CHARCODE[j][tab]);
delay(2);
}
}
j++;
if(j == 8)
{
j = 0;
}
p++;
if(p == 20) //修改值 可以改变显示时长
{
p = 0;
}
}
}
void main()
{
while(1)
{
xs(2);
}
}
这个我是直接套以前成功的程序,里面的0xd3 0x29 就是灯全亮的代码。原来是滚动的。