如题,我是用proteus 8x8点阵屏搭建16x32的点阵屏
使用P2口+译码器做行选(点阵屏下面8个引脚 低电平有效)
使用4个移位寄存器级联做列选(点阵屏上面8个引脚 高电平有效)
取模按照列行方式取模
单片机源程序如下:
- uint8_t up_data[] = {
- };
- uint8_t down_data[] = {
- };
- void write_line(uint8_t c4,uint8_t c3,uint8_t c2,uint8_t c1)
- {
- int i;
- ST_CP = 0;
- for(i=0;i<32;i++)
- {
- SH_CP = 0;
- if(i<8) DS = c4 & (0x80 >> i);
- else if(i>=8&&i<16) DS = c3 & (0x80 >> (i-8));
- else if(i>=16&&i<24) DS = c2 & (0x80 >> (i-16));
- else if(i>=24&&i<32) DS = c1 & (0x80 >> (i-24));
- SH_CP = 1;
- }
- ST_CP = 1;
- }
- int main()
- {
- int i,j,a;
- E1 = 0;
- while(1)
- {
- for(i=0;i<16;i++)
- {
- P2 = i;
- if(i<8)
- write_line(up_data[16+2*i+1],up_data[16+2*i],up_data[2*i+1],up_data[2*i]);
- else
- write_line(down_data[16+2*(i-8)+1],down_data[16+2*(i-8)],down_data[2*(i-8)+1],down_data[2*(i-8)]);
- write_line(0,0,0,0);
- }
- }
- }
复制代码
其中up_data的前16个数据为数字‘1’的上半部分 后16个数据为数字‘2’的上半部分
down_data为对应的下半部分
最后的效果是点阵屏闪烁,并不能保持常亮
请大佬帮忙看看如何解决!
|