ZLG7290矩陣鍵盤控制forMSP40
[cpp]view plaincopyprint?
- /*****************************************************************
- //文件名:ZLG7290.c
- //描述:該文件定義與ZLG7290有關(guān)的各種接口、函數(shù),適用于MSP430F149
- //編寫人:小邪@清水
- //版本號:1.01
- *****************************************************************/
- #include"msp430x14x.h"
- #include"ZLG7290.h"
- /*****************************************************************
- //關(guān)于接口的一些定義
- //需要根據(jù)實際應(yīng)用做出改變
- *****************************************************************/
- #defineIIC_Enable!(P2IN&BIT2)
- #defineSCL_UPPORTDIR&=~SCL
- #defineSDA_UPPORTDIR&=~SDA
- #defineSCL_DOWNPORTDIR|=SCL
- #defineSDA_DOWNPORTDIR|=SDA
- #definePORTDIRP3DIR//設(shè)置為P3口
- #definePORTINP3IN
- #definePORTOUTP3OUT
- #defineSDABIT0//設(shè)置SDA為Px.0
- #defineSCLBIT1//設(shè)置SCL為Px.1
- #defineRESBIT2//設(shè)置RES為P2.7(對應(yīng)430的中斷)
- #defineCHIP0x70//ZLG7290的IIC地址
- /*************************************************************************
- //名稱:IIC_delay()
- //參數(shù):無
- //返回值:無
- //功能:完成IIC設(shè)置中所需要的延時
- *************************************************************************/
- voidIIC_delay()
- {
- inti;
- i=0xff;
- while(i)
- {
- i--;
- _NOP();
- }
- i=0xff;
- while(i)
- {
- i--;
- _NOP();
- }
- }
- /*************************************************************************
- //名稱:SendToBus()
- //參數(shù):要發(fā)送的數(shù)據(jù)
- //返回值:無
- //功能:向線上發(fā)送數(shù)據(jù)(SCL必須在進入函數(shù)前置為低)
- *************************************************************************/
- voidSendToBus(BYTEm)
- {
- BYTEi;
- for(i=0;i<8;i++)
- {
- if(m&0x80)
- SDA_UP;
- else
- SDA_DOWN;
- SCL_UP;
- IIC_delay();
- SCL_DOWN;
- m<<=1;
- }
- return;
- }
- /*************************************************************************
- //名稱:BackAns()
- //參數(shù):無
- //返回值:成功標(biāo)志,若成功則為1,否則為0
- //功能:接收應(yīng)答信號
- *************************************************************************/
- BYTEBackAns()
- {
- BYTEflag;
- SDA_UP;
- IIC_delay();
- SCL_UP;
- flag=0;
- IIC_delay();
- if((PORTIN&SDA))
- {
- flag=1;
- }
- SCL_DOWN;
- returnflag;
- }
- /*************************************************************************
- //名稱:Start()
- //參數(shù):無
- //返回值:無
- //功能:發(fā)送一個起始信號
- *************************************************************************/
- voidStart()
- {
- PORTOUT&=(~SCL)&(~SDA);
- SCL_UP;
- IIC_delay();
- SDA_UP;
- IIC_delay();
- SDA_DOWN;//開始位
- IIC_delay();
- SCL_DOWN;
- IIC_delay();
- }
- /*************************************************************************
- //名稱:Stop()
- //參數(shù):無
- //返回值:無
- //功能:發(fā)送一個停止信號
- *************************************************************************/
- voidStop()
- {
- SDA_DOWN;
- IIC_delay();
- SCL_UP;//停止位
- IIC_delay();
- SDA_UP;
- IIC_delay();
- SCL_DOWN;
- IIC_delay();
- }
- /*************************************************************************
- //名稱:Write_IIC_Byte()
- //參數(shù):data-待寫入的數(shù)據(jù),startaddr-待寫入的首地址
- //返回值:無
- //功能:向線上寫一個字節(jié)
- *************************************************************************/
- voidWrite_IIC_Byte(BYTEdata,BYTEstartaddr)
- {
- do
- {
- Start();
- SendToBus(CHIP);//選片地址
- if(BackAns())//從機的回答信息
- continue;
- SendToBus(startaddr);//選擇芯片上的內(nèi)在地址
- if(BackAns())
- continue;
- SendToBus(data);//傳輸數(shù)據(jù)
- if(!BackAns())
- break;
- }
- while(1);
- Stop();
- }
- /*************************************************************************
- //名稱:ReadFromBus()
- //參數(shù):無
- //返回值:讀出的數(shù)據(jù)
- //功能:從線上讀出數(shù)據(jù)
- *************************************************************************/
- BYTEReadFromBus()
- {
- inti,temp;
- temp=0;
- SDA_UP;//讀取數(shù)據(jù)之前要把SDA拉高
- IIC_delay();
- for(i=0;i<8;i++)
- {
- SCL_UP;
- IIC_delay();
- temp<<=1;
- if(PORTIN&SDA)
- temp|=0x01;
- else
- temp&=0xfe;
- SCL_DOWN;
- IIC_delay();
- }
- returntemp;
- }
-
關(guān)鍵詞:
ZLG7290矩陣鍵盤控制MSP4
評論