|
如題,我是用proteus 8x8點(diǎn)陣屏搭建16x32的點(diǎn)陣屏
使用P2口+譯碼器做行選(點(diǎn)陣屏下面8個(gè)引腳 低電平有效)
使用4個(gè)移位寄存器級(jí)聯(lián)做列選(點(diǎn)陣屏上面8個(gè)引腳 高電平有效)
取模按照列行方式取模
單片機(jī)源程序如下:
- 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);
- }
- }
- }
復(fù)制代碼
其中up_data的前16個(gè)數(shù)據(jù)為數(shù)字‘1’的上半部分 后16個(gè)數(shù)據(jù)為數(shù)字‘2’的上半部分
down_data為對(duì)應(yīng)的下半部分
最后的效果是點(diǎn)陣屏閃爍,并不能保持常亮
請(qǐng)大佬幫忙看看如何解決!
|
|