帶RGB(紅綠藍)的16X16點陣仿真圖如下:
0.png (33.1 KB, 下載次數: 37)
下載附件
2017-8-27 17:51 上傳
0.png (50.58 KB, 下載次數: 41)
下載附件
2017-8-27 17:51 上傳
16X16RGB點陣的單片機源程序如下:
- /*--------------------------------------
- 多個16*16LED顯示演示程序
- MCU AT89C52 XAL 24MHz
- --------------------------------------*/
- //以下程序能實現多個16*16LED屏的多個字符顯示,顯示方式有整行上移、簾入簾出、左移、右移//
- #include "reg52.h"
- #define BLKN 6 //列鎖存器數(=LED顯示字數*2)
- #define TOTAL 102 //待顯示字個數,本例共20個
- #define TOTAL0 99
- #define TOTAL1 96
- #define TOTAL2 33
- #define TOTAL3 128
- #define TOTAL4 15
- #define TOTAL5 84
- #define TOTAL6 54
- #define CONIO P1 //顯示控制口
- sbit G=CONIO^7; //CONIO.7為154譯碼器顯示允許控制信號端口,0時輸出,1時輸出全為高阻態.
- sbit CLK=CONIO^6; //CONIO.6為595輸出鎖存器時鐘信號端,1時輸出數據,從1到0時鎖存輸出數據.
- sbit SCLR=CONIO^5; //CONIO.5為595移位寄存器清零口,平時為1,為0時,輸出全為0.
- unsigned char idata dispram[(BLKN/2)*32]={0}; //顯示區緩存,四字共4*32單元
- //
- //**************45度No.1字模表******************//
- unsigned char code Bmp[][32]={
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x66,0x64,0x99,0x99,0x66,0x66,0x99,0x99}//16第四水流
- };
- //**************笑臉字模表******************//
- unsigned char code Bmp3[][32]={
- {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0xFE,0x00,0xFE,0xC0,0xFC,0xF0,0xFC,0xFC,0xF8,0xFE,0xF8,0xFF,0xF0,0xFF,0xE0,0xFF},//5紅綠藍
- };
- //**************風扇4字模表******************//
- unsigned char code Bmp8[][32]={
- {0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x83,0xC1,0xC1,0x83,0xE1,0x87,0xF1,0x0F,0xFC,0x7F,
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0xFE,0x00,0xFE,0xC0,0xFC,0xF0,0xFC,0xFC,0xF8,0xFE,0xF8,0xFF,0xF0,0xFF,0xE0,0xFF},//5一到七
- };
- //**************向上流動字體字模表******************//
- unsigned char code Bmp9[][32]={
- {0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFA,0x01,0x7A,0xFB,0xB5,0xB7,0xD7,0xBF,0xEF,0xBF,
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF}//:)28
- };
- //**************內簾出心型圖字模表******************//
- unsigned char code Bmp10[][32]={
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0xF0,0x0F,0xF8,0x1F,0xFC,0x3F,0xFE,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//紅
- 0xFF,0xFF,0xC7,0xE3,0x81,0x81,0x0C,0x30,0x1E,0x78,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,
- 0x8F,0xF1,0xC7,0xE3,0xE3,0xC7,0xF1,0x8F,0xF8,0x1F,0xFC,0x3F,0xFE,0x7F,0xFF,0xFF,//綠藍
- 0xFF,0xFF,0xC7,0xE3,0x81,0x81,0x0C,0x30,0x1E,0x78,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,
- 0x8F,0xF1,0xC7,0xE3,0xE3,0xC7,0xF1,0x8F,0xF8,0x1F,0xFC,0x3F,0xFE,0x7F,0xFF,0xFF,//綠藍
- };
- //
- /***********延時函數(約1毫秒)************/
- void delay(unsigned int dt)
- {
- register unsigned char bt;
- for (; dt; dt--)
- for (bt=0; bt<255; bt++);
- }
- //
- /*****************主函數 *********************/
- void main(void)
- {
- register unsigned char i,j,k,l,q,w,a;
- //初始化
- SCON = 0x00; //串口工作模式0:移位寄存器方式
- TMOD = 0x01; //定時器T0工作方式1:16位方式
- TR0 = 1; //啟動定時器T0
- CONIO = 0x3f; //CONIO端口初值
- IE = 0x82; //允許定時器T0中斷
- //
- while (1)
- {
- //初始化黑屏
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
- }
- delay(1000);
- //45度顯示No.1
- for (w=0;w<TOTAL*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp[q+w*BLKN/2][i];}
- }
- delay(150);
- }
- //45度顯示No.1
- for (w=0;w<TOTAL0*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp0[q+w*BLKN/2][i];}
- }
- delay(150);
- }
- delay(1000);
- //顯示海豚1
- for (w=0;w<TOTAL1*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp1[q+w*BLKN/2][i];}
- }
- delay(150);
- }
- //顯示海豚2
- for (w=0;w<TOTAL1*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp2[q+w*BLKN/2][i];}
- }
- delay(150);
- }
- delay(1000);
- //顯示笑臉
- for (a=0;a<3;a++)
- {
- for (w=0;w<TOTAL2*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp3[q+w*BLKN/2][i];}
- }
- delay(250);
- }
- }
- delay(1000);
- //外簾入圖案
- for (w=0;w<TOTAL3*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp4[q+w*BLKN/2][i];}
- }
- delay(200);
- }
- delay(1000);
- //顯示內簾出圖案
- for (w=0;w<TOTAL6*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp10[q+w*BLKN/2][i];}
- }
- delay(150);
- }
- delay(1000);
- //顯示風扇1
- for (a=0;a<3;a++)
- {
- for (w=0;w<TOTAL4*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp5[q+w*BLKN/2][i];}
- }
- delay(120);
- }
- }
- //顯示風扇2
- for (a=0;a<3;a++)
- {
- for (w=0;w<TOTAL4*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp6[q+w*BLKN/2][i];}
- }
- delay(120);
- }
- }
- //顯示風扇3
- for (a=0;a<3;a++)
- {
- for (w=0;w<TOTAL4*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp7[q+w*BLKN/2][i];}
- }
- delay(120);
- }
- }
- //顯示風扇4
- for (a=0;a<3;a++)
- {
- for (w=0;w<TOTAL4*2/BLKN;w++)
- {
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp8[q+w*BLKN/2][i];}
- }
- delay(120);
- }
- }
- //初始化黑屏
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
- }
- //向上移動漢字
- for (i=0; i<TOTAL5*2/BLKN; i++)
- {
- for (j=0; j<16; j++)
- {
- for (k=0; k<15; k++)
- {
- for(q=0;q<BLKN/2;q++)
- {dispram[k*2+q*32] = dispram[(k+1)*2+q*32];dispram[k*2+1+q*32] = dispram[(k+1)*2+1+q*32];}
- }
- for(q=0;q<BLKN/2;q++)
- {dispram[30+q*32] = Bmp9[q+i*BLKN/2][j*2];dispram[31+q*32] = Bmp9[q+i*BLKN/2][j*2+1];}
- delay(80);
- }
- }
- delay(1000);
- //卷簾出黑屏
- for (i=0;i<32;i++)
- {
- for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
- if (i%2) delay(100);
- }
- delay(1000);
- }
- }
- //主函數結束
- //
- /**********顯示屏掃描(定時器T0中斷)函數**********/
- void leddisplay(void) interrupt 1 using 1
- {
- register unsigned char m, n=BLKN;
- TH0 = 0xFc; //設定顯示屏刷新率每秒62.5幀(16毫秒每幀)
- TL0 = 0x18;
- m = CONIO; //讀取當前顯示的行號
- m = ++m & 0x0f; //行號加1,屏蔽高4位
- do {
- n--;
- SBUF = dispram[m*2+(n/2)*30 + n]; //送顯示數據
- while (!TI); TI = 0;
- }while (n); //完成一行數據的發送
- G = 1; //消隱(關閉顯示)
- CONIO &= 0xf0; //行號端口清○
- CLK=1; //顯示數據打入輸出鎖存器
- CONIO |= m; //寫入行號
- CLK=0; //鎖存顯示數據
- G = 0; //打開顯示
- }
- //
復制代碼
所有資料51hei提供下載:
16X16RGB 仿真和程序.rar
(149.31 KB, 下載次數: 90)
2017-8-27 16:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|