?? led_sm.c
字號:
/*--------------------------------------
多個16*16LED顯示演示程序
MCU AT89C52 XAL 24MHz
2005年5月18日
--------------------------------------*/
//以下程序能實現多個16*16LED屏的多個字符顯示,顯示方式有整行上移、簾入簾出、左移、右移//
#include "reg52.h"
#define BLKN 8 //列鎖存器數(=LED顯示字數*2)
#define TOTAL 20 //待顯示字個數,本例共20個
#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單元
//
//**************字模表******************//
unsigned char code Bmp[][32]={
{
0xEF,0xFF,0xEF,0x03,0x81,0xBB,0xDD,0xBB,0xDD,0xD7,0xEB,0xEF,0xF3,0xD7,0xCD,0xB9,
0x3E,0xFF,0xC0,0x07,0xFE,0xF7,0xFD,0xF7,0xFD,0xF7,0xFB,0xF7,0xF7,0xD7,0xEF,0xEF},/*-- 文字: 努 --*/
{
0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFE,0xFB,0xFE,0xFB,0xFE,0xFB,
0xFE,0xFB,0xFD,0xFB,0xFD,0xFB,0xFB,0xFB,0xFB,0xFB,0xF7,0xFB,0xEF,0xD7,0xDF,0xEF},/*-- 文字: 力 --*/
{
0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,
0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*-- 文字: 學 --*/
{
0xFF,0xFF,0xC0,0x03,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFC,0xFB,0xFE,0xEB,0xFF,0x9B,
0xFE,0x7B,0xF9,0xFB,0xC7,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0xDB,0xFF,0xEA,0xFF,0xF6},/*-- 文字: 習 --*/
//
{
0xEF,0xDF,0xEF,0xDF,0xDF,0xDF,0xC1,0xDF,0xBF,0xC1,0x83,0xDF,0x6F,0xDF,0xEF,0xDF,
0x02,0x03,0xEE,0xFB,0xEE,0xFB,0xEE,0xFB,0xEA,0xFB,0xE6,0x03,0xEE,0xFB,0xFF,0xFF},/*-- 文字: 鉆 --*/
{
0xFF,0xFF,0x02,0x01,0xEF,0x77,0xEF,0x77,0xDF,0x77,0xDF,0x77,0x84,0x01,0x97,0x77,
0x57,0x77,0xD7,0x77,0xD7,0x77,0xD6,0xF7,0xC6,0xF7,0xDD,0xF7,0xFB,0xF7,0xF7,0xF7},/*-- 文字: 研 --*/
{
0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0x02,0x01,0xEF,0xDF,0xEB,0xDF,0xE6,0x03,0xCE,0xF7,
0x2F,0x77,0xEF,0x6F,0xEF,0x9F,0xEF,0x9F,0xEF,0x6F,0xEE,0xF1,0xA9,0xFB,0xDF,0xFF},/*-- 文字: 技 --*/
{
0xFE,0xFF,0xFE,0xDF,0xFE,0xEF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFC,0x7F,0xFA,0xBF,
0xFA,0xDF,0xF6,0xEF,0xEE,0xE7,0xDE,0xF1,0x3E,0xFB,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF},/*-- 文字: 術 --*/
//
{
0xC3,0x03,0xDB,0x7B,0xDB,0x7B,0xDB,0x6B,0xC3,0x77,0xDB,0x7F,0xDB,0x03,0xC3,0x3B,
0xDB,0x3B,0xDB,0x57,0xDB,0x57,0xDB,0x6F,0xBB,0x57,0xAB,0x31,0x77,0x7B,0xFF,0xFF},/*-- 文字: 服 --*/
{
0xFB,0xFF,0xF8,0x0F,0xF3,0xEF,0xEB,0xDF,0x9D,0xBF,0x7E,0x7F,0xF9,0x9F,0xE6,0xE1,
0x9E,0xFB,0xE0,0x0F,0xFD,0xEF,0xFD,0xEF,0xFB,0xEF,0xF7,0xEF,0xCF,0xAF,0x3F,0xDF},/*-- 文字: 務 --*/
{
0xDF,0xBF,0xEF,0xBF,0xEF,0xBF,0x03,0xBF,0xFB,0xBF,0xF7,0xBF,0xF4,0x03,0xEF,0xBF,
0xC7,0xBF,0x2B,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x01,0xEF,0xFF},/*-- 文字: 社 --*/
{
0xFE,0xFF,0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xEF,0xE7,0x90,0x11,0x7F,0xFB,
0xFF,0xFF,0xC0,0x07,0xFD,0xFF,0xFB,0xDF,0xF7,0xEF,0xEE,0x06,0xC0,0xE6,0xEF,0xEE},/*-- 文字: 會 --*/
//
{
0xDF,0xFF,0xEE,0x07,0xEE,0xF7,0x02,0xF7,0xFA,0xF7,0xF6,0xF7,0xEE,0xF7,0xC6,0x07,
0xAB,0x6F,0x6B,0x6F,0xEF,0x6F,0xEF,0x6F,0xEE,0xED,0xEE,0xED,0xED,0xED,0xEB,0xF1},/*-- 文字: 祝 --*/
{
0xFF,0xFF,0x80,0x03,0xBF,0xFB,0xBF,0xFB,0xA0,0x0B,0xBF,0xFB,0xBF,0xFB,0xB0,0x1B,
0xB7,0xDB,0xB7,0xDB,0xB7,0xDB,0xB0,0x1B,0xB7,0xDB,0xBF,0xFB,0xBF,0xEB,0xBF,0xF7},/*-- 文字: 同 --*/
{
0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,
0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*-- 文字: 學 --*/
{
0xF5,0xFF,0xF6,0xFF,0xEE,0x43,0xEE,0xFB,0xCB,0xFB,0xDB,0xFB,0x9B,0xFB,0x5B,0xFB,
0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xFB,0xDB,0xEB,0xDB,0xF7,0xFF,0xFF},/*-- 文字: 們 --*/
//
{
0xFF,0xFF,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,0xEF,0xF7,0xEF,0xF7,0xE0,0x07,
0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF},/*-- 文字: 早 --*/
{
0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,
0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF},/*-- 文字: 日 --*/
{
0xFF,0x5F,0xFF,0x6F,0xFF,0x7F,0xC0,0x01,0xDF,0x7F,0xDF,0x7F,0xC1,0x77,0xDD,0x73,
0xDD,0xB7,0xDD,0xAF,0xDD,0xDF,0xD5,0x9F,0xBB,0x6D,0xBE,0xF5,0x79,0xF9,0xFF,0xFD},/*-- 文字: 成 --*/
{
0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xC0,0x06,0xFF,0x7E,0xFE,0x7E,0xFE,0x7E,
0xFD,0x7E,0xFB,0x7E,0xF7,0x7E,0xEF,0x7E,0x9F,0x7F,0xFF,0x7F,0xFD,0x7E,0xFE,0x7E}/*-- 文字: 才 --*/
};
//**************字模表******************//
unsigned char code Bmp1[][32]={
{
0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7,
0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD
}/*我*/,
{
0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03,
0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB
}/*愛*/,
{
0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,
0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF
}/*單*/,
{
0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF,
0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF
}/*片*/,
{
0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77,
0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF
}/*機*/,
{
0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD,
0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,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;
//初始化
SCON = 0x00; //串口工作模式0:移位寄存器方式
TMOD = 0x01; //定時器T0工作方式1:16位方式
TR0 = 1; //啟動定時器T0
CONIO = 0x3f; //CONIO端口初值
IE = 0x82; //允許定時器T0中斷
//
while (1)
{
delay(2000); //2秒
//第一種顯示效果:卷簾出顯示笑臉圖案
for (i=0;i<32;i++)
{
for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp1[5][i];}
if (i%2) delay(120);
}
delay(1000);
//卷簾出顯示文字,每次字數為BLKN/2,共顯示TOTAL*2/BLKN次
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];}
if (i%2) delay(120);
}
delay(3000);
}
//第一種顯示效果:卷簾出顯示笑臉圖案
for (i=0;i<32;i++)
{
for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp1[5][i];}
if (i%2) delay(120);
}
delay(1000);
//第二種顯示效果:向上滾屏,每次BLKN/2個字
for (i=0; i<TOTAL*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] = Bmp[q+i*BLKN/2][j*2];dispram[31+q*32] = Bmp[q+i*BLKN/2][j*2+1];}
delay(100);
}
delay(3000);//滾動暫停
}
//第一種顯示效果:卷簾出黑屏
for (i=0;i<32;i++)
{
for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
if (i%2) delay(120);
}
delay(1000);
//第三種顯示效果:左移出顯示
for (i=0; i<TOTAL; i++)
{
for (j=0; j<2; j++)
for (k=0; k<8; k++)
{
for (l=0; l<16; l++)
{
for(q=0;q<BLKN/2;q++)
{
dispram[l*2+q*32] = dispram[l*2+q*32]<<1 | dispram[l*2+1+q*32]>>7;
if(q==BLKN/2-1) dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | Bmp[i][l*2+j]>>(7-k);
else dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | dispram[l*2+(q+1)*32]>>7;
}
}
delay(100);
}
}
delay(3000);
//第一種顯示效果:卷簾出黑屏
for (i=0;i<32;i++)
{
for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=0xff;}
if (i%2) delay(120);
}
delay(1000);
//第三種顯示效果:右移出顯示
for (i=0; i<TOTAL; i++)
{
for (j=2; j>0; j--)
for (k=0; k<8; k++)
{
for (l=0; l<16; l++)
{
for(q=0;q<BLKN/2;q++)
{
dispram[l*2+1+q*32] = dispram[l*2+1+q*32]>>1 | dispram[l*2+q*32]<<7;
if(q==0) dispram[l*2+q*32] = dispram[l*2+q*32]>>1 | Bmp[i][l*2+j-1]<<(7-k);
else dispram[l*2+q*32] = dispram[l*2+q*32]>>1 | dispram[l*2+1+(q-1)*32]<<7;
}
}
delay(100);
}
}
delay(3000);
//第四種顯示效果:卷簾入
for (i=0;i<32;i++)
{
for(q=0;q<BLKN/2;q++)
{dispram[i+q*32]= 0x00;}
if (i%2) delay(100);
}
}
}
//主函數結束
//
/**********顯示屏掃描(定時器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; //打開顯示
}
//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -