资源简介
国赛包含第 5 789 届赛题代码
省赛包含第 456789 届赛题代码
其中省赛第八届题目还没找到个人觉得较好的实现方法,望广大网友指点。
下载完的同学如果觉得好,麻烦给个五星/哈哈哈
代码片段和文件信息
/*
程序说明: CT117E嵌入式竞赛板GPIO模拟I2C总线驱动程序
软件环境: Keil uVision 4.10
硬件环境: CT117E嵌入式竞赛板
日 期: 2011-8-9
*/
#include “i2c.h“
/** I2C 总线接口 */
#define I2C_PORT GPIOB
#define SDA_Pin GPIO_Pin_7
#define SCL_Pin GPIO_Pin_6
#define FAILURE 0
#define SUCCESS 1
//配置SDA信号线为输入模式
void SDA_Input_Mode()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = SDA_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(I2C_PORT &GPIO_InitStructure);
}
//配置SDA信号线为输出模式
void SDA_Output_Mode()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = SDA_Pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(I2C_PORT &GPIO_InitStructure);
}
//
void SDA_Output( uint16_t val )
{
if ( val ) {
GPIO_SetBits(I2C_PORTSDA_Pin);
} else {
GPIO_ResetBits(I2C_PORTSDA_Pin);
}
}
//
void SCL_Output( uint16_t val )
{
if ( val ) {
GPIO_SetBits(I2C_PORTSCL_Pin);
} else {
GPIO_ResetBits(I2C_PORTSCL_Pin);
}
}
//
uint8_t SDA_Input()
{
return GPIO_ReadInputDataBit( I2C_PORT SDA_Pin);
}
//延时程序
void delay1(unsigned int n)
{
unsigned int i;
for ( i=0;i }
//I2C总线启动
void I2CStart(void)
{
SDA_Output(1);delay1(500);
SCL_Output(1);delay1(500);
SDA_Output(0);delay1(500);
SCL_Output(0);delay1(500);
}
//I2C总线停止
void I2CStop(void)
{
SCL_Output(0); delay1(500);
SDA_Output(0); delay1(500);
SCL_Output(1); delay1(500);
SDA_Output(1); delay1(500);
}
//等待应答
unsigned char I2CWaitAck(void)
{
unsigned short cErrTime = 5;
SDA_Input_Mode();
delay1(500);
SCL_Output(1);delay1(500);
while(SDA_Input())
{
cErrTime--;
delay1(500);
if (0 == cErrTime)
{
SDA_Output_Mode();
I2CStop();
return FAILURE;
}
}
SDA_Output_Mode();
SCL_Output(0);delay1(500);
return SUCCESS;
}
//发送应答位
void I2CSendAck(void)
{
SDA_Output(0);delay1(500);
delay1(500);
SCL_Output(1); delay1(500);
SCL_Output(0); delay1(500);
}
//
void I2CSendNotAck(void)
{
SDA_Output(1);
delay1(500);
SCL_Output(1); delay1(500);
SCL_Output(0); delay1(500);
}
//通过I2C总线发送一个字节数据
void I2CSendByte(unsigned char cSendByte)
{
unsigned char i = 8;
while (i--)
{
SCL_Output(0);delay1(500);
SDA_Output(cSendByte & 0x80); delay1(500);
cSendByte += cSendByte;
delay1(500);
SCL_Output(1);delay1(500);
}
SCL_Output(0);delay1(500);
}
//从I2C总线接收一个字节数据
unsigned char I2CReceiveByte(void)
{
unsigned char i = 8;
unsigned char cR_Byte = 0;
SDA_Input_Mode();
while (i--)
{
cR_Byte += cR_Byte;
SCL_Output(0);delay1(500);
delay1(500);
SCL_Output(1);delay1(500);
cR_Byte |= SDA_Input();
}
SCL_Output(0);delay1(500);
SDA_Output_Mode();
return cR_Byte;
}
//I2C总线初始化
void i2c_init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_A
相关资源
- STM32F103RCT6.zip
- 微雪2.9 E-paper.zip
- 步进初级3--6路步进电机速度控制函数
- 基于嵌入式linux系统下的画板小程序
- SSD1306 oled 驱动代码
- STM32精准控制PWM脉冲数_库函数版
- 如何基于STM32系列单片机实现加密保护
- 远程抄表系统中嵌入式GPRS无线通信模
- 电子-基于战舰版RC522IIC.rar
- 基于STM32的智能万年历设计.pdf
- 电子-STM32硬件I2CMaster接口函数V1.01.z
- 嵌入式系统/ARM技术中的基于ARM的汽车
- 2017最新嵌入式培训机构视频.zip
- 嵌入式系统/ARM技术中的基于嵌入式
- 一种新型基于多点预瞄的最优路径跟
- 基于STM32的便携式线阵CCD测量系统设计
- 基于ARM的一些课程设计
- 东南大学 嵌入式 实验
- Xilinx Zynq-7000嵌入式系统设计及实现
- 基于STM32和增量PID的旋转倒立摆的设计
- 基于MCU的嵌入式在线升级系统的设计
- 嵌入式系统设计与应用(第2版) 习题
- 第十届蓝桥杯题目
- stm32智能小车程序
- rt-thread 完整源代码
- 基于STM32的云台控制-技术论文
- 12864液晶的Stm32f103驱动
- Quectel_LTE&5G_Linux_USB_Driver_User_Guide_V2.
- 蓝桥杯练习系统题目含VIP试题
- stm32 spi方式读写EEPROM
评论
共有 条评论