?? 單片機(jī)點(diǎn)陣led中文顯示.c
字號(hào):
/*單片機(jī)16*16點(diǎn)陣LED中文顯示這是一個(gè)占用系統(tǒng)資源非常少的程序,沒(méi)有使用任何“顯存”形式RAM占用。
使用更好的算法實(shí)時(shí)獲取顯示數(shù)據(jù)。這個(gè)程序還有一個(gè)修改版本,可以實(shí)現(xiàn)文字從平屏幕右側(cè)進(jìn)入,流動(dòng)顯示,從左側(cè)消失。
但是兩個(gè)程序最多只能顯示253個(gè)文字的字符串,并可以調(diào)節(jié)流動(dòng)速度。
希望各位高手指點(diǎn)。*/
/*下面是資源占用情況:
TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 000DH UNIT _DATA_GROUP_
IDATA 0015H 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
CODE 0003H 0115H UNIT ?PR?_DISNFONT?LED謃文流__
CODE 0118H 00A0H UNIT ?CO?LED謃文流__
CODE 01B8H 004EH UNIT ?PR?_DISONEFONT?LED謃文流__
CODE 0206H 0046H UNIT ?C?LIB_CODE
CODE 024CH 001BH UNIT ?PR?MAIN?LED謃文流__
CODE 0267H 000EH UNIT ?PR?_DELAY_50US?LED謃文流__
CODE 0275H 000CH UNIT ?C_C51STARTUP
下面是源代碼:
*/
//--------------------------------
//
// 文件名: LED中文流動(dòng)1.c
// 作者: 張子墨
// 版本: 0.9
//最后更新: 2006/12/01
//測(cè)試硬件: at89s51 + 16*16點(diǎn)陣LED
//--------------------------------
//--------------------------------
//
// 16*16點(diǎn)陣LED顯示中文程序
// 本程序逐個(gè)顯示中文,從右至左流動(dòng)顯示
// 使用橫向,流動(dòng)只有字節(jié)間操作
// 字模數(shù)據(jù):文字下側(cè)存儲(chǔ)為數(shù)組中奇數(shù)
// 文字上側(cè)存儲(chǔ)為數(shù)組中偶數(shù)
//
//--------------------------------
#include <at89s53.h>
#define SEL P3 //行選線,P3 低四位
#define UP8 P0 //點(diǎn)陣文字上8行IO
#define DOWN8 P2 //點(diǎn)陣文字下8行IO
unsigned char code FontData [5][32] = {
/*-- 文字: 張 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
{0x01,0x02,0x03,0xF2,0x41,0x12,0x81,0x12,0x7F,0x1E,0x00,0x00,0x00,0x80,0x40,0x80,
0xFF,0xFF,0x40,0xA0,0x23,0x90,0x0C,0x88,0x10,0x86,0x60,0x84,0x20,0x80,0x00,0x00},
/*-- 文字: 子 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
{0x01,0x00,0x01,0x00,0x01,0x02,0x01,0x02,0x01,0x02,0x41,0x02,0x81,0x02,0x7F,0xE2,
0x01,0x12,0x01,0x0A,0x01,0x06,0x01,0x02,0x01,0x00,0x01,0x80,0x01,0x00,0x00,0x00},
/*-- 文字: 墨 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
{0x40,0x80,0x44,0x80,0x43,0xAF,0x50,0xA9,0x51,0xAB,0x56,0xAD,0x52,0xA9,0x78,0xFF,
0x51,0xA9,0x56,0xAD,0x52,0xAB,0x50,0xA9,0x51,0xAF,0x46,0xA0,0x42,0x80,0x00,0x00},
/*-- 文字: 制 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
{0x00,0x00,0x00,0x50,0x3F,0x4F,0x01,0x4A,0x01,0x48,0xFF,0xFF,0x21,0x48,0x61,0x48,
0x3F,0x48,0x00,0x00,0x0F,0xFC,0x40,0x00,0x80,0x00,0x7F,0xFF,0x00,0x00,0x00,0x00},
/*-- 文字: 作 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
{0x00,0x80,0x00,0x40,0x00,0x20,0xFF,0xF8,0x00,0x07,0x00,0x22,0x00,0x18,0x00,0x0C,
0xFF,0xFB,0x04,0x48,0x04,0x48,0x04,0x48,0x04,0x68,0x06,0x48,0x04,0x08,0x00,0x00}
};
void Delay_50us(unsigned char t) //50us延時(shí)程序
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void DisNFont (unsigned char *FontBufferStart,unsigned char N,unsigned char Time) //流動(dòng)顯示N個(gè)漢字
{ //參數(shù)三個(gè):字符串字模首地址、字?jǐn)?shù)、顯示流動(dòng)速度
unsigned char FontNum,i,j,row; //循環(huán)變量,字?jǐn)?shù)計(jì)數(shù)、16次流動(dòng)、16列掃描
for(FontNum=0;FontNum<N-1;FontNum++)
{
for(i=0;i<16;i++) //字到字流動(dòng) 16次左移才能完成
{
for(j=0;j<Time;j++) //顯示延遲,決定流動(dòng)速度
{
for(row=0;row<16;row++) //顯示16*16屏幕一次
{
SEL = row; //選通顯示列
UP8 = *(FontBufferStart+FontNum*32+(i+row)*2+1); //獲取顯示數(shù)據(jù) 循環(huán)顯示關(guān)鍵算法
DOWN8 = *(FontBufferStart+FontNum*32+(i+row)*2); //以移動(dòng)偏移為基礎(chǔ)獲取新數(shù)據(jù)
Delay_50us (15); //適當(dāng)延時(shí)
UP8 = 0x00; //關(guān)閉顯示
DOWN8 = 0x00; //關(guān)閉顯示 防止花屏
}
}
}
}
}
void main (void)
{
while(1)
{
DisNFont (FontData[0],5,20);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -