历史上的今天
今天是: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
史海拾趣
|
转眼我已工作三周的时间了,在工作过程中,我感受颇多,现在与大家一起来分享一下我的经历。 我作为一个普通本科学校的学生,经历了所有与我一样在普通本科就读的大学生的生活,从入学时的欣喜与憧憬到渐渐地失望与迷茫。原先都只是听说过的那些 ...… 查看全部问答> |
|
在userlogic中例化了一个模块,代码如下,红色部分为例化模块部分: module user_logic ( // -- ADD USER PORTS BELOW THIS LINE --------------- // --USER ports added here match_addr,   ...… 查看全部问答> |
|
单片机控制电机转速,正转,反转,快转,慢转,还要显示转速。我主要就是控制电机速度这块布太懂,晚上查说用PID计算,可是没有学过,希望高手提示下。小弟万分感谢!… 查看全部问答> |
|
有那位牛人开发过wince6.0下街机模拟器,模拟器支持CPS1、CPS2、CAVE、Neogeo 、PGM,运行游戏时,音效正常, 有经验请发邮件到gamesimulator@sina.com详细谈谈… 查看全部问答> |
|
职位介绍 硬件设计工程师 本公司正在做PDA项目的开发,使用的是ARM系统。已经完成第一版产品的开发和小批量生产。 现欲招聘一名兼职硬件工程师,负责后续的生产以及后续产品的设计,调试和生产工作。 PDA的硬件组成如下:单片机+ARM协处理器+K ...… 查看全部问答> |




