?? main.c
字號(hào):
/*
main.c
16×16 LED點(diǎn)陣的掃描顯示:滾動(dòng)顯示文字
*/
#include "Zimo.h"
#include <reg51.h>
#include <ctype.h>
//設(shè)置屏幕滾動(dòng)速度(單位:×10ms)
#define SCROLL_SPEED 15
//定義I/O端口
sbit STR = P1^3; //74HC595存儲(chǔ)寄存器時(shí)鐘(Storage register clock)
sbit SI = P1^4; //74HC595串行輸入信號(hào)(Serial Input)
sbit SCK = P1^5; //74HC595移位寄存器時(shí)鐘(Shift register clock)
//定義顯示緩沖區(qū)(在T1定時(shí)中斷里掃描)
unsigned char data DispBuf[32];
/*
函數(shù):SysInit()
功能:系統(tǒng)初始化
*/
void SysInit()
{
unsigned char i;
for ( i=0; i<32; i++ )
{
DispBuf[i] = 0x00;
}
STR = 1;
SI = 0;
SCK = 0;
TMOD &= 0xF0;
TMOD |= 0x01;
TMOD &= 0x0F;
TMOD |= 0x10;
TH1 = 0xFC;
TL1 = 0x66;
TR1 = 1;
ET1 = 1;
EA = 1;
}
/*
函數(shù):Delay()
功能:延時(shí)10ms~2.56s
參數(shù):
t>0時(shí),延時(shí)(t*10)ms
t=0時(shí),延時(shí)2.56s
*/
void Delay(unsigned char t)
{
do
{
TH0 = 0xDC;
TL0 = 0x66;
TR0 = 1;
while ( !TF0 );
TR0 = 0;
TF0 = 0;
}while ( --t != 0 );
}
/*
函數(shù):PutChar()
功能:滾動(dòng)顯示一個(gè)字母或漢字
參數(shù):
c:字母或漢字的編碼
當(dāng)c>=0x80時(shí),視為一個(gè)漢字
*/
void PutChar(unsigned char c)
{
unsigned int a; //地址變量
unsigned char i,j; //循環(huán)變量
unsigned char t; //臨時(shí)變量
unsigned char code *Tab; //指針,用于查表
t = 8;
if ( c >= 0x80 ) //如果c是漢字
{
t = 16;
a = 32 * ( c - 0x80 );
Tab = HanziTab;
}
else if ( isupper(c) ) //如果c是大寫字母
{
a = 16 * ( c - 'A' );
Tab = UpperTab;
}
else if ( islower(c) ) //如果c是小寫字母
{
a = 16 * ( c - 'a' );
Tab = LowerTab;
}
else //如果是其它字符
{
return;
}
for ( j=0; j<t; j++ )
{
for ( i=0; i<15; i++ )
{
DispBuf[i] = DispBuf[i+1];
DispBuf[16+i] = DispBuf[17+i];
}
DispBuf[i] = Tab[a+j];
DispBuf[16+i] = Tab[a+j+t];
Delay(SCROLL_SPEED);
}
}
/*
函數(shù):PutStr()
功能:滾動(dòng)顯示一個(gè)文字串
參數(shù):
*str:以'\0'結(jié)尾的文字串
*str可以同時(shí)包含字母和漢字,其中漢字必須是小漢字庫內(nèi)的漢字
*/
void PutStr(unsigned char code *str)
{
unsigned char c;
for (;;)
{
c = *str++;
if ( c == '\0' ) break;
PutChar(c);
}
}
/*
函數(shù):T1INTSVC()
功能:T1中斷服務(wù)函數(shù)
*/
void T1INTSVC() interrupt 3 using 2
{
code unsigned char Tab[] =
{//定義掃描數(shù)據(jù)表
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
static unsigned char n = 0; //局部靜態(tài)變量,用于查表
unsigned char i,j; //循環(huán)變量
unsigned char d; //臨時(shí)變量
unsigned char data buf[4]; //臨時(shí)數(shù)組,用于向74HC595發(fā)送數(shù)據(jù)
//處理定時(shí)器T1
TR1 = 0;
TH1 = 0xFC;
TL1 = 0x66;
TR1 = 1;
//查表,取得要發(fā)送的數(shù)據(jù)
buf[0] = Tab[n];
buf[1] = Tab[16+n];
buf[2] = DispBuf[16+n];
buf[3] = DispBuf[n];
n++;
n &= 0x0F;
//向74HC595發(fā)送數(shù)據(jù)
STR = 0;
for ( i=0; i<4; i++ )
{
d = buf[i];
j = 8;
do
{
SI = (bit)(d & 0x01);
SCK = 1;
d >>= 1;
SCK = 0;
} while ( --j != 0 );
}
STR = 1;
}
void main()
{
//定義文字串
code unsigned char s[] =
{
0x81, //歡
0x82, //迎
0x83, //使
0x84, //用
'S','m','a','r','t','S','O','P','C',
0x85, //教
0x86, //學(xué)
0x87, //實(shí)
0x88, //驗(yàn)
0x89, //開
0x8A, //發(fā)
0x8B, //平
0x8C, //臺(tái)
0x80, // (全角空白)
'\0'
};
SysInit();
for (;;)
{
PutStr(s);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -