?? zlg7289.c
字號:
/*ZLG7289.c
數(shù)碼管顯示與鍵盤管理芯片ZLG7289 的MSP430驅(qū)動程序(C430)
Copyright (c) 2005,廣州周立功單片機發(fā)展有限公司
All rights reserved.
本程序僅供學習參考,不提供任何可靠性方面的擔保;請勿用于商業(yè)目的。
*/
#include "ZLG7289.h"
//定義一個全局變量,用于延時
//該變量在調(diào)用函數(shù)ZLG7289_Init()時被初始化
unsigned char ZLG7289_Delay_t;
/*宏定義:ZLG7289_ShortDelay()
功能:短延時
說明:延時(ZLG7289_Delay_t*2+2)個機器周期*/
extern void ZLG7289_ShortDelay()
{
unsigned char t;
t = ZLG7289_Delay_t;
while ( --t != 0 );
}
/*宏定義:ZLG7289_LongDelay()
功能:長延時
說明:延時(ZLG7289_Delay_t*12+8)個機器周期*/
extern void ZLG7289_LongDelay()
{
unsigned char t;
t = ZLG7289_Delay_t * 6;
while ( --t != 0 );
}
/*
函數(shù):ZLG7289_SPI_Write()
功能:向SPI 總線寫入1 個字節(jié)的數(shù)據(jù)
參數(shù):
dat:要寫入的數(shù)據(jù)
*/
void ZLG7289_SPI_Write(unsigned char dat)
{
unsigned char t = 8;
do
{
if (((dat & 0x80)>>7) == 1)
{
SETDAT;
}
else CLRDAT;
dat <<= 1;
SETCLK;
ZLG7289_ShortDelay();
CLRCLK;
ZLG7289_ShortDelay();
} while ( --t != 0 );
}
/*函數(shù):ZLG7289_SPI_Read()
功能:從SPI 總線讀取1 個字節(jié)的數(shù)據(jù)
返回:
讀取到的數(shù)據(jù)*/
unsigned char ZLG7289_SPI_Read(void)
{
unsigned char dat;
unsigned char t = 8;
DATA_IN; //讀取數(shù)據(jù)之前DIO 引腳要切換到輸入狀態(tài)
do
{
SETCLK;
ZLG7289_ShortDelay();
dat <<= 1;
if ( !(DATA_0) ) dat++;
CLRCLK;
ZLG7289_ShortDelay();
} while ( --t != 0 );
DATA_OUT;
return dat;
}
/*
函數(shù):ZLG7289_cmd()
功能:執(zhí)行ZLG7289 純指令
參數(shù):
cmd:命令字
*/
void ZLG7289_cmd(unsigned char cmd)
{
CLRCS;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
SETCS;
ZLG7289_LongDelay();
}
/*
函數(shù):ZLG7289_cmd_dat()
功能:執(zhí)行ZLG7289 帶數(shù)據(jù)指令
參數(shù):
cmd:命令字
dat:數(shù)據(jù)
*/
void ZLG7289_cmd_dat(unsigned char cmd, unsigned char dat)
{
CLRCS;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(cmd);
ZLG7289_LongDelay();
ZLG7289_SPI_Write(dat);
SETCS;
ZLG7289_LongDelay();
}
/*
函數(shù):ZLG7289_Show()
功能:在指定位顯示指定段碼
參數(shù):
add:數(shù)碼管編號(橫坐標),取值0~7
coding=0:下載數(shù)據(jù)且按方式0 譯碼
coding=1:下載數(shù)據(jù)且按方式1 譯碼
coding=2:下載數(shù)據(jù)但不譯碼
d:要顯示的數(shù)據(jù)
dp=0:小數(shù)點不亮
dp=1:小數(shù)點亮
說明:
譯碼方式的具體含義請參考數(shù)據(jù)手冊
*/
void ZLG7289_Show(unsigned char add,unsigned char coding,unsigned char d,unsigned char dp)
{
unsigned char ModDat[3] = {0x80,0xC8,0x90};
unsigned char d1;
unsigned char d2;
if ( coding > 2 ) coding = 2;
d1 = ModDat[coding];
add &= 0x07;
d1 |= add;
d2 = d & 0x7F;
if ( dp ) d2 |= 0x80;
ZLG7289_cmd_dat(d1,d2);
}
/*----閃爍控制----*/
void ZLG7289_Flash(unsigned char led)
{ ZLG7289_cmd_dat(0x88,led);
}
/*----消隱控制----*/
void ZLG7289_Stash(unsigned char led)
{ ZLG7289_cmd_dat(0x98,led);
}
/*----段點亮控制----*/
void ZLG7289_Light(unsigned char led)
{ ZLG7289_cmd_dat(0xE0,led);
}
/*----段關閉控制----*/
void ZLG7289_Close(unsigned char led)
{ ZLG7289_cmd_dat(0xC0,led);
}
/*
功能:執(zhí)行ZLG7289 鍵盤命令
返回:
返回讀到的按鍵值:0~63
如果返回0xFF 則表示沒有鍵按下
*/
unsigned char ZLG7289_ReadKey(void)
{
unsigned char key;
CLRCS;
ZLG7289_LongDelay();
ZLG7289_SPI_Write(0x15);
ZLG7289_LongDelay();
key = ZLG7289_SPI_Read();
SETCS;
ZLG7289_LongDelay();
return key;
}
/*
函數(shù):ZLG7289_Init()
功能:ZLG7289 初始化
參數(shù):
t:SPI 總線的延時值設置,取值1-40(超出范圍可能導致錯誤)
說明:
t的取值可以參照以下公式:t >= 5 * f1 / f2,其中f1 表示80C51 的
晶振頻率,f2 表示ZLG7289 的晶振頻率
*/
void ZLG7289_Init(void)
{
unsigned char x;
//I/O 口初始化
SETCS;
CLRCLK;
SETDAT;
//延時初始化
ZLG7289_Delay_t = TIMEINIT;
//點亮所有數(shù)碼管
for ( x=0; x<8; x++ )
{
ZLG7289_Show(x,1,8,1);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -