-
看了看商家提供的程序.
基本上都看的明白,就是整数转字符串这里.
//****************************************
//整数转字符串
//****************************************
void lcd_printf(uchar *s,int temp_data)
{
if(temp_data
-
曹伟1993 发表于 2018-7-6 09:08
你用IIC去读取数据,首先你应该找到这个设备的地址吧?只有找到了这个设备,你才能对这个设备进行操作,都 ...
师傅,读写的MPU地址都写在IIC里了,你帮忙看下有没有问题.辛苦你了
/*******************************************************************************
* 函数名 : I2C_mpu6050Write(unsigned char addr,unsigned char dat)
* 函数功能 : 往mpu6050的一个地址写入一个数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void I2C_mpu6050Write(u8 addr,u8 dat)
{
I2C_start();
I2C_sendbyte(0xd0);
I2C_sendbyte(addr);
I2C_sendbyte(dat);
I2C_stop();
}
/*******************************************************************************
* 函数名 : I2C_mpu6050Read(unsigned char addr)
* 函数功能 : 读取mpu6050的一个地址的一个数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
u8 I2C_mpu6050Read(u8 addr)
{
u8 num;
I2C_start();
I2C_sendbyte(0xd0);
I2C_sendbyte(addr);
I2C_start();
I2C_sendbyte(0xd1);
num=I2C_readbyat();
I2C_stop();
return num;
}
-
曹伟1993 发表于 2018-7-4 16:48
你确定你的对了?你程序上写的串口的波特率是9600,但是你的串口助手上的波特率显示的是4800,不知道你的 ...
谢谢您的回复,我的片机是12M的晶振,我算了一下,使用9600的波特率,误差有点高,4800倍频一下,误差0点几.所以就改为4800倍频了.经测试OK
-
搞定,是频率没计算好;
欢迎和我一样的小白,来交流各种问题{:1_102:}
-
v115488 发表于 2018-6-28 17:55
把51单片机的教程又撸了一遍,今天撸完最后一课EEPROM(IIC).
下午就按自己的理解开撸MPU6050,
硬件连接如 ...
这一步的目标是能读取到MPU6050的数据,然后经过串口在上位机PC上显示
-
把51单片机的教程又撸了一遍,今天撸完最后一课EEPROM(IIC).
下午就按自己的理解开撸MPU6050,
硬件连接如图
结果失败,读取不到数据
程序共分3个文件,分别是< I2C.h >,< I2C.c >和< MPU6050 >,代码如下:
I2C.h代码
#ifndef __I2C_H_
#define __I2C_H_
#include
sbit SCL=P2^1; //作为从机时IIC时钟线
sbit SDA=P2^0; //作为从机时IIC数据线
void signal_start();
void signal_stop();
unsigned char data_output(unsigned char dat);
unsigned char data_input();
unsigned char I2CRead(unsigned char addr);
#endif
I2C.c 代码
#include
#include
//延时函数
void delay5us(void) //误差 0us
{
unsigned char a;
for(a=1;a>0;a--);
}
//起始信号
void signal_start()
{
SDL=1;
delay5us(2);
SCL=1;
delay5us(2);
SDL=0;
delay5us(2);
SCL=0;
delay5us(2);
}
//终止信号
void signal_stop()
{
SDL=1;
delay5us(2);
SCL=1;
delay5us(2);
SDL=0;
delay5us(2);
}
/*******************************************************************************
* 函数名 : data_output(unsigned char dat)
* 函数功能 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
* 输入 : num
* 输出 : 0或1。发送成功返回1,发送失败返回0
* 备注 : 发送完一个字节SCL=0,SDA=1
*******************************************************************************/
unsigned char data_output(unsigned char dat)
{
unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0;a>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
dat=dat200) //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
{
SCL=0;
delay5us(2);
return 0;
}
}
SCL=0;
delay5us(2);
return 1;
}
/*******************************************************************************
* 函数名 : data_input()
* 函数功能 : 使用I2c读取一个字节
* 输入 : 无
* 输出 : dat
* 备注 : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/
unsigned char data_input()
{
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
delay5us(2);
for(a=0;a
-
谢谢各位
-
gxg1122 发表于 2018-6-5 13:06
你想怎么精简了?
功能不变,代码不越短越好吗?
-
问题已解决:是LED点阵导致的显示错误,把74H595的OE端跳冒拔掉就OK了
-
huo_hu 发表于 2018-5-27 17:56
提示你112行的错误了,你anjian_biao(cod);函数里没有返回值
谢谢回复,我想这个可能是,按键码表数据(void型)定义错误,如果在注释返回哪里加上return num;就会提示数据转换错误.我把void改成u8 就OK了
-
顶一顶,
-
ljj3166 发表于 2018-5-20 13:37
楼主要不先试一下,自己撸码把开发板上的外设跑一遍?
自己撸的:
查了一些资料,说MPU6050只接4根线就可以,VDD,GND,SCL,SDA
我把4条线直接用杜邦线接在开发板的4个键位了.如图
开发板原图
也就是红线圈的4个管脚.
刚接触MPU6050芯片,不明白他是什么原理.一直没敢上电,怕烧板子
主要是不确定链接对不对!!!!!:time:
-
第一个目标:小车能直立不到
问题1:MPU6050模块与单片机怎么链接{:1_96:}{:1_96:}{:1_96:}
:time:
-
PowerAnts 发表于 2018-5-20 12:22
还真不能用适配器,只能用电池。实测过三节锂电池的小手钻,空载电流1A多,打螺丝批力调最大达20A
谢谢回复,学习了{:1_103:}{:1_103:}{:1_103:}
-
谢谢两位的解答,{:1_103:}{:1_103:}{:1_103:}
-
maychang 发表于 2018-5-18 18:51
我曾把充电器直接到手钻上,但是手钻不转.
那是因为你的充电器功率不够大(手电钻工作时电流大于400mA)。 ...
谢谢,
根据P=UI
U是满足的
这里的功率不足,我可以理解为是电流太小吗?也就是电流不足?对吗?
-
v115488 发表于 2018-5-18 18:50
先谢谢您的回复.
我有个不用电脑的电脑电源,能改造一个吗?
根据P=UI
U是满足的
这里的功率不足,我可以理解为是电流太小吗?也就是电流不足?对吗?
-
本帖最后由 v115488 于 2018-5-18 18:56 编辑
先谢谢您的回复.
我有个不用电脑的电脑电源,能改造一个吗?
-
从新模块的查询了一遍,终于找到问题了,
if(store=0) //判断储存按键是否被按下
这一句判断的时候,括号内少打了一个=号,
希望不要有朋友犯一样的错误:Sad::Sad::Sad:
-
学习了,学习了,好论坛,新手好好学习,天天向上