ZLG7290矩阵键盘控制forMSP40
时间:11-27
来源:互联网
点击:
基于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;
- }
- /*************************************************************************
- //名称:Read_IIC_Random()
- //参数:s
ZLG7290矩阵键盘控制MSP4 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)