日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

led16*16点阵实验c语言,基于单片机的64*16LED点阵电子显示屏设计 pcb图+原理图+源程序...

發布時間:2024/1/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 led16*16点阵实验c语言,基于单片机的64*16LED点阵电子显示屏设计 pcb图+原理图+源程序... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*64*16點陣屏的顯示點陣屏的顯示*/

#include

#include

#include

#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 DIAN[32]={

0x00,0x00,0x00,0x00,0x1F,0xF8,0x11,0x10,

0x11,0x10,0x11,0x10,0x11,0x10,0xFF,0xFE,

0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,

0x1F,0xF9,0x00,0x01,0x00,0x0F,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //電

code unsigned char QI[32]={

0x04,0x00,0x08,0x00,0x32,0x00,0xE2,0x00,

0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,

0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2B,0xF0,

0x20,0x0C,0x20,0x02,0x00,0x0F,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//氣

code unsigned char GONG[32]={

0x00,0x04,0x20,0x04,0x20,0x04,0x20,0x04,

0x20,0x04,0x20,0x04,0x20,0x04,0x3F,0xFC,

0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,

0x20,0x04,0x20,0x04,0x00,0x04,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//工

code unsigned char CHENG[32]={

0x22,0x10,0x22,0x60,0x23,0x80,0x7F,0xFF,

0xC2,0x80,0x42,0x60,0x00,0x02,0x7A,0x92,

0x42,0x92,0x42,0x92,0x42,0xFE,0x42,0x92,

0x42,0x92,0x7A,0x92,0x00,0x82,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//程

code unsigned char LAO[32]={

0x04,0x08,0x04,0x10,0x24,0x20,0x24,0x40,

0x24,0xFC,0x24,0xA2,0xFD,0x22,0x26,0x22,

0x24,0x42,0x2C,0x42,0x14,0x42,0x24,0x82,

0x44,0x1E,0x04,0x00,0x04,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//老

code unsigned char SHI1[32]={

0x00,0x00,0x3F,0xE1,0x00,0x02,0x00,0x0C,

0xFF,0xF0,0x00,0x00,0x40,0x00,0x27,0xF8,

0x24,0x00,0x24,0x00,0x7F,0xFF,0x24,0x10,

0x24,0x08,0x27,0xF0,0x20,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //師

code unsigned char MEN[32]={

0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,

0xE0,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,

0x60,0x00,0x00,0x00,0x20,0x00,0x20,0x02,

0x20,0x01,0x3F,0xFE,0x00,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//們

code unsigned char HAO[32]={

0x08,0x02,0x08,0x44,0x0F,0xA8,0xF8,0x10,

0x08,0x68,0x0F,0x86,0x00,0x00,0x01,0x00,

0x41,0x02,0x41,0x01,0x47,0xFE,0x49,0x00,

0x51,0x00,0x61,0x00,0x01,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //好

code unsigned char BEI[32] ={

0x00,0x04,0x04,0x06,0x04,0x04,0x04,0x08,

0x04,0x08,0xFF,0xFF,0x00,0x00,0x00,0x00,

0x00,0x00,0xFF,0xFC,0x02,0x02,0x04,0x02,

0x08,0x02,0x10,0x02,0x00,0x1E,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //北

code unsigned char JING[32] = {

0x20,0x00,0x20,0x02,0x20,0x04,0x27,0xD8,

0x24,0x40,0x24,0x42,0xA4,0x41,0x64,0x7E,

0x24,0x40,0x24,0x40,0x24,0x40,0x27,0xD0,

0x20,0x08,0x20,0x06,0x20,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //京

code unsigned char SHI[32] = {

0x00,0x00,0x3F,0xFC,0x21,0x08,0x21,0x08,

0x21,0x08,0x3F,0xFC,0x00,0x00,0x08,0x00,

0x08,0x80,0x08,0x60,0x08,0x02,0x08,0x01,

0xFF,0xFE,0x08,0x00,0x08,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //時

code unsigned char JIAN[32] = {

0x00,0x00,0x1F,0xFF,0x80,0x00,0x60,0x00,

0x00,0x00,0x0F,0xF8,0x48,0x88,0x48,0x88,

0x48,0x88,0x4F,0xF8,0x40,0x00,0x40,0x02,

0x40,0x01,0x7F,0xFE,0x00,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //間

code unsigned char XL[32]={

0x00,0x00,0x07,0xc0,0x18,0x30,0x20,0x0C,

0x40,0xC4,0x8C,0x62,0x8C,0x32,0x80,0x12,

0x80,0x12,0x80,0x12,0x8C,0x32,0x4C,0x64,

0x40,0xC4,0x20,0x08,0x18,0x60,0x07,0xC0,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //笑臉

code unsigned char ANZHUO[32]={

0x00,0x00,0x00,0x00,0x03,0xE0,0x03,0xE0,

0x00,0x00,0x9B,0xF0,0x3B,0xFE,0x6B,0xFE,

0x7B,0xF0,0x6B,0xFE,0x3B,0xFE,0x9B,0xF0,

0x00,0x00,0x03,0xE0,0x03,0xE0,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//安卓

code unsigned char HOU[32]={

0x00,0x01,0x00,0x02,0x03,0xfC,0x02,0x30,

0x02,0x10,0x02,0x18,0xFE,0x16,0x12,0x10,

0x12,0x18,0x12,0x16,0x12,0x10,0x13,0xf0,

0x10,0x08,0x10,0x07,0x00,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//“點”

code unsigned char MIN[32]={

0x01,0x00,0x02,0x01,0x04,0x02,0x09,0x04,

0x11,0x18,0x61,0xE0,0x01,0x00,0x01,0x02,

0x01,0x01,0xC1,0x02,0x31,0xFC,0x08,0x00,

0x04,0x00,0x02,0x00,0x01,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//“分”

code unsigned char el[32]={

0x00,0x00,0x07,0x0C,0x10,0x14,0x10,0x24,

0x10,0x44,0x11,0x84,0x0e,0x0c,0x00,0x00,

0x00,0x00,0x07,0xe0,0x08,0x10,0x10,0x08,

0x10,0x08,0x08,0x10,0x07,0xe0,0x00,0x00,};? ?//20

code unsigned char yw[32]={

0x00,0x00,0x08,0x04,0x08,0x04,0x1f,0xfc,

0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,

0x00,0x00,0x3e,0x02,0x22,0x02,0x22,0x02,

0x22,0x04,0x22,0x08,0x21,0xf0,0x00,0x00,};? ?//15

code unsigned char NIAN2[32]={

0x00,0x20,0x04,0x20,0x18,0x20,0xE3,0xE0,

0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,

0x3F,0xFF,0x22,0x20,0x22,0x20,0x22,0x20,

0x22,0x20,0x20,0x20,0x00,0x20,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//年

code unsigned char nop[32]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

code unsigned char lw[32]={

0x00,0x00,0x07,0xe0,0x08,0x10,0x10,0x08,

0x10,0x08,0x08,0x10,0x07,0xe0,0x00,0x00,

0x00,0x00,0x3e,0x02,0x22,0x02,0x22,0x02,

0x22,0x04,0x22,0x08,0x21,0xf0,0x00,0x00,};? ?? ?? ?//05

code unsigned char YUE[32]={

0x00,0x01,0x00,0x02,0x00,0x0C,0x3F,0xF0,

0x22,0x40,0x22,0x40,0x22,0x40,0x22,0x40,

0x22,0x40,0x22,0x40,0x22,0x42,0x22,0x41,

0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//月

code unsigned char shl[32]={

0x00,0x00,0x08,0x04,0x08,0x04,0x1f,0xfc,

0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,

0x00,0x00,0x0e,0xf8,0x10,0x84,0x20,0x84,

0x20,0x84,0x20,0x84,0x20,0x78,0x00,0x00,};? ?? ???//16

code unsigned char RI2[32]={

0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,

0x41,0x02,0x41,0x02,0x41,0x02,0x41,0x02,

0x41,0x02,0x41,0x02,0x41,0x02,0x7F,0xFF,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //日

code unsigned char xie[32]={

0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,

0x00,0x54,0x3F,0xC8,0x6A,0x52,0xAA,0x61,

0x3F,0xFE,0x01,0x00,0x08,0xC2,0x08,0x01,

0xFF,0xFE,0x08,0x00,0x08,0x00,0x00,0x00,

};

code unsigned char xie1[32]={

0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,

0x00,0x54,0x3F,0xC8,0x6A,0x52,0xAA,0x61,

0x3F,0xFE,0x01,0x00,0x08,0xC2,0x08,0x01,

0xFF,0xFE,0x08,0x00,0x08,0x00,0x00,0x00,

};

code unsigned char LAO1[32]={

0x04,0x08,0x04,0x10,0x24,0x20,0x24,0x40,

0x24,0xFC,0x24,0xA2,0xFD,0x22,0x26,0x22,

0x24,0x42,0x2C,0x42,0x14,0x42,0x24,0x82,

0x44,0x1E,0x04,0x00,0x04,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//老

code unsigned char SHI2[32]={

0x00,0x00,0x3F,0xE1,0x00,0x02,0x00,0x0C,

0xFF,0xF0,0x00,0x00,0x00,0x00,0x2f,0xF8,

0x28,0x00,0x28,0x00,0x3F,0xFF,0x28,0x10,

0x28,0x08,0x2f,0xF0,0x20,0x00,0x00,0x00,

};? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //師

//時數據

code unsigned char c[3][16]={

///*--??文字:??0??--*//*--??楷體_GB231212;??此字體下對應的點陣為:寬x高=8x16? ?--*/

{0x00,0x00,0x07,0xe0,0x08,0x10,0x10,0x08,0x10,0x08,0x08,0x10,0x07,0xe0,0x00,0x00,},

{///*--??文字:??1??--*/

0x00,0x00,0x08,0x04,0x08,0x04,0x1f,0xfc,0x00,0x04,0x00,0x04,0x00,0x07,0x10,0x10,},

{///*--??文字:??2??--*/

0x00,0x00,0x07,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0e,0x0c,0x00,0x00,}

};

code unsigned char d[10][16]={

{///*--??文字:??0??--*/

0x00,0x00,0x07,0xe0,0x08,0x10,0x10,0x08,0x10,0x08,0x08,0x10,0x07,0xe0,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,

}

};

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 = 2015;

nummonth = 5;

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日

p1 = nummonth/10;

k1 = nummonth%10;? ?? ?? ? //月數據

p2 = numday/10;

k2 = numday%10;? ?? ?? ? //日數據

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);

}

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;

}

}

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 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]=LAO[j];

lhj[i+1]=LAO[j+1];

i=i+8;

j=j+2;

}

displayS(2);

for(i=2,j=0;i<128;)

{

lhj[i]=SHI1[j];

lhj[i+1]=SHI1[j+1];

i=i+8;

j=j+2;

}

displayS(2);

for(i=4,j=0;i<128;)

{

lhj[i]=MEN[j];

lhj[i+1]=MEN[j+1];

i=i+8;

j=j+2;

}

displayS(2);

for(i=6,j=0;i<128;)

{

lhj[i]=HAO[j];

lhj[i+1]=HAO[j+1];

i=i+8;

j=j+2;

}

displayS(2);

/**********************************/

}

/********************** 主函數 *************************************/

void main(void)

{

init();? ?? ?? ?? ?//初始化程序

displaytu_an();

displayS(4);

while(1)

{

shijianzz();? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //時間自增函數

displaymovetb(1,0,4,3);? ?? ?? ?? ?? ?? ?? ?? ? //向下清屏

displaymove(DIAN,4,1);? ?? ?? ?? ?? ?? ?? ?? ???//左跑馬 “電氣工程”

displayS(2);

displaymovetb(1,0,4,2);? ?? ?? ?? ?? ?? ?? ?? ?//向下卷簾清屏

displayXNKL();? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//由左往右顯示‘老師們好’

displayS(2);

displaymove(0,4,2);? ?? ?? ?? ?? ?? ???//左跑馬清屏

displaymovetb(1,BEI,4,3);? ?? ?? ?? ?//向下顯示 “北京時間”

displayS(2);

displaymovetb(0,el,4,1);

displayS(2);

displaymovetb(1,lw,4,2);

displayS(2);

displaymove(xie,4,1);

displayS(3);

displaymovetb(1,0,4,3);? ?? ?? ?? ?? ?? ?? ?? ?//向下清屏

displaytu_an();

displayS(2);

/*displaymovetb(1,0,4,1);

displaynyr();? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//顯示****年**月**日

displayshijian();? ?? ?? ?? ?? ?? ?? ?? ?? ? //調用顯示**點**分 時間函數

displayS(4000);*/

}

}

/********************** 主函數 *************************************/

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();

}

}

}

總結

以上是生活随笔為你收集整理的led16*16点阵实验c语言,基于单片机的64*16LED点阵电子显示屏设计 pcb图+原理图+源程序...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久久免费软件 | a天堂视频| av永久免费观看 | 久久久看 | 久久爱资源网 | 一级特黄录像免费看 | 人人干人人爽 | 九九九九九伊人 | 精品黄网| 国产在线精品一区二区 | 国语对白在线观看 | 欧美美女在线观看 | 国产精品人人爽人人爽 | 日韩九九九 | 三级中文字幕在线 | www.蜜臀av.com | 欧美第一页草草影院 | 色撸撸av | 日产久久久久久 | 黑人毛片网站 | 亚洲av成人无码久久精品老人 | 亚洲第一页视频 | 亚洲综合福利 | 午夜不卡福利视频 | 13日本xxxxxⅹxxx20 | 成人在线播放视频 | 久久国产中文字幕 | 中文字幕一区二区三区乱码在线 | 一级黄色片在线 | 亚洲精品国产综合 | 网友自拍av| 人人艹人人 | 日韩激情中文字幕 | 插插插综合 | 天堂av亚洲 | 日狠狠| 国产精品成人电影在线观看 | 亚洲逼院 | 色就是欧美 | 女人和拘做爰正片视频 | 黄色av大片 | 丰满少妇xoxoxo视频 | 777奇米色 | 免费人妻精品一区二区三区 | 国产综合视频 | 艳妇乳肉豪妇荡乳 | 日本中文字幕成人 | 欧美精品人妻一区二区 | 国产精品久久久久久久天堂 | 小柔的淫辱日记(1~7) | 在线色综合 | 91亚色在线观看 | 成年激情网 | a天堂在线视频 | 99人妻碰碰碰久久久久禁片 | 亚洲成人第一 | 欧美精品免费看 | 夜夜骑夜夜 | 精品一区二区三区日韩 | 日本三级一区二区三区 | 蜜桃麻豆视频 | 黄色a一级片 | 伊人婷婷久久 | 亚洲一区二区精品视频 | 中文成人在线 | 国产成人午夜精华液 | 亚洲av无码精品色午夜 | 中文字幕一区二区久久人妻 | 精品国产不卡 | 麻豆tv在线观看 | 国产精品久久久国产盗摄 | 午夜精产品一区二区在线观看的 | 五月天av网站| 久久久久久人妻一区二区三区 | 色女仆影院 | youjizz韩国| 91精品国产一区二区在线观看 | 成人午夜免费视频 | 韩国禁欲系高级感电影 | 99精品视频一区二区三区 | 亚洲老老头同性老头交j | 国产拍拍视频 | 久草成人| 性做久久久久久久免费看 | 性感美女视频一二三 | 国产精品无码粉嫩小泬 | 欧美国产日韩在线观看成人 | 色综合天| 黄瓜视频在线观看污 | 中文字幕在线乱 | 久久激情免费视频 | 少妇毛片一区二区三区粉嫩av | 欧美福利网站 | 69色堂 | 女人扒开腿让男人捅爽 | 美女扒开腿让人桶爽原神 | 91精品毛片 | 欧美精品二区三区四区免费看视频 | 欧美视频在线播放 |