这个你可以试着先用一个16*16的点阵试验一下,缩小你要检查的范围,之前做过一个,现在忘得差不多了,我把源码发出来,你参考下 #include<reg51.h> #include<intrins.h> sbit DS=P1^0; sbit ST_CP=P1^1; sbit SH_CP=P1^2; sbit A=P1^3; sbit E=P1^4; sbit C=P1^5; sbit D=P1^6; int u,n; unsigned char display_1[]={ 0xbf,0x7f,0xb7,0x9f,0xb7,0xe0,0xb7,0xdf, 0x00,0x80,0xb7,0xbb,0xb7,0xbb,0xff,0xff, 0x3b,0xb0,0xbb,0xaf,0xbb,0xaf,0xbb,0xaf, 0x03,0xaf,0xff,0xa3,0xff,0xbf,0xff, 0xff, }; void delay() { for(u=0;u<100;u++) for(n=0;n<1;n++); } void hc595_senddat(unsigned char dat) { unsigned char k; for(k=0;k<8;k++) { DS=dat&0x80; SH_CP=0; SH_CP=1; dat<<=1; } } main() { unsigned char i; SH_CP=0; ST_CP=0; while(1) { for(i=0;i<16;i++) { { hc595_senddat(display_1[2*i+1]); hc595_senddat(display_1[2*i]); } switch(i) { case 0:A=0;E=0;C=0;D=0; break; //负0000 case 1:A=1;E=0;C=0;D=0; break; //1000 case 2:A=0;E=1;C=0;D=0; break; //0100 case 3:A=1;E=1;C=0;D=0; break; //1100 case 4:A=0;E=0;C=1;D=0; break; //0010 case 5:A=1;E=0;C=1;D=0; break; //1010 case 6:A=0;E=1;C=1;D=0; break; //0110 case 7:A=1;E=1;C=1;D=0; break; //1110 case 8:A=0;E=0;C=0;D=1; break; //0001 case 9:A=1;E=0;C=0;D=1; break; //1001 case 10:A=0;E=1;C=0;D=1; break; //0101 case 11:A=1;E=1;C=0;D=1; break; //1101 case 12:A=0;E=0;C=1;D=1; break; //0011 case 13:A=1;E=0;C=1;D=1; break; //1011 case 14:A=0;E=1;C=1;D=1; break; //0111 case 15:A=1;E=1;C=1;D=1; break; //1111 } ST_CP=1; ST_CP=0; delay(); } } } |
LED16x16点阵 89单片机+四个74HC595的 程序源码原理图 http://www.51hei.com/bbs/dpj-200961-1.html |