3.png (366.25 KB, 下載次數: 144)
下載附件
2016-1-15 05:37 上傳
2.png (37.79 KB, 下載次數: 113)
下載附件
2016-1-15 05:37 上傳
1.png (40.41 KB, 下載次數: 163)
下載附件
2016-1-15 05:37 上傳
0.png (31.18 KB, 下載次數: 136)
下載附件
2016-1-15 05:37 上傳
51單片機做的4個16乘16LED點陣資料設計非常完整包含 51單片機源程序 電路圖 PCB文件還有畢業設計論文下載
下載鏈接:
4個16乘16LED點陣資料.rar
(2.38 MB, 下載次數: 96)
2016-1-14 15:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
部分源碼預覽:
- /*64*16點陣屏的顯示點陣屏的顯示*/
- #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; //列數據輸出位
- sbit SCLH=DATAOUT^1; //列掃描時鐘位
- sbit SCLT=DATAOUT^2; //列數據鎖存位
- sbit AB=DATAOUT^4; //行數據輸出位
- sbit SCK=DATAOUT^5; //行掃描時鐘位
- 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 為定時器0計數,num 為時間秒計數,numf 分鐘計數,nums 小時計數
- unsigned char idata lhj[128]; //128字節RAM做為64*16點陣屏顯示緩存
- void display(); //做為點陣掃描函數,將顯示緩存的數據輸出到點陣屏
- void display2();
- void displayS(unsigned int timer);//指定時間掃描顯示
- void displayS2(unsigned int );
- void displaymove(unsigned char *lp,unsigned char c,unsigned char timer); //顯示漢字內容的移動效果,LP指向要顯示第一個字的首地址,C表示顯示字的個數,
- void displaymove2(unsigned char *,unsigned char ,unsigned char ); //timer是移動的速度
- 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(); //初始化函數
- void displayshijian(); //時間顯示函數 //上下移動內容,din:1為向下,0為向上,
- void displayshijian2(); //lp指向要移入的內容表示有幾個漢字要移,timer為移動速度
- //void delay(unsigned int z);//延時子函數
- /****************** 字模 *************************/
- 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}; //學
- 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}; //樂
- 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}; //時
- 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}; //“點”
- 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
- }; //日
- //時數據
- code unsigned char c[3][16]={
- ///*-- 文字: 0 --*//*-- 楷體_GB231212; 此字體下對應的點陣為:寬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,}
- };
- //分數據
- 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]={ //"關關雎鳩"
- {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; // 定時器0為工作方式1
- TH0 = (65536-50000)/256; //定時50mS
- TL0 = (65536-50000)%256;
- EA = 1; //開總中斷
- ET0 = 1; //開定時器0中斷
- EX0 = 1; //開外部中斷0
- EX1 = 1; //開外部中斷1
- IT0 = 0; //設置外部中斷0的中斷方式為0 低電平觸發
- IT1 = 0;
- TR0 = 1; //啟動定時器0
- num = 0;
- nums = 12;
- numf = 30;
- numyear = 2013;
- nummonth = 1;
- numday = 15;
- }
- void displayshijian() //顯示時間函數
- {
- unsigned char i,j,p1,k1,p2,k2;
- p1 = nums/10;
- k1 = nums%10; //小時數據
- p2 = numf/10;
- k2 = numf%10; //分鐘數據
-
- 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() //顯示時間函數
- {
-
- unsigned char i,j,p1,k1,p2,k2;
- p1 = nums/10;
- k1 = nums%10; //小時數據
- p2 = numf/10;
- k2 = numf%10; //分鐘數據
-
- 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; //月數據
- p2 = numday/10;
- k2 = numday%10; //日數據
- 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; //月數據
- p2 = numday/10;
- k2 = numday%10; //日數據
- /* 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按鍵掃描,按下則 小時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口賦高電平 防止下次重復進入中斷
- }
-
- void T0timer() interrupt 1 //定時器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;) //復制笑臉圖案到中間
- {
- lhj[i]=XL[j];
- lhj[i+1]=XL[j+1];
- i=i+8;
- j=j+2;
- }
-
- for(i=4,j=0;i<128;) //復制安卓機器人圖案到中間
- {
- 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;) //復制笑臉圖案到中間
- {
- 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;) //復制笑臉圖案到中間
- {
- 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;) //復制笑臉圖案到中間
- {
- lhj[i]=DH4[j];
- lhj[i+1]=DH4[j+1];
- i=i+8;
- j=j+2;
- }
- for(i=2,j=0;i<128;) //復制笑臉圖案到中間
- {
- lhj[i]=DH3[j];
- lhj[i+1]=DH3[j+1];
- i=i+8;
- j=j+2;
- }
- for(i=4,j=0;i<128;) //復制笑臉圖案到中間
- {
- lhj[i]=DH4[j];
- lhj[i+1]=DH4[j+1];
- i=i+8;
- j=j+2;
- }
- for(i=6,j=0;i<128;) //復制笑臉圖案到中間
- {
- lhj[i]=DH4[j];
- lhj[i+1]=DH4[j+1];
- i=i+8;
- j=j+2;
- }
- displayS(5);
- } */
- void shijianzz()
- {
- /***************************************************///時間自增
- if(numf > 59) //分鐘numf,小時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()
- {
- /*********逐個顯示“新年快樂”************/
- 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);
- /**********************************/
- }
- /********************** 主函數 *************************************/
- void main(void)
- {
- init(); //初始化程序
- displaytu_an();
- displayS(2);
- //displaydonghua();
- while(1)
- {
- // displaytu_an(); //顯示圖案
- shijianzz(); //時間自增函數
- displaymovetb(1,0,4,3); //向下清屏
- displaymovetb(1,WU,4,2); //向下顯示“物電學院"
- displayS(1); //持續顯示2S
- displaymovetb(0,0,4,2); //向上卷簾清屏
- displaymove(LING,4,1); //左跑馬 “零九電子”
- displayS(1);
- displaymovetb(1,0,4,2); //向下卷簾清屏
- displayXNKL(); //由左往右顯示‘新年快樂’
- displaymove(0,4,2); //左跑馬清屏
- displaymovetb(1,BEI,4,3); //向下顯示 “北京時間”
- displayS(2);
- displaymovetb(1,0,4,1);
- displaynyr(); //顯示****年**月**日
- displayshijian(); //調用顯示**點**分 時間函數
- displayS(5);
- displaymovetb(1,0,4,3); //向下清屏
- }
- }
- /********************** 主函數 *************************************/
- void display2() //顯示子函數 中斷調用才使用
- {
- unsigned char i,ia,tmp;
- unsigned int j;
- DATAOUT=0XFF;
- AB=0; //將行數據位清0,準備移位
- for(i=0;i<16;i++)
- {
- SCK=0;
- SCLT=0;
- for(ia=8;ia>0;)
- { //每行64個點,循環位移8個字節
- ia--; //循環四次
- tmp=~lhj[i*8+ia];
- for(j=0;j<8;j++)
- { //循環兩次,每次移一個字節,
- SCLH=0;
- DATA=tmp&0x01; //將數據低位做輸出
- tmp>>=1;
- SCLH=1; //將DATA上的數據移入寄存器
- } //移入單字節結束
- } //移入兩個字節結束
- DATAOUT|=0X24;
- //等價于SCK=1;
- // SCLT=1;
- AB=1;
- }
- j=100;
- while(j--); //每一行的顯示,保持6個字節的移位時間,因此,最后一行的顯示,也要加入保持時間,補嘗顯示的亮度
- SCK=0;
- SCK=1; //將最后一行數據移出
- }
- void display() //顯示子函數
- {
- unsigned char i,ia,tmp;
- unsigned int j;
- DATAOUT=0XFF;
- AB=0; //將行數據位清0,準備移位
- for(i=0;i<16;i++)
- {
- SCK=0;
- SCLT=0;
- for(ia=8;ia>0;)
- { //每行64個點,循環位移8個字節
- ia--; //循環四次
- tmp=~lhj[i*8+ia];
- for(j=0;j<8;j++)
- { //循環兩次,每次移一個字節,
- SCLH=0;
- DATA=tmp&0x01; //將數據低位做輸出
- tmp>>=1;
- SCLH=1; //將DATA上的數據移入寄存器
- } //移入單字節結束
- } //移入兩個字節結束
- DATAOUT|=0X24;
- //等價于SCK=1;
- // SCLT=1;
- AB=1;
- }
- j=100;
- while(j--); //每一行的顯示,保持6個字節的移位時間,因此,最后一行的顯示,也要加入保持時間,補嘗顯示的亮度
- SCK=0;
- SCK=1; //將最后一行數據移出
- }
- void displayS2(unsigned int timer) //指定時間掃描顯示函數 中斷調用時用
- {
- unsigned char i;
- while(timer--)
- { //當timer=1時,大約1秒時間
- i=20;
- while(i--)
- display2();
- }
- }
- void displayS(unsigned int timer) //指定時間掃描顯示函數
- {
- unsigned char i;
- while(timer--)
- { //當timer=1時,大約1秒時間
- i=20;
- while(i--)
- display();
- }
- }
- void displaymove(unsigned char *lp,unsigned char c,unsigned char timer)//左移顯示函數,LP指向要顯示第一個字的首地址,C表示顯示字的個數,
- //timer是移動的速度
- {
- 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; //將緩沖區清0,
- while(c)
- {
- if(lp!=0)
- { //當lp指向的地址為0時,直接用組緩沖0補上,效果是將當前顯示的內容移出
- tmp=c%2; //取余,目的是為了判斷處理漢字的前半部份還是后半部份
- for(i=0;i<16;i++)
- {
- tmp2[i]=lp[i*2+tmp]; //取半個漢字點陣數據,16字節
- }
- if(tmp) //當tmp為1時,表時一個字數組處理完成,將地址轉到下一個字
- lp+=32;
- }
- //--------------
- tmp=8; //變量再次利用
- while(tmp)
- { //循環8次,是將下一個字的前半部份的字節數據移入顯示緩沖
- ia=0; //做為點陣數組的元素
- for(i=0;i<16;i++)
- { //移動是16行同時移,因此要處理16個字節
- for(j=0;j<7;j++)
- { //一行32個點四字節,有三字節在顯示緩沖中移動
- lhj[ia]<<=1; //移當前顯示緩沖的半行字節
- if(lhj[ia+1]&0x80) //判斷后半行字節的高位是否為1,是移入前半行字節低位,否則不處理
- lhj[ia]++;
- ia++;
- }
- lhj[ia]<<=1; //一行32個點四字節,將最后一字節用下一個字補上
- if(tmp2[i]&0x80) //判斷下一個要顯示漢字的前半行字節的高位是否為1,是移入,否則不處理
- lhj[ia]++;
- ia++;
- tmp2[i]<<=1; //下一個要顯示漢字的半行字節向高位移一位,準備下一次取位
- }
- tmp--;
- timerc=timer; //處理完16行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display();
- }
- //----------
- c--; //移完一半,進入下一半或下一個漢字,直到結束
- }
- }
- void displaymove2(unsigned char *lp,unsigned char c,unsigned char timer)//左移顯示函數,LP指向要顯示第一個字的首地址,C表示顯示字的個數,
- //timer是移動的速度
- {
- 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; //將緩沖區清0,
- while(c)
- {
- if(lp!=0)
- { //當lp指向的地址為0時,直接用組緩沖0補上,效果是將當前顯示的內容移出
- tmp=c%2; //取余,目的是為了判斷處理漢字的前半部份還是后半部份
- for(i=0;i<16;i++)
- {
- tmp2[i]=lp[i*2+tmp]; //取半個漢字點陣數據,16字節
- }
- if(tmp) //當tmp為1時,表時一個字數組處理完成,將地址轉到下一個字
- lp+=32;
- }
- //--------------
- tmp=8; //變量再次利用
- while(tmp)
- { //循環8次,是將下一個字的前半部份的字節數據移入顯示緩沖
- ia=0; //做為點陣數組的元素
- for(i=0;i<16;i++)
- { //移動是16行同時移,因此要處理16個字節
- for(j=0;j<7;j++)
- { //一行32個點四字節,有三字節在顯示緩沖中移動
- lhj[ia]<<=1; //移當前顯示緩沖的半行字節
- if(lhj[ia+1]&0x80) //判斷后半行字節的高位是否為1,是移入前半行字節低位,否則不處理
- lhj[ia]++;
- ia++;
- }
- lhj[ia]<<=1; //一行32個點四字節,將最后一字節用下一個字補上
- if(tmp2[i]&0x80) //判斷下一個要顯示漢字的前半行字節的高位是否為1,是移入,否則不處理
- lhj[ia]++;
- ia++;
- tmp2[i]<<=1; //下一個要顯示漢字的半行字節向高位移一位,準備下一次取位
- }
- tmp--;
- timerc=timer; //處理完16行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display2();
- }
- //----------
- c--; //移完一半,進入下一半或下一個漢字,直到結束
- }
- }
- void displaymovetb(unsigned char din,unsigned char *lp,unsigned char c,unsigned char timer)
- //上下移動顯示函數,din:1為向下,0為向上,lp指向要移入的內容,C表示有幾個漢字要移,timer為移動速度
- {
- unsigned char i=0,j=0,ia=0,ib=0,ic=0,id=0;
- unsigned int tmp=0,timerc=0;
- if(din)
- { //判斷移動方向,向下
- ia=32; //要移入第一個漢字的數組元素
- ib=64; //要移入第二個漢字的數組元素
- ic=96;
- id=128;
- i=16; //行索引
- while(i--)
- { //逐行處理
- j=120;
- while(j)
- {
- j--;
- lhj[j+8]=lhj[j]; //將上一行的內容復制到下一行,每兩行內容相隔6個字節,復制15行
- }
- if(lp==0)
- { //最后一行的處理,判斷移入的內容是否為空,是用0移入
- j=8;
- while(j--)
- lhj[j]=0;
- }
- else
- { //否則,取字數組處理
- ia--;ib--;ic--;id-- ;
- if(c==4)
- { //判斷4個字,移一行,6個字節
- 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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display();
- }
- }
- else
- { //移動方向,向上
- ia=0;ib=32;ic=64;id=96; //向上移動,移入漢字從低位開始
- for(i=0;i<16;i++)
- { //處理16行
- for(j=0;j<120;j++) //將下一行的內容復制到上一行,每兩行內容相隔6個字節,復制15行
- lhj[j]=lhj[j+8];
- if(lp==0)
- { //最后一行的處理,判斷移入的內容是否為空,是用0移入
- while(j!=128)
- {
- lhj[j]=0;
- j++;
- }
- }
- else
- { //否則,取字數組處理
- if(c==4)
- { //判斷4個字,移一行,8個字節
- 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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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個字,移一行,8個字節,將字放在中間,兩邊補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行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display();
- }
- }
-
- }
- void displaymovetb2(unsigned char din,unsigned char *lp,unsigned char c,unsigned char timer)
- //上下移動顯示函數,din:1為向下,0為向上,lp指向要移入的內容,C表示有幾個漢字要移,timer為移動速度
- {
- unsigned char i=0,j=0,ia=0,ib=0,ic=0,id=0;
- unsigned int tmp=0,timerc=0;
- if(din)
- { //判斷移動方向,向下
- ia=32; //要移入第一個漢字的數組元素
- ib=64; //要移入第二個漢字的數組元素
- ic=96;
- id=128;
- i=16; //行索引
- while(i--)
- { //逐行處理
- j=120;
- while(j)
- {
- j--;
- lhj[j+8]=lhj[j]; //將上一行的內容復制到下一行,每兩行內容相隔6個字節,復制15行
- }
- if(lp==0)
- { //最后一行的處理,判斷移入的內容是否為空,是用0移入
- j=8;
- while(j--)
- lhj[j]=0;
- }
- else
- { //否則,取字數組處理
- ia--;ib--;ic--;id-- ;
- if(c==4)
- { //判斷4個字,移一行,6個字節
- 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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display();
- }
- }
- else
- { //移動方向,向上
- ia=0;ib=32;ic=64;id=96; //向上移動,移入漢字從低位開始
- for(i=0;i<16;i++)
- { //處理16行
- for(j=0;j<120;j++) //將下一行的內容復制到上一行,每兩行內容相隔6個字節,復制15行
- lhj[j]=lhj[j+8];
- if(lp==0)
- { //最后一行的處理,判斷移入的內容是否為空,是用0移入
- while(j!=128)
- {
- lhj[j]=0;
- j++;
- }
- }
- else
- { //否則,取字數組處理
- if(c==4)
- { //判斷4個字,移一行,8個字節
- 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個字,將字放在中間,旁邊補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個字,將字放在中間,旁邊補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個字,移一行,8個字節,將字放在中間,兩邊補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行,調用顯示函數更新點陣
- while(timerc--) //循環做為處理的速度,即移動的速度
- display();
- }
- }
- }
復制代碼
|