實(shí)驗(yàn)四 萬年歷時(shí)鐘實(shí)驗(yàn)_第1頁
實(shí)驗(yàn)四 萬年歷時(shí)鐘實(shí)驗(yàn)_第2頁
實(shí)驗(yàn)四 萬年歷時(shí)鐘實(shí)驗(yàn)_第3頁
實(shí)驗(yàn)四 萬年歷時(shí)鐘實(shí)驗(yàn)_第4頁
實(shí)驗(yàn)四 萬年歷時(shí)鐘實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)驗(yàn)四萬年歷時(shí)鐘實(shí)驗(yàn)

一、實(shí)驗(yàn)?zāi)康?/p>

進(jìn)行一次實(shí)際開發(fā)的實(shí)驗(yàn),提高用戶實(shí)際開發(fā)能力。

二、實(shí)驗(yàn)設(shè)備及器件

IBMPC機(jī)一臺(tái)

DP-51PR0C單片機(jī)綜合仿真實(shí)驗(yàn)儀一臺(tái)

三、實(shí)驗(yàn)內(nèi)容

結(jié)合12c總線控制的實(shí)時(shí)時(shí)鐘、ZLG7290犍盤LED控制器進(jìn)行萬年歷時(shí)鐘的設(shè)

計(jì)。

四、實(shí)驗(yàn)要求

熟練掌握12c總線控制,靈活運(yùn)用12c主控器軟件包,深刻理解實(shí)時(shí)時(shí)鐘、

ZLG7290鍵盤LED控制的各種功能,并能把它們相結(jié)合,組成具有實(shí)際功能的

萬年歷時(shí)鐘。

五、實(shí)驗(yàn)步驟

1、用導(dǎo)線連接D5區(qū)的SCL、SDA至!JA2區(qū)的P16、P17,連接D5區(qū)的RST_L、

INT_KEYA2區(qū)的PIO、INTO,短接D5區(qū)JP1跳線。

2、用串口通信電纜連接TKSMonitor51仿真器的RS-232串行通信口,另一端連

接PC機(jī)的串行口,把TKSMonitor51仿真器上的開關(guān)撥到LOAD模式,即下載

狀態(tài)下,用戶應(yīng)將TKSMonitor51仿真器的仿真頭插入DP-51PROC單片機(jī)綜合

仿真實(shí)驗(yàn)儀的U13鎖緊座上;然后ISP跳線JP14跳開(即不短接),按下復(fù)位

按鍵“RESET"。此時(shí),DP-51PROC單片機(jī)綜合仿真實(shí)驗(yàn)儀即進(jìn)入下載狀態(tài)。對

DP-51PROC實(shí)驗(yàn)儀上電,然后,使用軟件DPFLASH把M0N51監(jiān)控程序下載

到TKSMonitor5仿真器。

3、關(guān)閉DPFLASH軟件。把TKSMonitor5仿真器的工作模式選擇開關(guān)切換到RUN

處,然后按一下復(fù)位鍵(RST),M0N51程序就開始運(yùn)行了。此時(shí),TKSMonitor5

仿真器進(jìn)入調(diào)試狀態(tài)。

4、新建工程文件和文件的編譯、鏈接

(一)新建工程文件

1)打開"keiluvision2”軟件,點(diǎn)擊工具欄Project選項(xiàng),在下拉菜單中選擇New

Project命令,彈出項(xiàng)目文件保存對話框,輸入項(xiàng)目名后,點(diǎn)擊保存按鈕。

2)在工程建立完畢以后,uVision會(huì)彈出器件選擇窗口,選擇相應(yīng)的器件型號(hào)。

例如:philips公司的p80/p87c52x2型單片機(jī)。

3)點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入實(shí)時(shí)時(shí)鐘程序,源程

序見附錄1(實(shí)時(shí)時(shí)鐘參考程序),把文件保存到磁盤中,保存文件名為:timer.c

4)再點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入12c軟件包

“VnC_C5LC”文件,源程序見附錄2,把文件保存到磁盤中,保存文件名為:

VIIC_C51.C;

5)再點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入ZLG7290軟件包

“ZLG7290.C”文件,源程序見附錄3,把文件保存到磁盤中,保存文件名為:

ZLG7290.C;

6)再點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入VIIC_C51.H頭文

件,源程序見附錄4,把文件保存到磁盤中,保存文件名為:VIIC_C51.H;

7)再點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入ZLG7290.H頭文

件,源程序見附錄5,把文件保存到磁盤中,保存文件名為:ZLG7290.H;

8)再點(diǎn)擊工具欄File選項(xiàng),選中New命令,新建文件,輸入系統(tǒng)配置文件

"STARTUP.A51"文件(其主要功能是:定義數(shù)據(jù)段、程序段和堆棧的大小及

其起始地址、RAM的初始化、程序重新定位、初始化啟動(dòng)代碼等),源程序見附

錄6,把文件保存到磁盤中,保存文件名為:STARTUP.A51;

9)添加該文件到工程中,在Projectwindos窗口內(nèi),選中SourceGroup1然后點(diǎn)

擊鼠標(biāo)右鍵,選擇AddfilestoGroup"SourceGroupr\選擇timer.c>VIIC_C51.C、

ZLG7290.C和STARTUP.A51,單擊Add按鈕。

(-)程序文件的編譯、鏈接

1)編譯連接環(huán)境設(shè)置

A、點(diǎn)擊菜單欄上的Project項(xiàng),選擇Optionfortarget,targets將出現(xiàn)調(diào)試環(huán)境設(shè)

置界面。

B、Target屬性的設(shè)置,設(shè)置Off-ChipCodeMemory欄內(nèi)的Eprom選項(xiàng),start下

輸入0x8000,size下輸入0x4000;Off-ChipXdatamemory欄內(nèi)的Eprom選項(xiàng),

start下輸入OxCOOO,size下輸入0x4000。

C、點(diǎn)擊Output選項(xiàng)卡在出現(xiàn)的窗口中選中CreateHEXfile選項(xiàng)。

D、點(diǎn)擊C51選項(xiàng)卡,勾上“Interruptvectorsata”并把0x000改為"0x8000”

E、Debug環(huán)境的設(shè)置,選擇Use選項(xiàng),勾上"loadapplicationatsta"和"gotill

main”,然后單擊Settings項(xiàng),彈出TargetSetup對話框,Port中選擇與電腦連接

的串口,然后確定。

2)程序的編譯、連接

點(diǎn)擊工具欄Project選項(xiàng),選中BuildTarget命令,選中RebuildAllTargetFile命

令對所有的工程文件進(jìn)行重新編譯,此時(shí)“OutputWindows”信息輸出窗口輸出

一些相關(guān)信息,直至編譯鏈接成功。

5、工程文件的仿真調(diào)試

1)點(diǎn)擊菜單欄的"debug”選項(xiàng),在彈出的下拉菜單中執(zhí)行"start/stopdebug

session”;

2)點(diǎn)擊菜單欄的“debug”選項(xiàng),在彈出的下拉菜單中執(zhí)行“go”;

3)點(diǎn)擊菜單欄的“debug”選項(xiàng),在彈出的下拉菜單中執(zhí)行“go”。

六、實(shí)驗(yàn)思考題

1、如果斷電還能不丟失時(shí)間應(yīng)該做哪些措施;

2、如果要降低功耗,軟件設(shè)計(jì)時(shí)應(yīng)做哪些措施。

(做完實(shí)驗(yàn)后,資料要還給指導(dǎo)老師)

附錄1實(shí)時(shí)時(shí)鐘參考程序:timer.c

#include,'reg52.hM

include癡IiC_C51H7/包含VI2C軟件包

includenzlg7290.hu

#definePCF85630xA2〃定義器件地址

#defineWRADDR0x00〃定義寫單元首地址

#defineRDADDR0x02〃定義讀單元首地址

sbitKEYJNT=P3A2;

sbitRST=P1AO;

unsignedchardisp_buff8]={0,0,0,0,0,0,0,0};//^^^;S

unsignedcharKEY;〃保存鍵值

bitswich_date=0;

unsignedchardisplay_time(unsignedchar*sd)

sd[0]=sd[0]&0x7f;〃秒屏蔽保留位

sd[l]=sd[l]&0x7f;〃分屏蔽保留位

sd[2]=sd[2]&0x3f;〃時(shí)屏蔽保留位

disp_buf[0]=(sd[0]%16);

disp_buf[l]=(sd[0]/16);

disp_buf[2]=31;

disp_buf[3]=(sd[l]%16);

disp_buf[4]=(sd[l]/16);

disp_buf[5]=31;

disp_buf⑹=(sM2]%16);

disp_buf[7]=(sd[2]/16);

ZLG7290_SendBuf(disp_buf,8);

return0;

)

unsignedchardisplay_date(unsignedchar*sd)

(

sd[0]=sd[0]&0x3f;〃日屏蔽保留位

sd[2]=sd[2]&0x1f;〃月屏蔽保留位

disp_buf[0]=(sd[0]%16);

disp_buf[1]=(sd[0J/16);

disp_buf⑵=(sd0%16)+Ox8O;〃后面加小數(shù)點(diǎn)

disp_buf[3]=(sd[2]/16);

disp_buf[4]=(sd[3]%16)+0x80;〃后面力U小數(shù)點(diǎn)

disp_buf[5]=(sd[3]/16);

disp_buf[6]=0;

disp_buf[7]=2;

ZLG7290_SendBuf(disp_buf,8);

return0;

)

unsignedcharDelayNS(unsignedcharno)

(

unsignedcharij;〃延時(shí)參數(shù)

for(;no>0;no-)

for(i=0;i<100;i++)

for(j=0;j<100;j++);

return0;

)

voidmain()

(

unsignedcharcodetd[9]={0x00,0x12,0x00,0x30,Ox12,0x06,0x05,0x02,0x04};〃定義初始

化字

unsignedcharrd[7];〃定義接收緩沖區(qū)

RST=0;

DelayNS(l);

RST=1;

ISendStr(PCF8563,WRADDR,td,0x5);〃初始化PCF8563,如果需要的話可以不去掉

DelayNS(l);

ISendStr(PCF8563,WRADDR+5,&td[5],0x4);〃初始化PCF8563,如果需要的話可以不去掉

while(l)

(

DelayNS(l);

IRcvStr(PCF8563,RDADDR,rd,0x7);〃讀現(xiàn)在的時(shí)、分、秒

DelayNS(l);

if(swich_date)

display_date(rd+3);〃調(diào)顯示日期子程序

else

display_time(rd);〃調(diào)顯示時(shí)間子程序

if(KEYJNT==0)

(

KEY=ZLG7290_GetKey();

if(KEY==l)

swich_date=-swich_date;

)

timer.c完畢*/

附錄2I2C軟件包“VHC_C51.C”文件參考程序:

VIIC_C51.C

此程序是12c操作平臺(tái)(主方式的軟件平臺(tái))的底層的C子程序,如發(fā)送數(shù)據(jù)

及接收數(shù)據(jù),應(yīng)答位發(fā)送,并提供了幾個(gè)直接面對器件的操作函數(shù),它很方便的

與用戶程序連接并擴(kuò)展..…

注意:函數(shù)是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖,固對高晶振頻率要作

一定的修改.…(本例是lus機(jī)器周期,即晶振頻率要小于12MHZ)

#include<reg52.h>/*頭文件的包含*/

#include<intrins.h>

#defineucharunsignedchar/*宏定義*/

#defineuintunsignedint

#define_Nop()_nop_()/*定義空指令*/

/*常,變量定義區(qū)*/

/*端口位定義*/

sbitSDA=P”7;/*模擬I2C數(shù)據(jù)傳送位*/

sbitSCL=P1A6;/*模擬I2C時(shí)鐘控制位*/

/*狀態(tài)標(biāo)志*/

bitack;/*應(yīng)答標(biāo)志位*/

起動(dòng)總線函數(shù)

函數(shù)原型:voidStart_I2c();

功能:啟動(dòng)12c總線,即發(fā)送I2C起始條件.

voidStart_I2c()

SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/

_Nop();

SCL=1;

_Nop();/*起始條件建立時(shí)間大于4.7us,延時(shí)*/

_Nop();

_Nop();

_Nop();

_Nop();

SDA=O;/*發(fā)送起始信號(hào)*/

_Nop();/*起始條件鎖定時(shí)間大于4口s*/

_Nop();

_Nop();

_Nop();

_Nop();

SCL=O;/*鉗住12c總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/

_Nop();

_Nop();

)

結(jié)束總線函數(shù)

函數(shù)原型:voidStop」2c();

功能:結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.

voidStop_I2c()

SDA=O;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/

_Nop();/*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/

SCL=1;/*結(jié)束條件建立時(shí)間大于4us*/

_Nop();

_Nop();

_Nop();

_Nop();

_Nop();

SDA=1;/*發(fā)送12c總線結(jié)束信號(hào)*/

_Nop();

_Nop();

_Nop();

_Nop();

字節(jié)數(shù)據(jù)傳送函數(shù)

函數(shù)原型:voidSendByte(ucharc);

功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對

此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0假)

發(fā)送數(shù)據(jù)正常,ack=l;ack=0表示被控器無應(yīng)答或損壞。

voidSendByte(ucharc)

ucharBitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長度為8位*/

{

if((c?BitCnt)&0x80)SDA=1;/*判斷發(fā)送位*/

elseSDA=O;

_Nop();

SCL=1;/*置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位*/

_Nop();

_Nop();/*保證時(shí)鐘高電平周期大于4us*Z

_Nop();

_Nop();

_Nop();

SCL=O;

)

_Nop();

_Nop();

SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/

_Nop();

_Nop();

SCL=1;

_Nop();

_Nop();

_Nop();

if(SDA==l)ack=O;

elseack=l;/*判斷是否接收到應(yīng)答信號(hào)*/

SCL=O;

_Nop();

_Nop();

)

字節(jié)數(shù)據(jù)傳送函數(shù)

函數(shù)原型:ucharRcvByte();

功能:用來接收從器件傳來的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),

發(fā)完后請用應(yīng)答函數(shù)。

ucharRcvByte()

ucharretc;

ucharBitCnt;

retc=O;

SDA=1;/*置數(shù)據(jù)線為輸入方式*/

for(BitCnt=0;BitCnt<8;BitCnt++)

_Nop();

SCL=O;/*置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/

_Nop();

_Nop();/*時(shí)鐘低電平周期大于4.7us*/

_Nop();

_Nop();

_Nop();

SCL=1;/*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/

_Nop();

_Nop();

retc=retc?l;

if(SDA==l)retc=retc+l;/*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入relc中*/

_Nop();

_Nop();

)

SCL=O;

_Nop();

_Nop();

return(retc);

應(yīng)答子函數(shù)

原型:voidAck_I2c(bita);

功能:主控器進(jìn)行應(yīng)答信號(hào),(可以是應(yīng)答或非應(yīng)答信號(hào))

voidAck_I2c(bita)

if(a==0)SDA=0;/*在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)*/

elseSDA=1;

_Nop();

_Nop();

_Nop();

SCL=1;

_Nop();

_Nop();/*時(shí)鐘低電平周期大于4us*/

_Nop();

_Nop();

_Nop();

SCL=0;/*清時(shí)鐘線,鉗住12c總線以便繼續(xù)接收*/

_Nop();

_Nop();

向無子地址器件發(fā)送字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitISendByte(ucharsla,ucahrc);

功能:從啟動(dòng)總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.

如果返回1表示操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線。

bitISendByte(ucharsla,ucharc)

Start」2c();/*啟動(dòng)總線*/

SendByte(sla);/*發(fā)送器件地址*/

if(ack==O)return(O);

SendByte(c);/*發(fā)送數(shù)據(jù)*/

if(ack==0)retum(0);

Stop_I2c();/*結(jié)束總線*/

relurn(l);

向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);

功能:從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件

地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。

如果返回1表示操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線。

bitISendStr(ucharsla,ucharsuba,uchar*s,ucharno)

uchari;

Start_I2c();/*啟動(dòng)總線*/

SendByte(sla);/*發(fā)送器件地址*/

if(ack==O)return(O);

SendByte(suba);/*發(fā)送器件子地址*/

if(ack==O)return(O);

for(i=0;i<no;i++)

SendByte(*s);/*發(fā)送數(shù)據(jù)*/

if(ack==O)return(O);

s++;

)

Stop_I2c();/*結(jié)束總線*/

relum(l);

向無子地址器件讀字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitIRcvByte(ucharsla,ucahr*c);

功能:從啟動(dòng)總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地

址sla,返回值在c.

如果返回1表示操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線。

bitIRcvByte(ucharsla,uchar*c)

Start_I2c();/*啟動(dòng)總線*/

SendByte(sla+l);/*發(fā)送器件地址*/

if(ack==O)return(O);

*c=RcvByte();/*讀取數(shù)據(jù)*/

Ack_I2c(l);/*發(fā)送非就答位*/

Stop_I2c();/*結(jié)束總線*/

return(l);

向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)

函數(shù)原型:bitISendStr(ucharsla,ucharsuba,ucahr*s,ucharno);

功能:從啟動(dòng)總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件

地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),讀no個(gè)字節(jié)。

如果返回1表示操作成功,否則操作有誤。

注意:使用前必須已結(jié)束總線。

bitIRcvStr(ucharsla,ucharsuba,uchar*s,ucharno)

uchari;

Start_I2c();/*啟動(dòng)總線*/

SendByte(sla);/*發(fā)送器件地址*/

if(ack==O)return(O);

SendByte(suba);/*發(fā)送器件子地址*/

if(ack—O)return(O);

Starl_I2c();

SendByte(sla+l);

if(ack==O)return(O);

for(i=0;i<no-1;i++)

(

*s=RcvByte();/*發(fā)送數(shù)據(jù)*/

Ack_I2c(0);/*發(fā)送就答位*/

s++;

)

*s=RcvByte();

Ack_I2c(l);/*發(fā)送非應(yīng)位*/

Stop_I2c();/*結(jié)束總線*/

return(l);

)

/*完畢*/

/*12c軟件包“VIIC_C51.C”文件完畢*/

附錄3:ZLG7290軟件包“ZLG7290.C”文件參考程序:

廣州周立功單片機(jī)發(fā)展有限公司

研究所

產(chǎn)品一部

**文件信息-

**文件名:ZLG7290.C

**創(chuàng)建人:葉皓賁

**最后修改日期:2003-3-4

**描述:ZLG7290庫函數(shù)程序

**

**歷史版本信息——

**創(chuàng)建人:葉皓賁

**版本:0.01

**日期:2003-3-4

**描述:ZLG7290庫函數(shù)程序

**修改人:

**版本:

**日期:

**描述:

**

**當(dāng)前版本修訂

**修改人:

**日期:

**描述:

**_________________________________________________

include”REG52.h”

#includenviic_c51.hn

#definezlg72900x70//ZLG7290的IIC地址

#defineSubKey0x01

#defineSubCmdBuf0x07

#defineSubDpRam0x10

**函數(shù)名稱:DelayNS

**功能描述:長軟件延時(shí)

**輸入:i:延時(shí)參數(shù),值越大時(shí)延時(shí)越久

**

**輸出:無

**全局變量:無

**調(diào)用模塊:無

**

**作者:葉皓賁

**日期:200334

**_______________________________________________________________________

**修改人:

**日期:

**_______________________________________________________________________

voiddelayMS(unsignedchari)

(

unsignedcharj,k;

for(k=0;k<i;k++)

for(j=0;j<60;j++);

)

**函數(shù)名稱:ZLG7290_SendData

**功能描述:發(fā)送數(shù)據(jù)

**輸入:SubAdd:輸入數(shù)據(jù)

**DATA:輸入值

**

**輸出:0:Fail

**1:OK

**全局變量:無

**調(diào)用模塊:delayMS

**

**作者:葉皓賁

**日期:200334

**_______________________________________________________________________

**修改人:

**日期:

**_______________________________________________________________________

unsignedcharZLG7290_SendData(unsignedcharSubAdd,unsignedcharData)

(

if(SubAdd>0xl7)

return0;

ISendStr(zlg7290,SubAdd,&Data,1);

delayMS(10);

return1;

)

**函數(shù)名稱:ZLG7290_SendCmd

**功能描述:發(fā)送命令(對子地址7、8)

**輸入:DATA1:命令1

**DATA2:命令2

**輸出:0:Fail

**1:OK

**全局變量:無

**調(diào)用模塊:ISendStr、delayMS

**

**作者:葉皓賁

**日期:200334

**_______________________________________________________________________

**修改人:

**日期:

**_______________________________________________________________________

unsignedcharZLG7290_SendCmd(unsignedcharData1,unsignedcharData2)

(

unsignedcharData⑵;

Data[0]=Datal;

Data[l]=Data2;

ISendStr(zlg7290,0x07,Data,2);

delayMS(lO);

return1;

)

**函數(shù)名稱:ZLG7290_SendBuf

**功能描述:向顯示緩沖區(qū)發(fā)送數(shù)據(jù)

**輸入:*disp_buf:要發(fā)送數(shù)據(jù)的起始地址

**num:發(fā)送個(gè)數(shù)

**

**輸出:無

**全局變量:無

**調(diào)用模塊:ZLG7290_SendCmd

**

**作者:葉皓賁

**日期:2003-3-4

**修改人:

**日期:

**_______________________________________________________________________

voidZLG7290_SendBuf(unsignedchar*disp_buf,unsignedcharnum)

(

unsignedchari;

for(i=0;i<num;i++)

|

ZLG7290_SendCmd(0x60+i,*disp_buf);

disp_buf++;

}

)

**函數(shù)名稱:ZLG7290_GetKey

**功能描述:讀取鍵值

**輸入:無

**

**輸出:>0鍵值

**=0無鍵按下

**全局變量:無

**調(diào)用模塊:IRcvStr、delayMS

**作者:葉皓賁

**日期:2003-3-4

**_______________________________________________________________________

**修改人:

**日期:

**_______________________________________________________________________

unsignedcharZLG7290_GetKey()

(

unsignedcharrece;

rece=O;

IRcvStr(zlg7290,1,&rece,1);

delayMS(lO);

returnrece;

)

/*“ZLG7290.C”文件完畢*/

附錄4VIIC_C51.H頭文件參考程序:

頭文件名VHC_C51.H

這個(gè)頭文件對應(yīng)的庫是VIIC_C51.LIB,庫中有幾個(gè)模擬I2C的函數(shù),加入此文件

即可使用12c平臺(tái)(主方式的軟件平臺(tái)),函數(shù)是對LPC764的12c的I/O口實(shí)

現(xiàn),即其Pl.3(SDA),P1.2(SCL),51系列機(jī)型可以通用.

注意:函數(shù)是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖,固對高晶振頻率要作

一定的修改(本例是lus機(jī)器周期,即晶振頻率要小于12MHZ).

(函數(shù)的使用可參考給出的事例程序.)

#ifdefuchar

#defineREADYDEF1/*宏uchar已定義*/

#else

#defineucharunsignedchar

#endif

無子地址發(fā)送字節(jié)數(shù)據(jù)函數(shù)

功能:從啟動(dòng)總線到發(fā)送地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla.

如果返回1表示操作成功,否則操作有誤。

externbitISendByte(ucharsla,ucharc);

有子地址發(fā)送多字節(jié)數(shù)據(jù)函數(shù)

功能:從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件

地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。

如果返回1表示操作成功,否則操作有誤。

externbitISendStr(ucharsla,ucharsuba,uchar*s,ucharno);

無子地址讀字節(jié)數(shù)據(jù)函數(shù)

功能:從啟動(dòng)總線到發(fā)送地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地

址sla,返回值在c.

如果返回1表示操作成功,否則操作有誤。

externbitIRcvByte(ucharsla,uchar*c);

有子地址讀取多字節(jié)數(shù)據(jù)函數(shù)

功能:從啟動(dòng)總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件

地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),讀no個(gè)字節(jié)。

如果返回1表示操作成功,否則操作有誤。

externbitIRcvStr(ucharsla,ucharsuba,uchar*s,ucharno);

#ifndefREADYDEF

#undefuchar

#endif

/**********************-①仍,夕VIIC_C51.H結(jié)束*********/

附錄5ZLG7290.H頭文件參考程序:

頭文件名ZLG7290.H

externunsignedcharZLG7290_SendData(unsignedcharSubAdd,unsignedcharData);

externvoidZLG7290_SendBuf(unsignedchar*disp_buf,unsignedcharnum);

externunsignedcharZLG7290_SendCmd(unsignedcharData1,unsignedcharData2);

externunsignedcharZLG7290_GetKey();

/************木*********頭文件名ZLG7290H結(jié)束********去/

附錄6系統(tǒng)配置文件“STARTUP.A51”文件參考程序

SNOMOD51

;ThisfileispartoftheC51Compilerpackage

;Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.

;STARTUP.A51:Thiscodeisexecutedafterprocessorreset.

;TotranslatethisfileuseA51withthefollowinginvocation:

;A51STARTUP.A51

;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing

;BL51invocation:

;BL51<yourobjectfilelist>,STARTUP.OBJ<controls>

;User-definedPower-OnInitializationofMemory

;WiththefollowingEQUstatementstheinitializationofmemory

;atprocessorresetcanbedefined:

;;theabsolutestart-addressofIDATAmemoryisalways0

IDATALENEQU80H;thelengthofIDATAmemoryinbytes.

XDATASTARTEQUOH;theabsolutestart-addressofXDATAmemory

XDATALENEQUOH;thelengthofXDATAmemoryinbytes.

PDATASTARTEQUOH;theabsolutestart-addressofPDATAmemory

PDATALENEQUOH;thelengthofPDATAmemoryinbytes.

;Notes:TheIDATAspaceoverlapsphysicallytheDATAandBITareasofthe

;8051CPU.AtminimumthememoryspaceoccupiedfromtheC51

;run-timeroutinesmustbesettozero.

;ReentrantStackInitilization

;ThefollowingEQUstatementsdefinethestackpointerforreentrant

;functionsandinitializedit:

;StackSpaceforreentrantfunctionsintheSMALLmodel.

IBPSTACKEQU0;setto1ifsmallreentrantisused.

IBPSTACKTOPEQUOFFH+1;settopofstacktohighestlocation+1.

;StackSpaceforreentrantfunctionsintheLARGEmodel.

XBPSTACKEQU0;setto1iflargereentrantisused.

XBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.

;StackSpaceforreentrantfunctionsintheCOMPACTmodel.

PBPSTACKEQU0;setto1ifcompactreentrantisused.

PBPSTACKTOPEQUOFFFFH+1;settopofstacktohighestlocation+1.

;PageDefinitionforUsingtheCompactModelwith64KBytexdataR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論