历史上的今天
返回首页

历史上的今天

今天是:2025年07月24日(星期四)

正在发生

2020年07月24日 | MSP430单片机+BS8112A-3程序源码

2020-07-24 来源:51hei

采用仿II2C通讯,该芯片II2C通讯略有区别,已调试通过,仅供参考


单片机源程序如下:

//==============================================================================         

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//  文 件 名   : keyboard.c

//  版 本 号   :  

//  作    者   :  

//  生成日期   :

//  最近修改   :

//  功能描述   : FPC触摸按键  IIC 接口例程(MSP430F149系列)

//  驱动IC     : BS8112A-3

// 说明: 硬件说明

//----------------------------------------------------------------

//GND     电源地

// VCC     接3.3v电源

// SCL     IIC时钟信号线

//SDA     IIC数据线

// IRQ     中断请求

// ----------------------------------------------------------------

// 说明:软件说明-IIC时序

// -------------------------------------------------------------------

//1,该芯片IIC驱动时序有点特殊,该芯片是不回ACK的,需要主设备发出,实际主设备发9位,见使用手册7位地址+1位读写位+1位ACK

// 2, 主机发完后,需要等待从设备处理完成,根据实际需求在发送ACK时增加几个延时也可以,本代码没加,从波形看也没问题

//------------------------------------------------------------------

// 修改历史   :

// 日    期   :

// 修改内容   : 创建文件

//==================================================================================

#include

#include "Keyboard.h"

#include "timer.h"


#define  Key_BS8112_IIC

#define  BS8112_DELAY    {delay_us(10);}

//==============================================================

//        Function Name: void BS8112_IO_Init(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to generate IIC start signal

//        Tips:IIC数据有效性,在时钟高电平周期内,数据必须保持稳定

//       GND     电源地

//       VCC     接3.3v电源

//       SCL     P16(时钟)

//       SDA     P15(数据)  

//       IRQ     P17  中断请求

//============================================================

void BS8112_IO_Init(void)

{

        P1DIR  |=   BS8112_SCL+BS8112_SDA;     //1输出,0输入

        P1OUT  &=  ~(BS8112_SCL+BS8112_SDA);   //初始化为输出值为0


        P1DIR &=~BS8112_IRQ;                     //0输入

}

//==============================================================

//        Function Name: void I2CStart(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to generate IIC start signal

//        Tips:IIC数据有效性,在时钟高电平周期内,数据必须保持稳定

//    数据线信号仅在时钟电平为低时改变

//        iic的起始:在SCL为高时,SDA由高变低,为起始条件

//    时序 CLK      0   delay    1    delay     0    为一个周期,在高电平时数据有效必须稳定,只能在低电平时可以改变数据值

//============================================================

void BS8112_I2CStart(void)

{

    BS8112_I2C_SDA_OUT();

        BS8112_I2C_SDA_HIGH;   // SDA=1

          BS8112_I2C_SCL_HIGH;           // SCL=1  

          BS8112_DELAY;          //delay

          BS8112_I2C_SDA_LOW;    //SDA= 0

          BS8112_DELAY;          //delay

          BS8112_I2C_SCL_LOW;            // SCL=0

          BS8112_DELAY;          //delay

}

//==============================================================

//        Function Name: void I2CStop(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to generate IIC stop signal

//        Tips:SCL为高时,SDA由低变高跳变,为终止条件

//    时序 CLK      0   delay    1    delay     0    为一个周期,在高电平时数据有效必须稳定,只能在低电平时可以改变数据值

//============================================================


void BS8112_I2CStop(void)

{

        BS8112_I2C_SDA_LOW;   // SDA=0

          BS8112_I2C_SCL_HIGH;              // SCL=1

          BS8112_DELAY;//delay

          BS8112_I2C_SDA_HIGH;  // SDA=1

          BS8112_DELAY;//delay

}

//==============================================================

//        Function Name: void BS8112_I2CAck(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to generate IIC ACK signal

//        Tips:不管主机还是从机,接收到数据后(数据或地址),都有回应一个ACK 信号

//    成功接收回应0

//    时序 CLK      0   delay    1    delay     0    为一个周期,在高电平时数据有效必须稳定,只能在低电平时可以改变数据值

//============================================================


void BS8112_I2CAck(void)

{

          BS8112_I2C_SCL_LOW;         // SCL=0

          BS8112_I2C_SDA_LOW;                    // SDA=0  

          BS8112_DELAY;                //delay

          BS8112_I2C_SCL_HIGH;        // SCL=1

          BS8112_DELAY;                //delay

          BS8112_I2C_SCL_LOW;         // SCL=0

}

//==============================================================

//        Function Name: void BS8112_IIC_NAck(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to generate IIC ACK signal

//        Tips:不管主机还是从机,接收到数据后(数据或地址),都有回应一个ACK 信号

//    接收不成功回应1

//    时序 CLK      0   delay    1    delay     0    为一个周期,在高电平时数据有效必须稳定,只能在低电平时可以改变数据值

//============================================================


void BS8112_I2CNoAck(void)

{

          BS8112_I2C_SCL_LOW;          // SCL=0,   此句可以不要,因为本身就是0,写上是为了更明确IIC通讯

        BS8112_I2C_SDA_HIGH;                    // SDA=1

          BS8112_DELAY;                 //delay

          BS8112_I2C_SCL_HIGH;         // SCL=1

          BS8112_DELAY;                 //delay

          BS8112_I2C_SCL_LOW;          // SCL=0

}

//==============================================================

//        Function Name:unsigned char BS8112_I2CRcvAck(void)

//        Parameters:    none

//        Return value:  none

//        Description:     this function is used to wait ACK signal

//        Tips: 1: indicate receive  failure  if the ACK signal is 1

//            0: indicate receive  success  if the ACK signal is 0

//    时序 CLK      0   delay    1    delay     0    为一个周期,在高电平时数据有效必须稳定,只能在低电平时可以改变数据值

//============================================================

unsigned char BS8112_I2CRcvAck(void)

{

        unsigned int delay=0;

        BS8112_I2C_SDA_IN();     

        BS8112_I2C_SCL_LOW;          //SCL=0

        BS8112_I2C_SDA_HIGH;                    //SDA

        BS8112_DELAY;             //delay

          BS8112_I2C_SCL_HIGH;     //SCL=1

          BS8112_DELAY;             //delay

          while(BS8112_I2C_SDA_GET())

          {

                  delay++;

                if(delay>500)

                {

                        BS8112_I2C_SDA_OUT();

                        BS8112_I2CStop();

                       

                        return 1;

                }

          }

          BS8112_I2C_SCL_LOW;      //SCL=0

推荐阅读

史海拾趣

爱特姆(ATOM)公司的发展小趣事

随着电子行业的快速发展,爱特姆不断加大对技术研发的投入,致力于推出更先进、更稳定的连接器产品。公司成功研发出一系列具有自主知识产权的新产品,不仅提升了产品的性能和质量,也进一步巩固了其在行业内的领先地位。

Directed Energy Inc公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Directed Energy Inc深知这一点,因此始终将品质保障作为公司的核心竞争力之一。公司建立了严格的质量管理体系,从原材料采购到生产制造、再到产品检验和售后服务,每一个环节都严格把控,确保产品的高品质。这种对品质的执着追求赢得了客户的广泛信赖和好评,为公司赢得了更多的市场份额。

鑫雁公司的发展小趣事

随着技术的不断积累和市场需求的扩大,聚洵半导体在产品研发上取得了显著突破。公司不仅继续深化在运算放大器领域的研发,还成功扩展了产品线,涵盖了模拟开关、电压基准、线性稳压器、电平转换器等多种产品。这些产品广泛应用于通讯网络、消费电子、工业控制等多个领域,满足了市场多样化的需求。同时,聚洵还获得了多项技术专利和荣誉,如集成电路布图设计专利和发明专利等,进一步巩固了其在行业中的地位。

Advanced Thermal Solutions公司的发展小趣事

ATS始终坚持以创新为驱动力,不断提升研发创新能力。公司设立了专门的研发团队,负责新技术和新产品的研发工作。通过与高校和研究机构的合作,ATS不断引入前沿的科技成果和人才资源,为公司的创新发展提供了有力支持。此外,ATS还建立了完善的研发流程和质量控制体系,确保每一款产品都能达到最高的性能和质量标准。

FOX [Fox Electronics]公司的发展小趣事

随着全球对环保和可持续发展的重视,Fox Electronics积极响应行业趋势,将绿色生产理念融入企业运营中。公司投资引进先进的环保设备和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,Fox Electronics还推出了一系列符合RoHS(限制有害物质)指令的产品,满足市场对环保产品的需求。这些举措不仅提升了公司的社会责任感,也为其在绿色电子市场赢得了良好的声誉。

China Semiconductor Corp公司的发展小趣事

为了进一步提升竞争力,CSC开始着手进行产业链整合。公司通过与上下游企业的深度合作,形成了紧密的产业链协同关系。这不仅降低了生产成本,提高了生产效率,还使得CSC能够更好地把握市场动态和技术趋势,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

谈谈我和嵌入式的故事

转眼我已工作三周的时间了,在工作过程中,我感受颇多,现在与大家一起来分享一下我的经历。 我作为一个普通本科学校的学生,经历了所有与我一样在普通本科就读的大学生的生活,从入学时的欣喜与憧憬到渐渐地失望与迷茫。原先都只是听说过的那些 ...…

查看全部问答>

Verilog 中实例化问题

在userlogic中例化了一个模块,代码如下,红色部分为例化模块部分: module user_logic (   // -- ADD USER PORTS BELOW THIS LINE ---------------   // --USER ports added here   match_addr,    ...…

查看全部问答>

关于单片机控制电机(提升机)设计

  单片机控制电机转速,正转,反转,快转,慢转,还要显示转速。我主要就是控制电机速度这块布太懂,晚上查说用PID计算,可是没有学过,希望高手提示下。小弟万分感谢!…

查看全部问答>

wince6.0下街机模拟器

有那位牛人开发过wince6.0下街机模拟器,模拟器支持CPS1、CPS2、CAVE、Neogeo 、PGM,运行游戏时,音效正常, 有经验请发邮件到gamesimulator@sina.com详细谈谈…

查看全部问答>

求evc下开发的视频捕获和压缩的算法 谢谢

求evc下开发的视频捕获和压缩的算法 谢谢 有的话发到xuyun_010@163.com …

查看全部问答>

高薪急聘硬件设计工程师兼职人员(北京)

职位介绍 硬件设计工程师 本公司正在做PDA项目的开发,使用的是ARM系统。已经完成第一版产品的开发和小批量生产。 现欲招聘一名兼职硬件工程师,负责后续的生产以及后续产品的设计,调试和生产工作。 PDA的硬件组成如下:单片机+ARM协处理器+K ...…

查看全部问答>

DM9000A接光纤模块的问题

                                 最近要用STM32+DM9000A构建光纤以太网,看DM9000A的数据手册上似乎是可以直接支持光纤接口的,但不知道如何连接。 ...…

查看全部问答>

求助

_delay_cycles(100); 这个函数是如何实现的?延时100是具体是什么意思?看到网上说默认为mclk,8M时钟。 求解答 …

查看全部问答>

单片机电源干扰最主要的处理方法

我现在设计了一个鞋柜,但是电源老是发生干扰,请各位高手在这方面指点指点…

查看全部问答>