依据ZLG7290的矩阵键盘操控,适用于MSP430,选用中止形式查询按键。ZLG7290还具有数码管显现功用,自己水平有限,这儿未能完结。
[cpp]view plaincopyprint?
- /*****************************************************************
- //文件名:ZLG7290.c
- //描绘:该文件界说与ZLG7290有关的各种接口、函数,适用于MSP430F149
- //编写人:小邪@清水
- //版本号:1.01
- *****************************************************************/
- #include”msp430x14x.h”
- #include”ZLG7290.h”
- /*****************************************************************
- //关于接口的一些界说
- //需求依据实践使用做出改动
- *****************************************************************/
- #defineIIC_Enable!(P2IN&BIT2)
- #defineSCL_UPPORTDIR&=~SCL
- #defineSDA_UPPORTDIR&=~SDA
- #defineSCL_DOWNPORTDIR|=SCL
- #defineSDA_DOWNPORTDIR|=SDA
- #definePORTDIRP3DIR//设置为P3口
- #definePORTINP3IN
- #definePORTOUTP3OUT
- #defineSDABIT0//设置SDA为Px.0
- #defineSCLBIT1//设置SCL为Px.1
- #defineRESBIT2//设置RES为P2.7(对应430的中止)
- #defineCHIP0x70//ZLG7290的IIC地址
- /*************************************************************************
- //称号:IIC_delay()
- //参数:无
- //返回值:无
- //功用:完结IIC设置中所需求的延时
- *************************************************************************/
- voidIIC_delay()
- {
- inti;
- i=0xff;
- while(i)
- {
- i–;
- _NOP();
- }
- i=0xff;
- while(i)
- {
- i–;
- _NOP();
- }
- }
- /*************************************************************************
- //称号:SendToBus()
- //参数:要发送的数据
- //返回值:无
- //功用:向线上发送数据(SCL必须在进入函数前置为低)
- *************************************************************************/
- 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()
- //参数:无
- //返回值:成功标志,若成功则为1,否则为0
- //功用:接纳应对信号
- *************************************************************************/
- BYTEBackAns()
- {
- BYTEflag;
- SDA_UP;
- IIC_delay();
- SCL_UP;
- flag=0;
- IIC_delay();
- if((PORTIN&SDA))
- {
- flag=1;
- }
- SCL_DOWN;
- returnflag;
- }
- /*************************************************************************
- //称号:Start()
- //参数:无
- //返回值:无
- //功用:发送一个起始信号
- *************************************************************************/
- voidStart()
- {
- PORTOUT&=(~SCL)&(~SDA);
- SCL_UP;
- IIC_delay();
- SDA_UP;
- IIC_delay();
- SDA_DOWN;//开端位
- IIC_delay();
- SCL_DOWN;
- IIC_delay();
- }
- /*************************************************************************
- //称号:Stop()
- //参数:无
- //返回值:无
- //功用:发送一个中止信号
- *************************************************************************/
- voidStop()
- {
- SDA_DOWN;
- IIC_delay();
- SCL_UP;//中止位
- IIC_delay();
- SDA_UP;
- IIC_delay();
- SCL_DOWN;
- IIC_delay();
- }
- /*************************************************************************
- //称号:Write_IIC_Byte()
- //参数:data-待写入的数据,startaddr-待写入的首地址
- //返回值:无
- //功用:向线上写一个字节
- *************************************************************************/
- voidWrite_IIC_Byte(BYTEdata,BYTEstartaddr)
- {
- do
- {
- Start();
- SendToBus(CHIP);//选片地址
- if(BackAns())//从机的答复信息
- continue;
- SendToBus(startaddr);//挑选芯片上的内涵地址
- if(BackAns())
- continue;
- SendToBus(data);//传输数据
- if(!BackAns())
- break;
- }
- while(1);
- Stop();
- }
- /*************************************************************************
- //称号:ReadFromBus()
- //参数:无
- //返回值:读出的数据
- //功用:从线上读出数据
- *************************************************************************/
- BYTEReadFromBus()
- {
- inti,temp;
- temp=0;
- SDA_UP;//读取数据之前要把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;
- }
-
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/257263.html