?? zlg.h
字號:
#ifndef ZLG_H
#define ZLG_H
#define ZLG7289_Reset() ZLG7289_cmd(0xA4)
sbit ZLG7289_pinCS = P1^0; //片選信號,低電平有效
sbit ZLG7289_pinCLK = P1^1; //時鐘信號,上升沿有效
sbit ZLG7289_pinDIO = P1^2; //數據信號,雙向
sbit ZLG7289_pinINT = P3^2; //鍵盤中斷請求信號,低電平(負邊沿)有效
unsigned char ZLG7289_Delay_t;
/*
宏定義:ZLG7289_ShortDelay()
功能:短延時
說明:延時(ZLG7289_Delay_t*2+2)個機器周期
*/
void ZLG7289_ShortDelay()
{
unsigned char t = ZLG7289_Delay_t;
while ( --t != 0 );
}
/*
宏定義:ZLG7289_LongDelay()
功能:長延時
說明:延時(ZLG7289_Delay_t*12+8)個機器周期
*/
void ZLG7289_LongDelay()
{
unsigned char t = ZLG7289_Delay_t * 6;
while ( --t != 0 );
}
/*
函數:ZLG7289_SPI_Write()
功能:向SPI 總線寫入1 個字節的數據
參數:
dat:要寫入的數據
*/
void ZLG7289_SPI_Write(char dat) reentrant
{
unsigned char t = 8;
do
{
ZLG7289_pinDIO = (bit)(dat & 0x80);
dat <<= 1;
ZLG7289_pinCLK = 1;
ZLG7289_ShortDelay();
ZLG7289_pinCLK = 0;
ZLG7289_ShortDelay();
} while ( --t != 0 );
}
/*
函數:ZLG7289_SPI_Read()
功能:從SPI 總線讀取1 個字節的數據
返回:
讀取到的數據
*/
char ZLG7289_SPI_Read() reentrant
{
char dat;
unsigned char t = 8;
ZLG7289_pinDIO = 1; //讀取數據之前DIO 引腳要置1 以切換到輸入狀態
do
{
ZLG7289_pinCLK = 1;
ZLG7289_ShortDelay();
dat <<= 1;
if ( ZLG7289_pinDIO ) dat++;
ZLG7289_pinCLK = 0;
ZLG7289_ShortDelay();
} while ( --t != 0 );
return dat;
}
/*
函數:ZLG7289_cmd()
功能:執行ZLG7289 純指令
參數:
cmd:命令字
*/
void ZLG7289_cmd(char cmd)
{
char sav = IE;
IE &= 0xFA; //關閉外部中斷
ZLG7289_pinCS = 0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
IE = sav; //恢復IE
}
/*
函數:ZLG7289_cmd_dat()
功能:執行ZLG7289 帶數據指令
參數:
cmd:命令字
dat:數據
*/
void ZLG7289_cmd_dat(char cmd, char dat)
{
char sav = IE;
IE &= 0xFA; //關閉外部中斷
ZLG7289_pinCS = 0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_LongDelay();
ZLG7289_SPI_Write(dat);
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
IE = sav; //恢復IE
}
/*
函數:ZLG7289_Download()
功能:下載數據
參數:
mod=0:下載數據且按方式0 譯碼
mod=1:下載數據且按方式1 譯碼
mod=2:下載數據但不譯碼
x:數碼管編號(橫坐標),取值0~7
dp=0:小數點不亮
廣州周立功單片機發展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
22
dp=1:小數點亮
dat:要顯示的數據
說明:
譯碼方式的具體含義請參考數據手冊
*/
void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat)
{
code char ModDat[3] = {0x80,0xC8,0x90};
char d1;
char d2;
if ( mod > 2 ) mod = 2;
d1 = ModDat[mod];
x &= 0x07;
d1 |= x;
d2 = dat & 0x7F;
if ( dp ) d2 |= 0x80;
ZLG7289_cmd_dat(d1,d2);
}
/*
功能:執行ZLG7289 鍵盤命令
返回:
返回讀到的按鍵值:0~63
如果返回0xFF 則表示沒有鍵按下
*/
char ZLG7289_Key() reentrant
{
char key;
ZLG7289_pinCS = 0;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(0x15);
ZLG7289_LongDelay();
key = ZLG7289_SPI_Read();
ZLG7289_pinCS = 1;
ZLG7289_LongDelay();
return key;
}
/*
函數:ZLG7289_Init()
功能:ZLG7289 初始化
參數:
廣州周立功單片機發展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
23
t:SPI 總線的延時值設置,取值1-40(超出范圍可能導致錯誤)
說明:
t的取值可以參照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
晶振頻率,f2 表示ZLG7289 的晶振頻率
*/
void ZLG7289_Init(unsigned char t)
{
//I/O 口初始化
ZLG7289_pinCS = 1;
ZLG7289_pinCLK = 0;
ZLG7289_pinDIO = 1;
ZLG7289_pinINT = 1;
//延時初始化
ZLG7289_Delay_t = t;
//點亮所有數碼管
// for ( x=0; x<8; x++ )
// {
// ZLG7289_Download(1,x,1,8);
// }
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -