仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (121.49 KB, 下載次數: 46)
下載附件
2022-4-6 22:19 上傳
單片機源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit E1=P1^7;
- sbit DS=P2^0;
- sbit SRCK=P2^1;
- sbit RCK=P2^2;
- sbit s1=P1^0;
- sbit s2=P1^1;
- uchar speed=20;
- uchar flag=0;
- uchar code bless[][32]={
- /*-- 文字: 四 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- //{0x02,0x00,0x02,0x00,0x12,0x08,0x0A,0x18,0x03,0x60,0x4E,0x40,0x22,0x7E,0x03,0x50,
- //0x16,0x50,0x1A,0x50,0x22,0x90,0x27,0x10,0x42,0x10,0x00,0x10,0x00,0x10,0x00,0x00},
- { 0x00,0x00,0x00,0x00,0x1F,0xFC,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,
- 0x11,0x54,0x13,0x64,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00},
- /*-- 文字: 川 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- //{0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x38,0x03,0xC0,0x40,0x40,0x20,0x40,0x08,0x40,
- //0x08,0x40,0x10,0x40,0x20,0x7E,0x6F,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
-
- {0x00,0x00,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,
- 0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x10,0x08,0x20,0x08,0x00,0x00},
- /*-- 文字: 工 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
- 0x01,0x00,0x01,0x00,0x01,0xFC,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- /*-- 文字: 業 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x00,0x00,0x80,0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x88,0x24,0x98,0x14,0xA0,
- 0x14,0xC0,0x04,0x80,0x04,0x80,0x07,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- /*-- 文字: 大 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF0,0x3E,0x00,0x02,0x00,
- 0x05,0x00,0x04,0x80,0x08,0x40,0x10,0x20,0x20,0x18,0x40,0x0E,0x00,0x00,0x00,0x00},
- /*-- 文字: 學 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x20,0x12,0x20,0x09,0x20,0x00,0x40,0x23,0xFC,0x3C,0x08,0x63,0xC0,0x44,0x80,
- 0x01,0x00,0x01,0xF8,0x7E,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,0x00,0x00},
- /*-- 文字: 歡 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x19,0x78,0x69,0x90,0x0A,0x20,0x48,0x80,
- 0x28,0x80,0x10,0x80,0x29,0x40,0x41,0x20,0x82,0x18,0x04,0x0E,0x00,0x00,0x00,0x00},
- /*-- 文字: 迎 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x00,0x00,0x80,0x21,0x80,0x16,0x38,0x04,0x48,0x04,0x48,0xF4,0x48,0x15,0x58,
- 0x26,0x40,0x10,0x40,0x10,0x40,0xFF,0x00,0x00,0xFE,0x00,0x18,0x00,0x00,0x00,0x00},
- /*-- 文字: 您 --*/
- /*-- 楷體_GB231212; 此字體下對應的點陣為:寬x高=16x16 --*/
- {0x00,0x80,0x08,0x80,0x09,0x38,0x11,0xC8,0x32,0x50,0x54,0x40,0x12,0x50,0x12,0x48,
- 0x10,0xC0,0x00,0x08,0x09,0x04,0x28,0xA0,0x64,0x10,0x03,0xF8,0x00,0x00,0x00,0x00},
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
- };
- void delay()
- {
- uint i;
- for(i=0;i<150;i++);
- }
- void delay1(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_byte(uchar a)
- {
- uchar i,num;
- num=~a;
- for(i=0;i<8;i++)
- {
- RCK=0;
- SRCK=0;
- if((num&0x01)==0) DS=0;
- else DS=1;
- SRCK=1;
- RCK=1;
- num>>=1;
- }
- }
- void write_null()
- { uchar i;
- for(i=0;i<7;i++)
- {
- RCK=0;
- SRCK=0;
- DS=1;
- SRCK=1;
- RCK=1;
-
- }
- }
- void main()
- {
- uchar i,j,k,scan;
- TMOD=0x01;//定時器T0設為方式1
- TH0=(65536-50000)/256;//給T0裝入初值 50ms中斷1次
- TL0=(65536-50000)%256;
- EA=1;//開總中斷
- ET0=1;//允許T0中斷
- TR0=1;//啟動定時器
- DS=1;
- E1=0;
- while(1)
- {
-
-
- scan=0;
- for(k=0;k<2*speed;k++)
- {
- for(i=0;i<31;i=i+2)
- {
-
- write_null();
- P3=scan;
- E1=0;
- delay();
-
- E1=1;
- scan++;
- }
- }
- for(j=0;j<6;j=j+1)
- {
-
- for(k=0;k<speed/2;k++)
- {
- scan=0;
- for(i=0;i<31;i=i+2)
- {
- if(flag==1)
- {
- write_byte(bless[j+3][i+1]);
- write_byte(bless[j+3][i]);
- write_byte(bless[j+2][i+1]);
- write_byte(bless[j+2][i]);
- write_byte(bless[j+1][i+1]);
- write_byte(bless[j+1][i]);
- write_byte(bless[j][i+1]);
- write_byte(bless[j][i]);
- }
- if(flag==0)
- {
- write_byte(bless[j][i+1]);
- write_byte(bless[j][i]);
- write_byte(bless[j+1][i+1]);
- write_byte(bless[j+1][i]);
- write_byte(bless[j+2][i+1]);
- write_byte(bless[j+2][i]);
- write_byte(bless[j+3][i+1]);
- write_byte(bless[j+3][i]);
- }
-
- P3=scan;
- E1=0;
- delay();
-
- E1=1;
- if(i%2==0)
- scan++;
-
- }
- }
- for(k=0;k<speed/2;k++)
- {
- scan=0;
- {
- if(flag==1)
- {
- for(i=1;i<31;i=i+2)
- {
- write_byte(bless[j+4][i+1]);
- write_byte(bless[j+3][i]);
- write_byte(bless[j+3][i+1]);
- write_byte(bless[j+2][i]);
- write_byte(bless[j+2][i+1]);
- write_byte(bless[j+1][i]);
- write_byte(bless[j+1][i+1]);
- write_byte(bless[j][i]);
- P3=scan;
- E1=0;
- delay();
- E1=1;
- if(i%2==1)
- scan++;
- }
- }
- if(flag==0)
- {
- for(i=0;i<31;i=i+2)
- {
- write_byte(bless[j][i]);
- write_byte(bless[j+1][i+1]);
- write_byte(bless[j+1][i]);
- write_byte(bless[j+2][i+1]);
- write_byte(bless[j+2][i]);
- write_byte(bless[j+3][i+1]);
- write_byte(bless[j+3][i]);
- write_byte(bless[j+4][i+1]);
- P3=scan;
- E1=0;
- delay();
- E1=1;
- if(i%2==0)
- scan++;
-
- }
- }
- }
- }
- }
- }
- }
- void T0_interserve(void) interrupt 1 using 1//定時器T0中斷函數方式1
- {
-
- TH0=(65536-50000)/256;//重新賦值
- TL0=(65536-50000)%256;
- if(s1==0)
- {
- delay1(5);
- {
- if(s1==0)
- flag=0;
- }
- while(!s1);
- }
- if(s2==0)
- {
- delay1(5);
- {
- if(s2==0)
- flag=1;
- }
- while(!s2);
- }
- }
復制代碼
Keil代碼與Proteus仿真51hei下載::
點陣滾動顯示.7z
(81.69 KB, 下載次數: 80)
2022-4-6 22:20 上傳
點擊文件名下載附件
16816點陣滾動顯示 下載積分: 黑幣 -5
|