標(biāo)題:
48×16點(diǎn)陣LED電子顯示屏的設(shè)計(jì) 程序+電路圖+pcb文件
[打印本頁(yè)]
作者:
dzdiy
時(shí)間:
2015-4-11 21:50
標(biāo)題:
48×16點(diǎn)陣LED電子顯示屏的設(shè)計(jì) 程序+電路圖+pcb文件
LED點(diǎn)陣顯示屏作為一種新興的顯示器件,是由多個(gè)獨(dú)立的LED發(fā)光二極管封裝而成。這個(gè)48×16點(diǎn)陣LED電子顯示屏的設(shè)計(jì),是多網(wǎng)上看到到,感覺(jué)比較適合初學(xué)者制作,特此進(jìn)行轉(zhuǎn)載,在這里要感謝原作者顏志偉的無(wú)私奉獻(xiàn)。LED點(diǎn)陣顯示屏可以顯示數(shù)字或符號(hào), 通常用來(lái)顯示時(shí)間、速度、系統(tǒng)狀態(tài)等。本設(shè)計(jì)是48×16點(diǎn)陣LED電子顯示屏的設(shè)計(jì)。整機(jī)以美國(guó)STC公司生產(chǎn)的40腳單片機(jī)STC89C52為核心,介紹了以它為控制系統(tǒng)的LED點(diǎn)陣電子顯示屏的動(dòng)態(tài)設(shè)計(jì)和開(kāi)發(fā)過(guò)程。通過(guò)該芯片控制八個(gè)行驅(qū)動(dòng)器74HC164和八個(gè)列驅(qū)動(dòng)器74HC595來(lái)驅(qū)動(dòng)顯示屏顯示。該電子顯示屏可以顯示各種文字或單色圖像,全屏能顯示4個(gè)漢字,采用16塊8 x 8點(diǎn)陣LED顯示模塊來(lái)組成4個(gè)16x16點(diǎn)陣顯示模式。顯示采用動(dòng)態(tài)顯示,使得圖形或文字能夠?qū)崿F(xiàn)靜止、移入移出等多種顯示方式。文中詳細(xì)介紹了LED點(diǎn)陣顯示的硬件設(shè)計(jì)思路、硬件電路各個(gè)部分的功能及原理、相應(yīng)軟件的程序設(shè)計(jì),以及使用說(shuō)明等。這里就不一一介紹,文章后面的資料都有介紹,需要的可以自己下載。
電路圖pcb及其源程序打包下載:
4個(gè)16乘16LED點(diǎn)陣資料.rar
(2.38 MB, 下載次數(shù): 1322)
2015-4-11 21:49 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
源代碼如下:
/*64*16點(diǎn)陣屏的顯示點(diǎn)陣屏的顯示*/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define ulong unsigned long
#define uchar unsigned char
#define uint unsigned int
#define DATAOUT P2 //指定P2口做為輸出
sfr ISP_CONTR = 0xe7;
sbit DATA=DATAOUT^0; //列數(shù)據(jù)輸出位
sbit SCLH=DATAOUT^1; //列掃描時(shí)鐘位
sbit SCLT=DATAOUT^2; //列數(shù)據(jù)鎖存位
sbit AB=DATAOUT^4; //行數(shù)據(jù)輸出位
sbit SCK=DATAOUT^5; //行掃描時(shí)鐘位
sbit key1 = P3^2; //鍵盤位定義
sbit key2 = P0^1;
sbit key3 = P0^2;
sbit key4 = P3^3;
unsigned int idata numyear;
unsigned char idata numt0,num,numf,nums,numday,nummonth; //全局變量定義numt0 為定時(shí)器0計(jì)數(shù),num 為時(shí)間秒計(jì)數(shù),numf 分鐘計(jì)數(shù),nums 小時(shí)計(jì)數(shù)
unsigned char idata lhj[128]; //128字節(jié)RAM做為64*16點(diǎn)陣屏顯示緩存
void display(); //做為點(diǎn)陣掃描函數(shù),將顯示緩存的數(shù)據(jù)輸出到點(diǎn)陣屏
void display2();
void displayS(unsigned int timer);//指定時(shí)間掃描顯示
void displayS2(unsigned int );
void displaymove(unsigned char *lp,unsigned char c,unsigned char timer); //顯示漢字內(nèi)容的移動(dòng)效果,LP指向要顯示第一個(gè)字的首地址,C表示顯示字的個(gè)數(shù),
void displaymove2(unsigned char *,unsigned char ,unsigned char ); //timer是移動(dòng)的速度
void displaymovetb(unsigned char din,unsigned char *lp,unsigned char c,unsigned char timer);
void displaymovetb2(unsigned char ,unsigned char *,unsigned char ,unsigned char);
void init(); //初始化函數(shù)
void displayshijian(); //時(shí)間顯示函數(shù) //上下移動(dòng)內(nèi)容,din:1為向下,0為向上,
void displayshijian2(); //lp指向要移入的內(nèi)容表示有幾個(gè)漢字要移,timer為移動(dòng)速度
//void delay(unsigned int z);//延時(shí)子函數(shù)
/****************** 字模 *************************/
code unsigned char WU[32]={
0x11,0x00,0x11,0x00,0x51,0x00,0x51,0x04,
0x7B,0xFE,0x54,0xA4,0x90,0xA4,0x1C,0xA4,
0x31,0x24,0xD1,0x44,0x12,0x44,0x12,0x44,
0x14,0x84,0x10,0x84,0x11,0x28,0x10,0x10};//物
code unsigned char DIAN[32]={
0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,
0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,
0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00};//電
code unsigned char XUE[32]={
0x22,0x08,0x11,0x08,0x11,0x10,0x00,0x20,
0x7F,0xFE,0x40,0x02,0x80,0x04,0x1F,0xE0,
0x00,0x40,0x01,0x84,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}; //學(xué)
code unsigned char YUAN[32]={
0x00,0x80,0x78,0x40,0x4F,0xFE,0x54,0x02,
0x58,0x14,0x63,0xF8,0x50,0x00,0x48,0x08,
0x4F,0xFC,0x48,0xA0,0x68,0xA0,0x50,0xA0,
0x41,0x22,0x41,0x22,0x42,0x1E,0x4C,0x00}; //院
code unsigned char LING[32]={
0x1F,0xF0,0x01,0x00,0x7F,0xFE,0x41,0x02,
0x9D,0x74,0x01,0x00,0x1D,0x70,0x02,0x80,
0x0C,0x60,0x32,0x18,0xC1,0x06,0x0F,0xE0,
0x00,0x40,0x02,0x80,0x01,0x00,0x00,0x80}; //零
code unsigned char JIU[32]={
0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x20,
0xFF,0xF0,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x20,
0x10,0x22,0x10,0x22,0x20,0x1E,0xC0,0x00}; //九
code unsigned char DIAN1[32]={
0x02,0x00,0x02,0x00,0x02,0x10,0x7F,0xF8,
0x42,0x10,0x42,0x10,0x7F,0xF0,0x42,0x10,
0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,
0x02,0x04,0x02,0x04,0x01,0xFC,0x00,0x00}; //電
code unsigned char ZI[32]={
0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,
0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}; //子
code unsigned char XIN[32]={
0x10,0x08,0x0A,0x1C,0x7F,0x60,0x00,0x40,
0x22,0x40,0x14,0x44,0xFF,0xFE,0x0A,0x48,
0x7F,0x48,0x08,0x48,0x0A,0x48,0x29,0x88,
0x48,0x88,0x89,0x08,0x28,0x08,0x10,0x08}; //新
code unsigned char NIAN[32]={
0x08,0x00,0x08,0x08,0x1F,0xFC,0x11,0x00,
0x21,0x00,0x41,0x10,0x1F,0xF8,0x11,0x00,
0x11,0x00,0x11,0x04,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00}; //年
code unsigned char KUAI[32]={
0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x88,
0x5B,0xFC,0x54,0x88,0x50,0x88,0x90,0x88,
0x10,0x88,0x1F,0xFE,0x10,0x80,0x11,0x40,
0x11,0x20,0x12,0x10,0x14,0x0E,0x18,0x04}; //快
code unsigned char LE[32]={
0x00,0x20,0x00,0xF0,0x1F,0x00,0x10,0x00,
0x11,0x00,0x11,0x00,0x21,0x04,0x7F,0xFE,
0x01,0x00,0x01,0x00,0x09,0x20,0x09,0x10,
0x11,0x08,0x21,0x0C,0x45,0x04,0x02,0x00}; //樂(lè)
code unsigned char BEI[32] ={
0x04,0x80,0x04,0x80,0x04,0x88,0x04,0x98,
0x04,0xA0,0x7C,0xC0,0x04,0x80,0x04,0x80,
0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x80,
0x1C,0x82,0xE4,0x82,0x44,0x7E,0x00,0x00}; //北
code unsigned char JING[32] = {
0x02,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,
0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x01,0x00,0x09,0x40,
0x09,0x30,0x11,0x18,0x25,0x08,0x02,0x00}; //京
code unsigned char SHI[32] = {
0x00,0x08,0x04,0x08,0x7E,0x08,0x44,0x08,
0x47,0xFE,0x44,0x08,0x44,0x08,0x7C,0x88,
0x44,0x48,0x44,0x48,0x44,0x08,0x44,0x08,
0x7C,0x08,0x44,0x48,0x00,0x28,0x00,0x10}; //時(shí)
code unsigned char JIAN[32] = {
0x20,0x04,0x1B,0xFE,0x08,0x04,0x40,0x24,
0x4F,0xF4,0x48,0x24,0x48,0x24,0x48,0x24,
0x4F,0xE4,0x48,0x24,0x48,0x24,0x48,0x24,
0x4F,0xE4,0x48,0x24,0x40,0x14,0x40,0x08}; //間
code unsigned char XL[32]={
0x07,0xc0,0x18,0x30,0x20,0x08,0x40,0x04,
0x4C,0x64,0x8C,0x62,0x80,0x02,0x80,0x02,
0x90,0x12,0x98,0x32,0x4C,0x64,0x47,0xC4,
0x20,0x08,0x18,0x30,0x07,0xC0,0x00,0x00}; //笑臉
code unsigned char ANZHUO[32]={
0x08,0x20,0x03,0x80,0x07,0xc0,0x0d,0x60,
0x0f,0xe0,0x00,0x00,0x6f,0xec,0x6f,0xec,
0x6f,0xec,0x6f,0xec,0x6f,0xec,0x0f,0xe0,
0x06,0xc0,0x06,0xc0,0x06,0xc0,0x00,0x00}; //安卓
code unsigned char HOU[32]={
0x02,0x00,0x02,0x00,0x02,0x08,0x03,0xFC,
0x02,0x00,0x02,0x10,0x3F,0xF8,0x20,0x10,
0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,
0x29,0x10,0x24,0xC8,0x44,0x44,0x80,0x04}; //“點(diǎn)”
code unsigned char MIN[32]={
0x00,0x80,0x04,0x80,0x04,0x40,0x08,0x40,
0x08,0x20,0x10,0x10,0x20,0x08,0x4F,0xEE,
0x84,0x24,0x04,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0x08,0x20,0x11,0x40,0x20,0x80}; //“分”
code unsigned char NIAN2[32]={
0x08,0x00,0x08,0x08,0x1F,0xFC,0x11,0x00,
0x21,0x00,0x41,0x10,0x1F,0xF8,0x11,0x00,
0x11,0x00,0x11,0x04,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
}; //年
code unsigned char YUE[32]={
0x00,0x10,0x0F,0xF8,0x08,0x10,0x08,0x10,
0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x10,
0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x10,
0x10,0x10,0x10,0x10,0x20,0x50,0x40,0x20,
}; //月
code unsigned char RI2[32]={
0x00,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00
}; //日
//時(shí)數(shù)據(jù)
code unsigned char c[3][16]={
///*-- 文字: 0 --*//*-- 楷體_GB231212; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,},
{///*-- 文字: 1 --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,},
{///*-- 文字: 2 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,}
};
code unsigned char d[10][16]={
{///*-- 文字: 0 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
},
{///*-- 文字: 1 --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
},
{///*-- 文字: 2 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
},
{///*-- 文字: 3 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
},
{///*-- 文字: 4 --*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,
},
{///*-- 文字: 5 --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
},
{///*-- 文字: 6 --*/
0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
},
{///*-- 文字: 7 --*/
0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
},
{///*-- 文字: 8 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
},
{///*-- 文字: 9 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,}
};
//分?jǐn)?shù)據(jù)
code unsigned char b[10][16]={
{///*-- 文字: 0 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
},
{///*-- 文字: 1 --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
},
{///*-- 文字: 2 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
},
{///*-- 文字: 3 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
},
{///*-- 文字: 4 --*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,
},
{///*-- 文字: 5 --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
},
{///*-- 文字: 6 --*/
0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
},
{///*-- 文字: 7 --*/
0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
},
{///*-- 文字: 8 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
},
{///*-- 文字: 9 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,
}
};
code unsigned char a[6][16]={
{///*-- 文字: 0 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
},
{///*-- 文字: 1 --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
},
{///*-- 文字: 2 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
},
{///*-- 文字: 3 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
},
{///*-- 文字: 4 --*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,
},
{///*-- 文字: 5 --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
}
};
/*code unsigned char GGJJ[4][32]={ //"關(guān)關(guān)雎鳩"
{0x10,0x10,0x08,0x18,0x04,0x20,0x04,0x48,
0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x04,
0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,
0x04,0x40,0x08,0x30,0x30,0x0E,0xC0,0x04,},
{0x10,0x10,0x08,0x18,0x04,0x20,0x04,0x48,
0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x04,
0xFF,0xFE,0x01,0x00,0x02,0x80,0x02,0x80,
0x04,0x40,0x08,0x30,0x30,0x0E,0xC0,0x04,},
{0x00,0xC0,0x08,0xA0,0x7D,0x24,0x49,0xFE,
0x4B,0x20,0x7D,0x28,0x49,0xFC,0x49,0x20,
0x79,0x28,0x49,0xFC,0x49,0x20,0x4D,0x20,
0xF1,0x24,0x41,0xFE,0x01,0x00,0x01,0x00,},
{0x20,0x20,0x20,0x48,0x21,0xFC,0x29,0x08,
0xFD,0x48,0x29,0x08,0x29,0x28,0x29,0x10,
0x29,0x04,0x29,0xFE,0x28,0x04,0x2A,0x24,
0x4D,0xF4,0x48,0x04,0x80,0x14,0x00,0x08}
};
code unsigned char ZHZZ[4][32]={ //"在河之洲"
{0x02,0x00,0x02,0x00,0x02,0x04,0xFF,0xFE,
0x04,0x00,0x04,0x40,0x08,0x40,0x08,0x50,
0x13,0xF8,0x30,0x40,0x50,0x40,0x90,0x40,
0x10,0x40,0x10,0x44,0x17,0xFE,0x10,0x00,},
{ 0x40,0x04,0x3F,0xFE,0x10,0x08,0x00,0x08,
0x80,0x48,0x67,0xE8,0x24,0x48,0x0C,0x48,
0x14,0x48,0x24,0x48,0xE7,0xC8,0x24,0x48,
0x20,0x08,0x20,0x08,0x20,0x28,0x20,0x10,},
{ 0x02,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,
0x00,0x80,0x01,0x00,0x02,0x00,0x0C,0x00,
0x30,0x00,0x48,0x06,0x07,0xFC,0x00,0x00,},
{0x01,0x04,0x41,0x04,0x31,0x24,0x11,0x24,
0x81,0x24,0x65,0xB4,0x23,0x6C,0x0B,0x6C,
0x11,0x24,0x21,0x24,0xE1,0x24,0x21,0x24,
0x22,0x24,0x22,0x24,0x24,0x04,0x20,0x04}
};
code unsigned char YTSN[4][32]={ //"窈窕淑女"
{0x02,0x00,0x41,0x00,0x7F,0xFE,0x48,0x22,
0x90,0x14,0x04,0x40,0x08,0x48,0x11,0xFC,
0x7E,0x48,0x04,0x48,0x08,0x48,0x14,0x48,
0x22,0x88,0x7E,0x88,0x01,0x28,0x02,0x10,
},
{0x02,0x00,0x41,0x00,0x7F,0xFE,0x48,0x22,
0x92,0x94,0x02,0x80,0x22,0x90,0x12,0x98,
0x16,0xA0,0x0A,0xC0,0x12,0xA0,0x62,0x98,
0x04,0x8A,0x04,0x82,0x18,0x7E,0x60,0x00,},
{0x02,0x00,0x42,0x00,0x33,0x80,0x12,0x7C,
0x82,0x44,0x62,0x44,0x2F,0xC4,0x0A,0x44,
0x12,0x28,0x27,0x28,0xEA,0x90,0x32,0x10,
0x22,0x28,0x2A,0x46,0x24,0x84,0x21,0x00,},
{0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,
0x02,0x04,0xFF,0xFE,0x04,0x20,0x04,0x20,
0x08,0x20,0x10,0x20,0x0C,0x40,0x02,0x80,
0x01,0x80,0x06,0x60,0x18,0x18,0x60,0x08,
}
};
code unsigned char JZHQ[4][32]={ //“君子好逑”
{0x00,0x10,0x3F,0xF8,0x04,0x10,0x04,0x14,
0xFF,0xFE,0x04,0x10,0x04,0x10,0x3F,0xF0,
0x08,0x00,0x08,0x08,0x1F,0xFC,0x18,0x08,
0x28,0x08,0x48,0x08,0x8F,0xF8,0x08,0x08,},
{0x00,0x00,0x3F,0xF0,0x00,0x10,0x00,0x20,
0x00,0x40,0x01,0x80,0x01,0x04,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,},
{0x10,0x00,0x11,0xFC,0x10,0x04,0x10,0x08,
0xFC,0x10,0x24,0x20,0x24,0x24,0x27,0xFE,
0x24,0x20,0x44,0x20,0x28,0x20,0x10,0x20,
0x28,0x20,0x44,0x20,0x84,0xA0,0x00,0x40,},
{0x00,0x40,0x40,0x50,0x30,0x48,0x17,0xFC,
0x00,0x40,0x02,0x48,0xF1,0x50,0x10,0x40,
0x11,0x50,0x16,0x4C,0x10,0x44,0x11,0x40,
0x10,0x80,0x28,0x06,0x47,0xFC,0x00,0x00}
}; */
/*code unsigned char DH1[32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
code unsigned char DH2[32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
code unsigned char DH3[32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x80,0x03,0xC0,0xFF,0xFF,
0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
code unsigned char DH4[32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; */
void init() //初始化程序
{
TMOD = 0x01; // 定時(shí)器0為工作方式1
TH0 = (65536-50000)/256; //定時(shí)50mS
TL0 = (65536-50000)%256;
EA = 1; //開(kāi)總中斷
ET0 = 1; //開(kāi)定時(shí)器0中斷
EX0 = 1; //開(kāi)外部中斷0
EX1 = 1; //開(kāi)外部中斷1
IT0 = 0; //設(shè)置外部中斷0的中斷方式為0 低電平觸發(fā)
IT1 = 0;
TR0 = 1; //啟動(dòng)定時(shí)器0
num = 0;
nums = 12;
numf = 30;
numyear = 2013;
nummonth = 1;
numday = 15;
}
void displayshijian() //顯示時(shí)間函數(shù)
{
unsigned char i,j,p1,k1,p2,k2;
p1 = nums/10;
k1 = nums%10; //小時(shí)數(shù)據(jù)
p2 = numf/10;
k2 = numf%10; //分鐘數(shù)據(jù)
for(i=0;i<128;i++) //顯示緩存清空
{
lhj[i]=0;
}
for(i=0,j=0;i<128;)
{
lhj[i]=c[p1][j];
lhj[i+1]=d[k1][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=HOU[j];
lhj[i+1]=HOU[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;)
{
lhj[i]=a[p2][j];
lhj[i+1]=b[k2][j];
i=i+8;
j=j+1;
}
for(i=6,j=0;i<128;)
{
lhj[i]=MIN[j];
lhj[i+1]=MIN[j+1];
i=i+8;
j=j+2;
}
displayS(1);
}
void displayshijian2() //顯示時(shí)間函數(shù)
{
unsigned char i,j,p1,k1,p2,k2;
p1 = nums/10;
k1 = nums%10; //小時(shí)數(shù)據(jù)
p2 = numf/10;
k2 = numf%10; //分鐘數(shù)據(jù)
for(i=0;i<128;i++) //顯示緩存清空
{
lhj[i]=0;
}
for(i=0,j=0;i<128;)
{
lhj[i]=c[p1][j];
lhj[i+1]=d[k1][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=HOU[j];
lhj[i+1]=HOU[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;)
{
lhj[i]=a[p2][j];
lhj[i+1]=b[k2][j];
i=i+8;
j=j+1;
}
for(i=6,j=0;i<128;)
{
lhj[i]=MIN[j];
lhj[i+1]=MIN[j+1];
i=i+8;
j=j+2;
}
displayS(1);
}
void displaynyr() //年月日顯示程序
{
unsigned char i,j,n1,n2,n3,n4,p1,k1,p2,k2; //n年 p1k1月 p2k2日
n1 = numyear/1000;
n2 = (numyear%1000)/100;
n3 = (numyear%100)/10;
n4 = numyear%10;
p1 = nummonth/10;
k1 = nummonth%10; //月數(shù)據(jù)
p2 = numday/10;
k2 = numday%10; //日數(shù)據(jù)
for(i=0;i<128;i++) //顯示緩存清空
{
lhj[i]=0;
}
for(i=0,j=0;i<128;)
{
lhj[i]=d[n1][j];
lhj[i+1]=d[n2][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=d[n3][j];
lhj[i+1]=d[n4][j];
i=i+8;
j=j+1;
}
for(i=4,j=0;i<128;)
{
lhj[i]=NIAN2[j];
lhj[i+1]=NIAN2[j+1];
i=i+8;
j=j+2;
}
displayS(2);
displaymovetb(1,0,4,2);
for(i=0,j=0;i<128;)
{
lhj[i]=d[p1][j];
lhj[i+1]=d[k1][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=YUE[j];
lhj[i+1]=YUE[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;)
{
lhj[i]=d[p2][j];
lhj[i+1]=d[k2][j];
i=i+8;
j=j+1;
}
for(i=6,j=0;i<128;)
{
lhj[i]=RI2[j];
lhj[i+1]=RI2[j+1];
i=i+8;
j=j+2;
}
displayS(3);
displaymovetb(1,0,4,1);
}
void displaynyr2()
{
unsigned char i,j,p1,k1,p2,k2; //n年 p1k1月 p2k2日
/* n1 = numyear/1000;
n2 = (numyear%1000)/100;
n3 = (numyear%100)/10;
n4 = numyear%10; */
p1 = nummonth/10;
k1 = nummonth%10; //月數(shù)據(jù)
p2 = numday/10;
k2 = numday%10; //日數(shù)據(jù)
/* for(i=0;i<128;i++) //顯示緩存清空
{
lhj[i]=0;
}
for(i=0,j=0;i<128;)
{
lhj[i]=d[n1][j];
lhj[i+1]=d[n2][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=d[n3][j];
lhj[i+1]=d[n4][j];
i=i+8;
j=j+1;
}
for(i=4,j=0;i<128;)
{
lhj[i]=NIAN2[j];
lhj[i+1]=NIAN2[j+1];
i=i+8;
j=j+2;
}
displayS2(1); */
// displaymovetb2(1,0,4,1);
/* for(i=0;i<128;i++) //顯示緩存清空
{
lhj[i]=0;
} */
for(i=0,j=0;i<128;)
{
lhj[i]=d[p1][j];
lhj[i+1]=d[k1][j];
i=i+8;
j=j+1;
}
for(i=2,j=0;i<128;)
{
lhj[i]=YUE[j];
lhj[i+1]=YUE[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;)
{
lhj[i]=d[p2][j];
lhj[i+1]=d[k2][j];
i=i+8;
j=j+1;
}
for(i=6,j=0;i<128;)
{
lhj[i]=RI2[j];
lhj[i+1]=RI2[j+1];
i=i+8;
j=j+2;
}
displayS2(1);
// displaymovetb2(1,0,4,1);
}
void extern1() interrupt 2 //外部中斷1
{
displaynyr2();
if((key2 == 0)&&(key3 ==0))
ISP_CONTR = 0x20;
if(key3 == 0)
{
if(key3 == 0)
{
numday++;
if(numday > 31)
numday = 1;
}
}
if(key2 == 0)
{
if(key2 == 0)
{
nummonth++;
if(nummonth > 12)
nummonth = 1;
}
}
key4 = 1;
}
void extern0() interrupt 0 //外部中斷0
{
displayshijian2();
if(key2 == 0) //key2按鍵掃描,按下則 小時(shí)nums加1
{
if(key2 == 0)
{
nums++;
if(nums > 23)
nums =0;
}
}
if(key3 == 0) //key3按鍵掃描,按下則 分鐘numf加1
{
if(key3 == 0)
{
numf++;
if(numf > 59)
numf =0;
}
}
/* if((key2 == 0)&&(key3 ==0))
if((key2 == 0)&&(key3 ==0))
{
displaymove2(GGJJ,4,1);
displaymove2(ZHZZ,4,1);
displaymove2(YTSN,4,1);
displaymove2(JZHQ,4,1);
} */
key1 = 1; //P3.2口賦高電平 防止下次重復(fù)進(jìn)入中斷
}
void T0timer() interrupt 1 //定時(shí)器0中斷
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
numt0++;
if(numt0 >= 40) //24M hz40次為一秒
{
numt0 = 0;
num++;
if(num > 59)
{ num = 0;
numf++;
}
}
}
void displaytu_an()
{
unsigned char i,j;
for(i=2,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=XL[j];
lhj[i+1]=XL[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;) //復(fù)制安卓機(jī)器人圖案到中間
{
lhj[i]=ANZHUO[j];
lhj[i+1]=ANZHUO[j+1];
i=i+8;
j=j+2;
}
displayS(4); //顯示圖案約2秒
}
/*void displaydonghua()
{
unsigned char i,j;
for(i=2,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH1[j];
lhj[i+1]=DH1[j+1];
i=i+8;
j=j+2;
}
displayS(4);
for(i=2,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH2[j];
lhj[i+1]=DH2[j+1];
i=i+8;
j=j+2;
}
displayS(4);
for(i=0,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH4[j];
lhj[i+1]=DH4[j+1];
i=i+8;
j=j+2;
}
for(i=2,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH3[j];
lhj[i+1]=DH3[j+1];
i=i+8;
j=j+2;
}
for(i=4,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH4[j];
lhj[i+1]=DH4[j+1];
i=i+8;
j=j+2;
}
for(i=6,j=0;i<128;) //復(fù)制笑臉圖案到中間
{
lhj[i]=DH4[j];
lhj[i+1]=DH4[j+1];
i=i+8;
j=j+2;
}
displayS(5);
} */
void shijianzz()
{
/***************************************************///時(shí)間自增
if(numf > 59) //分鐘numf,小時(shí)nums自增
{
numf = 0;
nums++;
if(nums > 23)
{
nums = 0;
numday++;
switch(nummonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: if(numday > 31)
{ nummonth++;
numday=1;
if(nummonth > 12)
{
nummonth =1;
numyear++;
}
};
break;
case 4:
case 6:
case 9:
case 11:if(numday > 30)
{ nummonth++;
numday=1;
if(nummonth > 12)
{nummonth =1;
numyear++;
}
};
break;
case 2: {
if(numyear%4==0)
if(numday > 29 )
{
nummonth++;
numday=1;
if(nummonth > 12)
{nummonth = 1;
numyear++;
}
}
else
if(numday > 28 )
{
nummonth++;
numday=1;
if(nummonth > 12)
{nummonth =1;
numyear++;
}
}
};break;
}
}
}
/*********************************************************/
}
void displayXNKL()
{
/*********逐個(gè)顯示“新年快樂(lè)”************/
uchar i,j;
for(i=0,j=0;i<128;)
{
lhj[i]=XIN[j];
lhj[i+1]=XIN[j+1];
i=i+8;
j=j+2;
}
displayS(2);
for(i=2,j=0;i<128;)
{
lhj[i]=NIAN[j];
lhj[i+1]=NIAN[j+1];
i=i+8;
j=j+2;
}
displayS(2);
for(i=4,j=0;i<128;)
{
lhj[i]=KUAI[j];
lhj[i+1]=KUAI[j+1];
i=i+8;
j=j+2;
}
displayS(2);
for(i=6,j=0;i<128;)
{
lhj[i]=LE[j];
lhj[i+1]=LE[j+1];
i=i+8;
j=j+2;
}
displayS(2);
/**********************************/
}
/********************** 主函數(shù) *************************************/
void main(void)
{
init(); //初始化程序
displaytu_an();
displayS(2);
//displaydonghua();
while(1)
{
// displaytu_an(); //顯示圖案
shijianzz(); //時(shí)間自增函數(shù)
displaymovetb(1,0,4,3); //向下清屏
displaymovetb(1,WU,4,2); //向下顯示“物電學(xué)院"
displayS(1); //持續(xù)顯示2S
displaymovetb(0,0,4,2); //向上卷簾清屏
displaymove(LING,4,1); //左跑馬 “零九電子”
displayS(1);
displaymovetb(1,0,4,2); //向下卷簾清屏
displayXNKL(); //由左往右顯示‘新年快樂(lè)’
displaymove(0,4,2); //左跑馬清屏
displaymovetb(1,BEI,4,3); //向下顯示 “北京時(shí)間”
displayS(2);
displaymovetb(1,0,4,1);
displaynyr(); //顯示****年**月**日
displayshijian(); //調(diào)用顯示**點(diǎn)**分 時(shí)間函數(shù)
displayS(5);
displaymovetb(1,0,4,3); //向下清屏
}
}
/********************** 主函數(shù) *************************************/
void display2() //顯示子函數(shù) 中斷調(diào)用才使用
{
unsigned char i,ia,tmp;
unsigned int j;
DATAOUT=0XFF;
AB=0; //將行數(shù)據(jù)位清0,準(zhǔn)備移位
for(i=0;i<16;i++)
{
SCK=0;
SCLT=0;
for(ia=8;ia>0;)
{ //每行64個(gè)點(diǎn),循環(huán)位移8個(gè)字節(jié)
ia--; //循環(huán)四次
tmp=~lhj[i*8+ia];
for(j=0;j<8;j++)
{ //循環(huán)兩次,每次移一個(gè)字節(jié),
SCLH=0;
DATA=tmp&0x01; //將數(shù)據(jù)低位做輸出
tmp>>=1;
SCLH=1; //將DATA上的數(shù)據(jù)移入寄存器
} //移入單字節(jié)結(jié)束
} //移入兩個(gè)字節(jié)結(jié)束
DATAOUT|=0X24;
//等價(jià)于SCK=1;
// SCLT=1;
AB=1;
}
j=100;
while(j--); //每一行的顯示,保持6個(gè)字節(jié)的移位時(shí)間,因此,最后一行的顯示,也要加入保持時(shí)間,補(bǔ)嘗顯示的亮度
SCK=0;
SCK=1; //將最后一行數(shù)據(jù)移出
}
void display() //顯示子函數(shù)
{
unsigned char i,ia,tmp;
unsigned int j;
DATAOUT=0XFF;
AB=0; //將行數(shù)據(jù)位清0,準(zhǔn)備移位
for(i=0;i<16;i++)
{
SCK=0;
SCLT=0;
for(ia=8;ia>0;)
{ //每行64個(gè)點(diǎn),循環(huán)位移8個(gè)字節(jié)
ia--; //循環(huán)四次
tmp=~lhj[i*8+ia];
for(j=0;j<8;j++)
{ //循環(huán)兩次,每次移一個(gè)字節(jié),
SCLH=0;
DATA=tmp&0x01; //將數(shù)據(jù)低位做輸出
tmp>>=1;
SCLH=1; //將DATA上的數(shù)據(jù)移入寄存器
} //移入單字節(jié)結(jié)束
} //移入兩個(gè)字節(jié)結(jié)束
DATAOUT|=0X24;
//等價(jià)于SCK=1;
// SCLT=1;
AB=1;
}
j=100;
while(j--); //每一行的顯示,保持6個(gè)字節(jié)的移位時(shí)間,因此,最后一行的顯示,也要加入保持時(shí)間,補(bǔ)嘗顯示的亮度
SCK=0;
SCK=1; //將最后一行數(shù)據(jù)移出
}
void displayS2(unsigned int timer) //指定時(shí)間掃描顯示函數(shù) 中斷調(diào)用時(shí)用
{
unsigned char i;
while(timer--)
{ //當(dāng)timer=1時(shí),大約1秒時(shí)間
i=20;
while(i--)
display2();
}
}
void displayS(unsigned int timer) //指定時(shí)間掃描顯示函數(shù)
{
unsigned char i;
while(timer--)
{ //當(dāng)timer=1時(shí),大約1秒時(shí)間
i=20;
while(i--)
display();
}
}
void displaymove(unsigned char *lp,unsigned char c,unsigned char timer)//左移顯示函數(shù),LP指向要顯示第一個(gè)字的首地址,C表示顯示字的個(gè)數(shù),
//timer是移動(dòng)的速度
{
unsigned char i=0,j=0,ia=0;
unsigned int tmp=0,timerc=0;
unsigned char tmp2[16];
c*=2;
for(i=0;i<16;i++)
tmp2[i]=0; //將緩沖區(qū)清0,
while(c)
{
if(lp!=0)
{ //當(dāng)lp指向的地址為0時(shí),直接用組緩沖0補(bǔ)上,效果是將當(dāng)前顯示的內(nèi)容移出
tmp=c%2; //取余,目的是為了判斷處理漢字的前半部份還是后半部份
for(i=0;i<16;i++)
{
tmp2[i]=lp[i*2+tmp]; //取半個(gè)漢字點(diǎn)陣數(shù)據(jù),16字節(jié)
}
if(tmp) //當(dāng)tmp為1時(shí),表時(shí)一個(gè)字?jǐn)?shù)組處理完成,將地址轉(zhuǎn)到下一個(gè)字
lp+=32;
}
//--------------
tmp=8; //變量再次利用
while(tmp)
{ //循環(huán)8次,是將下一個(gè)字的前半部份的字節(jié)數(shù)據(jù)移入顯示緩沖
ia=0; //做為點(diǎn)陣數(shù)組的元素
for(i=0;i<16;i++)
{ //移動(dòng)是16行同時(shí)移,因此要處理16個(gè)字節(jié)
for(j=0;j<7;j++)
{ //一行32個(gè)點(diǎn)四字節(jié),有三字節(jié)在顯示緩沖中移動(dòng)
lhj[ia]<<=1; //移當(dāng)前顯示緩沖的半行字節(jié)
if(lhj[ia+1]&0x80) //判斷后半行字節(jié)的高位是否為1,是移入前半行字節(jié)低位,否則不處理
lhj[ia]++;
ia++;
}
lhj[ia]<<=1; //一行32個(gè)點(diǎn)四字節(jié),將最后一字節(jié)用下一個(gè)字補(bǔ)上
if(tmp2[i]&0x80) //判斷下一個(gè)要顯示漢字的前半行字節(jié)的高位是否為1,是移入,否則不處理
lhj[ia]++;
ia++;
tmp2[i]<<=1; //下一個(gè)要顯示漢字的半行字節(jié)向高位移一位,準(zhǔn)備下一次取位
}
tmp--;
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display();
}
//----------
c--; //移完一半,進(jìn)入下一半或下一個(gè)漢字,直到結(jié)束
}
}
void displaymove2(unsigned char *lp,unsigned char c,unsigned char timer)//左移顯示函數(shù),LP指向要顯示第一個(gè)字的首地址,C表示顯示字的個(gè)數(shù),
//timer是移動(dòng)的速度
{
unsigned char i=0,j=0,ia=0;
unsigned int tmp=0,timerc=0;
unsigned char tmp2[16];
c*=2;
for(i=0;i<16;i++)
tmp2[i]=0; //將緩沖區(qū)清0,
while(c)
{
if(lp!=0)
{ //當(dāng)lp指向的地址為0時(shí),直接用組緩沖0補(bǔ)上,效果是將當(dāng)前顯示的內(nèi)容移出
tmp=c%2; //取余,目的是為了判斷處理漢字的前半部份還是后半部份
for(i=0;i<16;i++)
{
tmp2[i]=lp[i*2+tmp]; //取半個(gè)漢字點(diǎn)陣數(shù)據(jù),16字節(jié)
}
if(tmp) //當(dāng)tmp為1時(shí),表時(shí)一個(gè)字?jǐn)?shù)組處理完成,將地址轉(zhuǎn)到下一個(gè)字
lp+=32;
}
//--------------
tmp=8; //變量再次利用
while(tmp)
{ //循環(huán)8次,是將下一個(gè)字的前半部份的字節(jié)數(shù)據(jù)移入顯示緩沖
ia=0; //做為點(diǎn)陣數(shù)組的元素
for(i=0;i<16;i++)
{ //移動(dòng)是16行同時(shí)移,因此要處理16個(gè)字節(jié)
for(j=0;j<7;j++)
{ //一行32個(gè)點(diǎn)四字節(jié),有三字節(jié)在顯示緩沖中移動(dòng)
lhj[ia]<<=1; //移當(dāng)前顯示緩沖的半行字節(jié)
if(lhj[ia+1]&0x80) //判斷后半行字節(jié)的高位是否為1,是移入前半行字節(jié)低位,否則不處理
lhj[ia]++;
ia++;
}
lhj[ia]<<=1; //一行32個(gè)點(diǎn)四字節(jié),將最后一字節(jié)用下一個(gè)字補(bǔ)上
if(tmp2[i]&0x80) //判斷下一個(gè)要顯示漢字的前半行字節(jié)的高位是否為1,是移入,否則不處理
lhj[ia]++;
ia++;
tmp2[i]<<=1; //下一個(gè)要顯示漢字的半行字節(jié)向高位移一位,準(zhǔn)備下一次取位
}
tmp--;
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display2();
}
//----------
c--; //移完一半,進(jìn)入下一半或下一個(gè)漢字,直到結(jié)束
}
}
void displaymovetb(unsigned char din,unsigned char *lp,unsigned char c,unsigned char timer)
//上下移動(dòng)顯示函數(shù),din:1為向下,0為向上,lp指向要移入的內(nèi)容,C表示有幾個(gè)漢字要移,timer為移動(dòng)速度
{
unsigned char i=0,j=0,ia=0,ib=0,ic=0,id=0;
unsigned int tmp=0,timerc=0;
if(din)
{ //判斷移動(dòng)方向,向下
ia=32; //要移入第一個(gè)漢字的數(shù)組元素
ib=64; //要移入第二個(gè)漢字的數(shù)組元素
ic=96;
id=128;
i=16; //行索引
while(i--)
{ //逐行處理
j=120;
while(j)
{
j--;
lhj[j+8]=lhj[j]; //將上一行的內(nèi)容復(fù)制到下一行,每?jī)尚袃?nèi)容相隔6個(gè)字節(jié),復(fù)制15行
}
if(lp==0)
{ //最后一行的處理,判斷移入的內(nèi)容是否為空,是用0移入
j=8;
while(j--)
lhj[j]=0;
}
else
{ //否則,取字?jǐn)?shù)組處理
ia--;ib--;ic--;id-- ;
if(c==4)
{ //判斷4個(gè)字,移一行,6個(gè)字節(jié)
lhj[1]=lp[ia];
ia--;
lhj[0]=lp[ia];
lhj[3]=lp[ib];
ib--;
lhj[2]=lp[ib];
lhj[5]=lp[ic];
ic--;
lhj[4]=lp[ic];
lhj[7]=lp[id];
id--;
lhj[6]=lp[id];
}
else if(c==3)
{ //否則3個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[2]=lp[ia];
ia--;
lhj[1]=lp[ia];
lhj[4]=lp[ib];
ib--;
lhj[3]=lp[ib];
lhj[6]=lp[ic];
ic--;
lhj[5]=lp[ic];
lhj[7]=0;
}
else if(c==2)
{ //否則2個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[1]=0;
lhj[3]=lp[ia];
ia--;
lhj[2]=lp[ia];
lhj[5]=lp[ib];
ib--;
lhj[4]=lp[ib];
lhj[6]=0;
lhj[7]=0;
}
else if(c==1)
{ //否則1個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[1]=0;
lhj[2]=0;
lhj[4]=lp[ia];
ia--;
lhj[3]=lp[ia];
lhj[5]=0;
lhj[6]=0;
lhj[7]=0;
}
}
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display();
}
}
else
{ //移動(dòng)方向,向上
ia=0;ib=32;ic=64;id=96; //向上移動(dòng),移入漢字從低位開(kāi)始
for(i=0;i<16;i++)
{ //處理16行
for(j=0;j<120;j++) //將下一行的內(nèi)容復(fù)制到上一行,每?jī)尚袃?nèi)容相隔6個(gè)字節(jié),復(fù)制15行
lhj[j]=lhj[j+8];
if(lp==0)
{ //最后一行的處理,判斷移入的內(nèi)容是否為空,是用0移入
while(j!=128)
{
lhj[j]=0;
j++;
}
}
else
{ //否則,取字?jǐn)?shù)組處理
if(c==4)
{ //判斷4個(gè)字,移一行,8個(gè)字節(jié)
lhj[120]=lp[ia];
lhj[121]=lp[ia+1];
lhj[122]=lp[ib];
lhj[123]=lp[ib+1];
lhj[124]=lp[ic];
lhj[125]=lp[ic+1];
lhj[126]=lp[id];
lhj[127]=lp[id+1];
ia+=2;ib+=2;ic+=2;id+=2;
}
else if(c==3)
{ //否則3個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[120]=0;
lhj[121]=lp[ia];
lhj[122]=lp[ia+1];
lhj[123]=lp[ib];
lhj[124]=lp[ib+1];
lhj[125]=lp[ic];
lhj[126]=lp[ic+1];
lhj[127]=0;
ia+=2;ib+=2;ic+=2;
}
else if(c==2)
{ //否則2個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[120]=0;
lhj[121]=0;
lhj[122]=lp[ia];
lhj[123]=lp[ia+1];
lhj[124]=lp[ib];
lhj[125]=lp[ib+1];
lhj[126]=0;
lhj[127]=0;
ia+=2;ib+=2;
}
else
{ //判斷1個(gè)字,移一行,8個(gè)字節(jié),將字放在中間,兩邊補(bǔ)0
lhj[120]=0;
lhj[121]=0;
lhj[122]=0;
lhj[123]=lp[ia];
ia++;
lhj[124]=lp[ia];
ia++;
lhj[125]=0;
lhj[126]=0;
lhj[127]=0;
}
}
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display();
}
}
}
void displaymovetb2(unsigned char din,unsigned char *lp,unsigned char c,unsigned char timer)
//上下移動(dòng)顯示函數(shù),din:1為向下,0為向上,lp指向要移入的內(nèi)容,C表示有幾個(gè)漢字要移,timer為移動(dòng)速度
{
unsigned char i=0,j=0,ia=0,ib=0,ic=0,id=0;
unsigned int tmp=0,timerc=0;
if(din)
{ //判斷移動(dòng)方向,向下
ia=32; //要移入第一個(gè)漢字的數(shù)組元素
ib=64; //要移入第二個(gè)漢字的數(shù)組元素
ic=96;
id=128;
i=16; //行索引
while(i--)
{ //逐行處理
j=120;
while(j)
{
j--;
lhj[j+8]=lhj[j]; //將上一行的內(nèi)容復(fù)制到下一行,每?jī)尚袃?nèi)容相隔6個(gè)字節(jié),復(fù)制15行
}
if(lp==0)
{ //最后一行的處理,判斷移入的內(nèi)容是否為空,是用0移入
j=8;
while(j--)
lhj[j]=0;
}
else
{ //否則,取字?jǐn)?shù)組處理
ia--;ib--;ic--;id-- ;
if(c==4)
{ //判斷4個(gè)字,移一行,6個(gè)字節(jié)
lhj[1]=lp[ia];
ia--;
lhj[0]=lp[ia];
lhj[3]=lp[ib];
ib--;
lhj[2]=lp[ib];
lhj[5]=lp[ic];
ic--;
lhj[4]=lp[ic];
lhj[7]=lp[id];
id--;
lhj[6]=lp[id];
}
else if(c==3)
{ //否則3個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[2]=lp[ia];
ia--;
lhj[1]=lp[ia];
lhj[4]=lp[ib];
ib--;
lhj[3]=lp[ib];
lhj[6]=lp[ic];
ic--;
lhj[5]=lp[ic];
lhj[7]=0;
}
else if(c==2)
{ //否則2個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[1]=0;
lhj[3]=lp[ia];
ia--;
lhj[2]=lp[ia];
lhj[5]=lp[ib];
ib--;
lhj[4]=lp[ib];
lhj[6]=0;
lhj[7]=0;
}
else if(c==1)
{ //否則1個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[0]=0;
lhj[1]=0;
lhj[2]=0;
lhj[4]=lp[ia];
ia--;
lhj[3]=lp[ia];
lhj[5]=0;
lhj[6]=0;
lhj[7]=0;
}
}
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display();
}
}
else
{ //移動(dòng)方向,向上
ia=0;ib=32;ic=64;id=96; //向上移動(dòng),移入漢字從低位開(kāi)始
for(i=0;i<16;i++)
{ //處理16行
for(j=0;j<120;j++) //將下一行的內(nèi)容復(fù)制到上一行,每?jī)尚袃?nèi)容相隔6個(gè)字節(jié),復(fù)制15行
lhj[j]=lhj[j+8];
if(lp==0)
{ //最后一行的處理,判斷移入的內(nèi)容是否為空,是用0移入
while(j!=128)
{
lhj[j]=0;
j++;
}
}
else
{ //否則,取字?jǐn)?shù)組處理
if(c==4)
{ //判斷4個(gè)字,移一行,8個(gè)字節(jié)
lhj[120]=lp[ia];
lhj[121]=lp[ia+1];
lhj[122]=lp[ib];
lhj[123]=lp[ib+1];
lhj[124]=lp[ic];
lhj[125]=lp[ic+1];
lhj[126]=lp[id];
lhj[127]=lp[id+1];
ia+=2;ib+=2;ic+=2;id+=2;
}
else if(c==3)
{ //否則3個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[120]=0;
lhj[121]=lp[ia];
lhj[122]=lp[ia+1];
lhj[123]=lp[ib];
lhj[124]=lp[ib+1];
lhj[125]=lp[ic];
lhj[126]=lp[ic+1];
lhj[127]=0;
ia+=2;ib+=2;ic+=2;
}
else if(c==2)
{ //否則2個(gè)字,將字放在中間,旁邊補(bǔ)0
lhj[120]=0;
lhj[121]=0;
lhj[122]=lp[ia];
lhj[123]=lp[ia+1];
lhj[124]=lp[ib];
lhj[125]=lp[ib+1];
lhj[126]=0;
lhj[127]=0;
ia+=2;ib+=2;
}
else
{ //判斷1個(gè)字,移一行,8個(gè)字節(jié),將字放在中間,兩邊補(bǔ)0
lhj[120]=0;
lhj[121]=0;
lhj[122]=0;
lhj[123]=lp[ia];
ia++;
lhj[124]=lp[ia];
ia++;
lhj[125]=0;
lhj[126]=0;
lhj[127]=0;
}
}
timerc=timer; //處理完16行,調(diào)用顯示函數(shù)更新點(diǎn)陣
while(timerc--) //循環(huán)做為處理的速度,即移動(dòng)的速度
display();
}
}
}
復(fù)制代碼
作者:
東東東510
時(shí)間:
2015-5-24 23:37
真牛 有沒(méi)有論文,
51黑有你更精彩。!
作者:
zzavav
時(shí)間:
2015-5-29 10:12
不錯(cuò),下來(lái)看看
作者:
junxuzhou
時(shí)間:
2015-6-15 10:00
先下來(lái)看看
作者:
junxuzhou
時(shí)間:
2015-6-15 10:01
不知道是用什么做的仿真
作者:
348643887
時(shí)間:
2015-9-23 21:34
頂一個(gè)
作者:
huafeixue8
時(shí)間:
2015-9-23 22:48
看起來(lái)不錯(cuò)哦
作者:
q123456wo
時(shí)間:
2015-11-10 13:26
真厲害
作者:
jimmy96853421
時(shí)間:
2015-11-24 10:41
拿回去看看
作者:
狗莽狗帶
時(shí)間:
2015-11-25 16:19
很好很強(qiáng)
作者:
xxxhim
時(shí)間:
2015-11-27 15:26
拿來(lái)研究研究
作者:
abnerh
時(shí)間:
2015-12-21 20:23
很不錯(cuò),謝謝樓主
作者:
q435833414
時(shí)間:
2016-1-5 07:37
zzavav 發(fā)表于 2015-5-29 10:12
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****
哥們,能加我 QQ發(fā)下文件嗎?我做課程設(shè)計(jì)急著要。非常感謝435833414
作者:
645896361
時(shí)間:
2016-2-2 18:32
大神能加Q指點(diǎn)一下嗎!
作者:
hjk1994
時(shí)間:
2016-3-17 10:29
屌屌屌
作者:
mmmoon90
時(shí)間:
2016-3-17 18:34
看樣子還不錯(cuò)哦。。。
作者:
mmmoon90
時(shí)間:
2016-3-17 18:34
看樣子還不錯(cuò)哦。。。
作者:
mmmoon90
時(shí)間:
2016-3-17 18:34
看樣子還不錯(cuò)哦。。。哈哈
作者:
longyi32
時(shí)間:
2016-3-27 23:37
your code is just what i want ! i love you!!
作者:
桃子不懂愛(ài)
時(shí)間:
2016-5-6 21:54
我要研究下
作者:
1238
時(shí)間:
2016-5-9 11:49
很好的資料,下載收藏了,
作者:
1238
時(shí)間:
2016-5-9 11:50
下載了,不錯(cuò)。學(xué)習(xí),學(xué)習(xí)
作者:
liutairun
時(shí)間:
2016-5-21 11:23
學(xué)習(xí)了
作者:
nwpchennan
時(shí)間:
2016-5-27 13:00
感謝樓主的貢獻(xiàn),看起來(lái)應(yīng)該不錯(cuò)
作者:
LeonLee
時(shí)間:
2016-9-12 17:23
可以不可以企鵝發(fā)我啊,課程設(shè)計(jì)急需,1739910956
作者:
song93
時(shí)間:
2016-12-1 23:27
努力學(xué)習(xí)中
作者:
落葉海潮
時(shí)間:
2016-12-14 16:11
程序內(nèi)容很全,但是你們制作過(guò)程中有沒(méi)有proteus仿真?我想看一下你們的proteus仿真,一般在燒程序之前都會(huì)用proteus仿真,multisim也可以。
作者:
伊卜拉
時(shí)間:
2016-12-14 21:28
很好的資料
作者:
ganggang233
時(shí)間:
2016-12-20 16:01
樓主非常不錯(cuò),學(xué)習(xí)了
作者:
a1101100261
時(shí)間:
2016-12-25 12:47
好東西,學(xué)習(xí)一下,謝謝樓主
作者:
臥室誰(shuí)
時(shí)間:
2016-12-25 22:45
樓主厲害
作者:
dianzi8266
時(shí)間:
2017-2-17 14:45
學(xué)習(xí)一下
作者:
fang7706
時(shí)間:
2017-2-19 20:58
資料比較詳細(xì),學(xué)習(xí)學(xué)習(xí)。!
作者:
s小y魚(yú)w
時(shí)間:
2017-3-4 11:08
急需的資料,謝謝樓主,向樓主學(xué)習(xí)
作者:
tengzhenm
時(shí)間:
2017-5-8 21:14
來(lái)學(xué)習(xí)了。
作者:
gkx119
時(shí)間:
2017-5-21 14:57
厲害 有protues設(shè)計(jì)么
作者:
13780463700
時(shí)間:
2017-6-21 18:28
下載學(xué)習(xí)
作者:
城市的秋天
時(shí)間:
2017-8-17 15:47
得鼓勵(lì)一下,在校生能做出這樣的東西出來(lái),確實(shí)很厲害。
看到上面介紹里存在一個(gè)概念錯(cuò)誤,說(shuō)stc是美國(guó)的。正確的說(shuō)應(yīng)該是,stc89c52是國(guó)內(nèi)的品牌,國(guó)產(chǎn)的芯片,與美國(guó)沒(méi)有關(guān)系。官網(wǎng)網(wǎng)址是:www點(diǎn)stcmcu點(diǎn)com ,里面有芯片的文檔和示例代碼可以下載
作者:
chq018450
時(shí)間:
2017-10-16 11:09
謝謝 樓主 正需要,
作者:
yang_buck
時(shí)間:
2017-11-3 22:47
很好,很強(qiáng)大的說(shuō)。
作者:
xwnc
時(shí)間:
2017-11-8 18:33
樓主太強(qiáng)了,學(xué)習(xí)學(xué)習(xí)
作者:
yf20130607
時(shí)間:
2018-3-21 17:49
謝謝樓主的分享!
作者:
yang_buck
時(shí)間:
2018-6-3 15:55
厲害厲害
作者:
15827594123
時(shí)間:
2018-7-3 22:22
要資料
作者:
hacehi
時(shí)間:
2018-7-9 21:08
歷害,優(yōu)秀的學(xué)生
作者:
hacehi
時(shí)間:
2018-7-12 12:21
要是有元件清單和proteus仿真就好了
作者:
pang848687
時(shí)間:
2018-7-27 19:59
資料很好,剛好需要,謝謝~~
作者:
haidao63
時(shí)間:
2018-7-28 20:21
學(xué)習(xí)了,很好的網(wǎng)站,謝謝了
作者:
祖國(guó)的北郊
時(shí)間:
2018-11-11 23:16
感謝感謝
作者:
xzyyglyt
時(shí)間:
2018-11-13 00:00
下載了,慢慢學(xué)習(xí),自己做一個(gè)顯示屏看來(lái)挺好玩的
作者:
快樂(lè)眼淚
時(shí)間:
2018-11-14 10:52
這種的是不是有專門改字的軟件?
作者:
GG1101
時(shí)間:
2018-12-3 10:16
好資料,準(zhǔn)備看下
作者:
kang13001
時(shí)間:
2019-1-10 11:10
大神呀,學(xué)習(xí)一下!!
作者:
OPIK
時(shí)間:
2019-6-24 16:43
很不錯(cuò),謝謝樓主!
作者:
wcs1668
時(shí)間:
2019-9-3 15:28
謝謝樓主資料分享。你的程序太長(zhǎng)如果做成模塊化結(jié)構(gòu)會(huì)更好
作者:
yaoyao001
時(shí)間:
2019-9-3 17:21
牛啊,路過(guò)學(xué)習(xí)下!
作者:
fzyzmd
時(shí)間:
2019-9-5 16:29
我要研究下
作者:
cck314
時(shí)間:
2019-9-7 23:15
高手高手,向你學(xué)習(xí)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1