下面是原理圖(下載附件可看清晰大圖):
51單片機16*32點陣上下移動Proteus仿真和源代碼下載:
16 32點陣上下移動程序.rar
(23.66 KB, 下載次數: 54)
2016-1-14 00:13 上傳
點擊文件名下載附件
程序預覽:
- //16*32點陣上下移動程序
- #includereg52.h
- #define uchar unsigned char
- #define uint unsigned int
- #define hang P3 行掃描接在P3口
- sbit ds=P2^0; 595數據口
- sbit clk=P2^1; 595位移時鐘SH_CP
- sbit stcp=P2^2; 595寄存器時鐘ST_CP
- sbit g2=P2^3; 595使能端
- sbit mr=P1^6; 595復位端
- sbit g1=P1^7; 154使能端
- uint counter,m,n;
- uchar flag;
- uchar code hangsz[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
- 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};行掃描數組
- uchar code display[][32]={
- -- 文字 萊 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x08,0x20,0x08,0x24,0xFF,0xFE,0x09,0x20,0x01,0x08,0x7F,0xFC,0x01,0x00,0x09,0x20,
- 0x05,0x44,0xFF,0xFE,0x03,0x80,0x05,0x40,0x09,0x30,0x31,0x0E,0xC1,0x04,0x01,0x00,
- -- 文字 茵 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x04,0x40,0x04,0x44,0xFF,0xFE,0x04,0x40,0x3F,0xF8,0x21,0x08,0x21,0x08,0x2F,0xE8,
- 0x21,0x08,0x22,0x88,0x22,0x88,0x24,0x48,0x28,0x28,0x20,0x08,0x3F,0xF8,0x20,0x08,
- -- 文字 布 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x02,0x00,0x02,0x00,0x02,0x08,0xFF,0xFC,0x04,0x00,0x09,0x00,0x11,0x08,0x3F,0xFC,
- 0x51,0x08,0x91,0x08,0x11,0x08,0x11,0x08,0x11,0x28,0x11,0x10,0x01,0x00,0x01,0x00,
- -- 文字 藝 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x04,0x40,0x04,0x44,0xFF,0xFE,0x04,0x40,0x00,0x00,0x3F,0xC0,0x00,0x80,0x01,0x00,
- 0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0x1F,0xFE,
- -- 文字 店 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x01,0x00,0x00,0x84,0x3F,0xFE,0x20,0x80,0x20,0x88,0x20,0xFC,0x20,0x80,0x20,0x88,
- 0x2F,0xFC,0x28,0x08,0x28,0x08,0x28,0x08,0x48,0x08,0x48,0x08,0x8F,0xF8,0x08,0x08,
- -- 文字歡 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,
- 0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04,
- -- 文字 迎 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x00,0x00,0x41,0x84,0x26,0x7E,0x14,0x44,0x04,0x44,0x04,0x44,0xF4,0x44,0x14,0xC4,
- 0x15,0x44,0x16,0x54,0x14,0x48,0x10,0x40,0x10,0x40,0x28,0x46,0x47,0xFC,0x00,0x00,
- -- 文字 您 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x09,0x00,0x09,0x00,0x13,0xFC,0x12,0x04,0x34,0x48,0x59,0x40,0x91,0x50,0x12,0x4C,
- 0x14,0x44,0x11,0x40,0x10,0x80,0x02,0x00,0x51,0x84,0x50,0x92,0x90,0x12,0x0F,0xF0,
- -- 文字 光 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x01,0x00,0x21,0x08,0x11,0x0C,0x09,0x10,0x09,0x20,0x01,0x04,0xFF,0xFE,0x04,0x40,
- 0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x40,0x08,0x42,0x10,0x42,0x20,0x3E,0x40,0x00,
- -- 文字 臨 --
- -- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --
- 0x10,0x80,0x10,0x80,0x51,0x04,0x51,0xFE,0x52,0x00,0x54,0x80,0x58,0x60,0x50,0x24,
- 0x57,0xFE,0x54,0x44,0x54,0x44,0x54,0x44,0x54,0x44,0x14,0x44,0x17,0xFC,0x14,0x04,
- 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,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_ms(uchar tt)
- {
- for(m=0;mtt;m++)
- for(n=0;n50;n++);
- }
- void write_595(uchar shuju) 向595寫一個字節的數據
- {
- uchar i;
- for(i=0;i8;i++)
- {
- ds=(~shuju)&0x01;
- clk=1;
- clk=0;
- shuju=shuju1;
- }
- }
- void main() 主函數
- {
- uchar i,j,k,x;
- mr=1;
- g2=0;
- TMOD=0x01; 定時器0工作方式0
- g1=0; 154使能
- EA=1; 開總中斷
- ET0=1; 定時器0使能
- TH0=(65535-50000)256; 定時器0設置初值
- TL0=(65536-50000)%256;
- while(1)
- {
- for(x=0;x12;x=x+4)
- {
- for(i=0;i16;i++) 字從下往上滾動出現
- {
- k=1;
- for(j=i+1;j0;j--)
- {
- write_595(display[x+3][k]);
- write_595(display[x+3][k-1]);
- write_595(display[x+2][k]);
- write_595(display[x+2][k-1]);
- write_595(display[x+1][k]);
- write_595(display[x+1][k-1]);
- write_595(display[x][k]);
- write_595(display[x][k-1]);
- write_595(display[5][k]);
- write_595(display[5][k-1]);
- k+=2;
- hang=hangsz[16-j];
- stcp=1;stcp=0;
- }
- delay_ms(80);
- }
- TR0=1;flag=1;
- while(flag) 停留一秒
- {
- uchar j;
- for(j=0;j16;j++)
- {
- write_595(display[x+3][j2+1]);
- write_595(display[x+3][j2]);
- write_595(display[x+2][j2+1]);
- write_595(display[x+2][j2]);
- write_595(display[x+1][j2+1]);
- write_595(display[x+1][j2]);
- write_595(display[x][j2+1]);
- write_595(display[x][j2]);
- write_595(display[5][j2+1]);
- write_595(display[5][j2]);
- hang=hangsz[j];
- stcp=1;stcp=0;
- }
- }
- TR0=0;
- for(i=16;i0;i--) 字滾動出顯示區
- {
- k=31;
- for(j=i-1;j0;j--)
- {
- write_595(display[x+3][k]);
- write_595(display[x+3][k-1]);
- write_595(display[x+2][k]);
- write_595(display[x+2][k-1]);
- write_595(display[x+1][k]);
- write_595(display[x+1][k-1]);
- write_595(display[x][k]);
- write_595(display[x][k-1]);
- write_595(display[5][k]);
- write_595(display[5][k-1]);
- k-=2;
- hang=hangsz[j];
- stcp=1;stcp=0;
- }
- delay_ms(80);
- }
- }
- }
- }
- void timer0() interrupt 1 中斷函數
- {
- counter++;
- if(counter==10) 1秒設置
- {
- counter=0;
- flag=0;
- }
- TH0=(65535-50000)256;
- TL0=(65536-50000)%256;
- }
復制代碼
|