16X16點陣仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
QQ截圖20170621172546.png (16.58 KB, 下載次數: 48)
下載附件
2017-6-21 17:26 上傳
2.png (17.34 KB, 下載次數: 55)
下載附件
2017-6-21 17:28 上傳
0.png (56.8 KB, 下載次數: 54)
下載附件
2017-6-21 17:32 上傳
單片機源程序如下:
- #include <REG51.h>
- //#include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code bseg[16]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};//列驅動選碼(低位)
- /*uchar SEGx[32]={0x08,0x24,0x88,0x33,0x78,0x2C,0x0F,0x23,
- 0xC8,0x28,0x08,0x70,0x20,0x00,0xF8,0xFF,
- 0x4F,0x22,0x48,0x22,0x49,0x22,0xFE,0x3F,
- 0x48,0x22,0x48,0x22,0x08,0x20,0x00,0x00};/*"雄",0*/
- #if 0
- uchar SEGx[32]={0x00,0x00,0xFC,0x07,0x44,0x04,0x44,0x04,
- 0x44,0x04,0xFC,0x07,0x10,0x00,0x90,0x00,
- 0x10,0x03,0x10,0x40,0x10,0x80,0xFF,0x7F,
- 0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00};/*"時",0*/
- #endif
- uchar code SEG1[32]={0x00,0x01,0x80,0x40,0x60,0x40,0x1E,0x41,0x10,0x41,0x10,0x41,0x10,0x41,0x10,0x41,
- 0xFF,0x7F,0x12,0x41,0x10,0x41,0x10,0x41,0x98,0x41,0x10,0x61,0x00,0x40,0x00,0x00};//"生",0
- uchar code SEG2[32]={0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,
- 0x42,0x10,0x42,0x10,0x42,0x10,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//"日",1
- uchar code SEG3[32]={0x70,0x00,0x00,0x00,0xFF,0xFF,0x08,0x00,0xB0,0x80,0x88,0x40,0x88,0x30,0x88,0x0E,
- 0xFF,0x01,0x88,0x06,0x88,0x08,0x88,0x30,0xF8,0x60,0x80,0xC0,0x80,0x40,0x00,0x00};//"快",2
- uchar code SEG4[32]={0x00,0x00,0x00,0x20,0x40,0x18,0xFC,0x0C,0x44,0x07,0x44,0x12,0x44,0x20,0x46,0x40,
- 0xFA,0x3F,0x42,0x00,0x43,0x00,0x43,0x02,0x42,0x0C,0x40,0x38,0x00,0x10,0x00,0x00};//"樂",3
- //uint SEGx2[16]={0x0001};
- sbit LEDshclk=P2^0;
- sbit LEDdata=P2^1;
- sbit LEDstclk=P2^2;
- void delay(void)
- {
- unsigned int i,j;
- for(i=0;i<1;i++)
- {
- for(j=0;j<5;j++)
- {;}
- }
- }
- void delay200ms()//誤差0.000000 us
- {
- unsigned char i=0,j=0,k=0;
- for(i=5;i>0;i--)
- for(j=132;j>0;j--)
- for(k=150;k>0;k--);
- }
- void delay1ms(uchar t)//誤差0.000000 us
- {
- unsigned char i=0,j=0,m=0;
- for(m=t;m>0;m--)
- for(i=5;i>0;i--)
- for(j=98;j>0;j--);
- }
- void delay1s()//誤差1.000000 us
- {
- unsigned char i=0,j=0,k=0;
- for(i=23;i>0;i--)
- for(j=185;j>0;j--)
- for(k=116;k>0;k--);
- }
- void hc164send(uchar c)
- { uchar temp;
- for(temp=0;temp<8;temp++)
- {
- if(c &0x80)
- LEDdata = 1;
- else LEDdata = 0;
- LEDshclk=0;
- delay();
- LEDshclk=1;
- delay();
- c<<=1;
- }
- }
- void hc595out(void )
- {LEDstclk=0;
- delay();
- LEDstclk=1;
- delay();
- }
- void disp_one_port(uchar x,uchar y,uchar value/*1:亮*/)
- {
- if(value==1)
- {
- if(x<8)
- {
- hc164send(0x00);
- hc164send(1<<x);
- }
- else
- {
- hc164send(1<<(x%8));
- hc164send(0x00);
- }
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- P1=bseg[y];//選擇列
- hc595out();
- delay();
- }
- void disp_section_port(uchar x,uchar y,uchar type)
- {
- uchar i=0,j=0;
- uint temp1=0,temp2=0;
- if((type==0)||(type==2)||(type==3))
- {
- for(j=0;j<=x;j++)
- {
-
- temp1|=(1<<j);
- if(j!=x)
- temp2|=(1<<j);
- }
- }
- else if(type==1)
- {
- temp1=0xffff;
- temp2=0xffff;
- for(j=0;j<=x;j++)
- {
- temp1&=(~(1<<j));
- if(j!=x)
- temp2&=(~(1<<j));
- }
- if((x==0)&&(y==0))
- {
- temp1=0xffff;
- temp2=0xffff;
- }
- }
-
- for(i=0;i<16;i++)
- {
- if(i<=y)
- {
- if(type==2)
- {
- if(i%2==0)
- {
- hc164send((temp1>>8)&0xff);
- hc164send(temp1&0xff);
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- }
- else if(type==3)
- {
- if(i%2==1)
- {
- hc164send((temp1>>8)&0xff);
- hc164send(temp1&0xff);
- }
- else
- {
- hc164send(0xff);
- hc164send(0xff);
- }
- }
- else
- {
- hc164send((temp1>>8)&0xff);
- hc164send(temp1&0xff);
- }
- }
- else
- {
- if(type==2)
- {
- if(i%2==0)
- {
- hc164send((temp2>>8)&0xff);
- hc164send(temp2&0xff);
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- }
- else if(type==3)
- {
- if(i%2==1)
- {
- hc164send((temp2>>8)&0xff);
- hc164send(temp2&0xff);
- }
- else
- {
- hc164send(0xff);
- hc164send(0xff);
- }
- }
- else
- {
- hc164send((temp2>>8)&0xff);
- hc164send(temp2&0xff);
- }
- }
-
- P1=bseg[i];//選擇列
- hc595out();
- delay();
- }
- }
- void disp_all_port(uchar y,uchar value/*1:亮*/,uchar type)
- {
- if(type==0)
- {
- if(value==1)
- {
- hc164send(0xff);
- hc164send(0xff);
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- }
- else if(type==1)
- {
- if(y%2==0)
- {
- hc164send(0xff);
- hc164send(0xff);
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- }
- else if(type==2)
- {
- if(y%2==1)
- {
- hc164send(0xff);
- hc164send(0xff);
- }
- else
- {
- hc164send(0x00);
- hc164send(0x00);
- }
- }
- P1=bseg[y];//選擇列
- hc595out();
- delay();
- }
- void part1()//一個燈一個的亮
- {
- uchar x=0,y=0,m=0;
- for(x=0;x<16;x++)
- {
- for(y=0;y<16;y++)
- {
- for(m=0;m<100;m++)
- disp_one_port(x,y,1);
- }
- }
- }
- void part2()//全部亮滅
- {
- uchar i=0,y=0;
- int time=0;
- for(i=0;i<3;i++)//亮滅三次
- {
- for(time=0;time<20;time++)
- {
- for(y=0;y<16;y++)
- {
- disp_all_port(y,1,0);
- }
- }
- for(time=0;time<20;time++)
- {
- for(y=0;y<16;y++)
- {
- disp_all_port(y,0,0);
- }
- }
- }
- }
- void part3()//燈亮了不滅
- {
- uchar x=0,y=0;
- int m=0;
- for(x=0;x<16;x++)
- {
- for(y=0;y<16;y++)
- {
- for(m=0;m<5;m++)
- disp_section_port(x,y,0);
- }
- }
- }
- void part4()//燈亮了不滅
- {
- int x=0,y=0;
- int m=0;
- for(x=15;x>=0;x--)
- {
- for(y=15;y>=0;y--)
- {
- for(m=0;m<5;m++)
- disp_section_port(x,y,1);
- }
- }
- }
- void part5()//燈亮了不滅
- {
- uchar x=0,y=0;
- int m=0;
- for(x=0;x<16;x++)
- {
- for(y=0;y<16;y++)
- {
- for(m=0;m<3;m++)
- disp_section_port(x,y,2);
- }
- }
- for(x=0;x<16;x++)
- {
- for(y=0;y<16;y++)
- {
- for(m=0;m<3;m++)
- disp_section_port(x,y,3);
- }
- }
- }
- void part6()//燈亮了不滅
- {
- uchar i=0,y=0;
- int time=0;
- for(i=0;i<3;i++)//亮滅三次
- {
- for(time=0;time<20;time++)
- {
- for(y=0;y<16;y++)
- {
- disp_all_port(y,1,1);
- }
- }
- for(time=0;time<20;time++)
- {
- for(y=0;y<16;y++)
- {
- disp_all_port(y,0,2);
- }
- }
- }
- }
- void part7()
- {
- int n=0,m=0;
- for(m=0;m<20;m++)
- {
- for(n=0;n<16;n++)
- {
- P1=bseg[n];
- hc164send(SEG1[2*n+1]);
- hc164send(SEG1[2*n]);
- hc595out();
- delay(); //delay(); delay(); // delay(); delay();
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
595LED.rar
(76.37 KB, 下載次數: 46)
2017-6-21 17:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|