Java基础06

面向对象

1. 类与对象

1. 抓特征
	① 静态特征:属性。
	② 动态特征:方法。
2. 创建对象
	new 类名();
3. 类中成员的调用
	对象.属性/方法(参数)
4. 类中的成员
	1》属性
	2》方法
5. 类和对象
	1》类:具有共同特征的一类事物的模板。
	2》对象:具体的事物。

代码:

public class 描述猫 { 
	public static void main(String[] args) { 
		Cat cat=new Cat(); 
		//对象.属性 
		cat.name="小花"; 
		cat.color="黄色"; 
		//对象.方法() 
		System.out.println(cat.name); 
		cat.catchMouse(); 
		//创建一个对象 
		Cat cat1=new Cat(); 
		cat1.name="加菲猫"; 
		cat1.color="橘色"; 
		cat1.catchMouse(); 
	} 
}
class Cat{ 
	String name;
	//猫的名称 
	String color; 
	String type; 
	String bodily;
	//体型 
	//方法: 
	public void catchMouse() { 
		System.out.println("猫捉老鼠"); 
	} 
}

2. 对象的内存图

1.类是只加载一次的。但是对象在堆中可以创建无数次。并且类中的成员变量(属性),在对象中需要开辟空 间。
2.对象的属性如果在类中没有赋值的情况下,会赋默认值,并且对象的属性来说,属于它自身的,独一份, 其它对象不能修改。

在这里插入图片描述
在这里插入图片描述

3. 构造函数

1. 构造方法:用来进行创建对象的方法
2. 构造方法的格式:
	[修饰符] 类的名称(参数){

	}
	一般方法格式: 
	[权限修饰符] [修饰符] 返回值类型 方法名称(参数){ 

	}
	注意:构造方法没有返回值,包括void都没有。 
	构造方法的名称不能随便起,必须是类名。
3. 对于一个类来说,如果没有在该类中显式的声明一个构造方法,
	java编译器会在编译时,自动添加一个 无参空构造。 
	如果在该类中显式的声明了构造方法,编译器就不会为我们添加无参空构造。
4. 构造方法也有重载。
5. 构造方法的作用:
	① 创建对象的方法。 创建对象,通过new操作,然后调用构造方法。 
	② 初始化成员 。
6. this的用法
	① 当全局变量 与局部变量重名时,按照就近原则,局部变量优先被使用。如果想使用全局变量,通 过this来使用。 
	② this的用法: 指代当前类的当前对象。 
		格式: this.方法()/属性

代码:

public class 构造方法 { 
	public static void main(String[] args) { 
		// M m=new M(); 
		// M m1=new M(5); 
		/*M m2=new M(); m2.m=15;*/ 
		M m3=new M(10); 
		// System.out.println(m3.m); 
		System.out.println(m3.a); 
	}
	public static void fun() {} 
}
class M{ 
	int m; 
	int a;
	//成员变量 全局变量 属性 
	//构造方法的格式: 
	public M() { 
		System.out.println("这是一个构造方法。。。。"); 
	}
	//构造方法上添加参数 
	public M(int a) { 
		//局部变量 
		System.out.println("这是一个有参构造。。。"+a); 
		// System.out.println(this.a);
		//m=a; 
		this.a=a; 
	} 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 连接硬件 首先,我们需要将MPU6050与STC32单片机进行连接。MPU6050是一种典型的陀螺仪传感器,它可以测量物体的角度、加速度等。STC32单片机是一种常用的微控制器,具有高性能和强大的处理能力。我们可以通过连接这两个硬件,在STC32单片机上读取并处理MPU6050的初始数据。 连接方法如下: 将MPU6050的VCC连到单片机的3.3V电源,GND连到单片机的GND。 将MPU6050的SCL连到单片机的P2.1引脚,SDA连到单片机的P2.0引脚。 2. 编写代码 接下来,我们需要编写程序来读取并处理MPU6050的初始数据。代码如下: #include <reg52.h> #include <intrins.h> #define MPU6050_ADDR 0xD0 #define MPU6050_SMPLRT_DIV 0x19 #define MPU6050_CONFIG 0x1A #define MPU6050_GYRO_CONFIG 0x1B #define MPU6050_ACCEL_CONFIG 0x1C #define MPU6050_ACCEL_XOUT_H 0x3B #define MPU6050_PWR_MGMT_1 0x6B #define MPU6050_WHO_AM_I 0x75 sbit SDA = P2^0; sbit SCL = P2^1; void delay_ms(unsigned int ms) //延时函数 { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 120; j++); } void I2C_Start() //I2C起始信号 { SDA = 1; SCL = 1; _nop_(); _nop_(); _nop_(); SDA = 0; _nop_(); _nop_(); _nop_(); SCL = 0; } void I2C_Stop() //I2C停止信号 { SDA = 0; SCL = 1; _nop_(); _nop_(); _nop_(); SDA = 1; _nop_(); _nop_(); _nop_(); } void I2C_SendByte(unsigned char byte) //I2C发送字节 { unsigned char i; for (i = 0; i < 8; i++) { if (byte & 0x80) SDA = 1; else SDA = 0; byte <<= 1; SCL = 1; _nop_(); _nop_(); _nop_(); SCL = 0; } } unsigned char I2C_ReceiveByte() //I2C接收字节 { unsigned char i, byte = 0; SDA = 1; for (i = 0; i < 8; i++) { byte <<= 1; SCL = 1; _nop_(); _nop_(); _nop_(); if (SDA) byte++; SCL = 0; } return byte; } void I2C_SendACK(bit ack) //I2C发送应答 { SDA = ack; SCL = 1; _nop_(); _nop_(); _nop_(); SCL = 0; } void MPU6050_WriteByte(unsigned char reg, unsigned char byte) //向MPU6050写入一个字节 { I2C_Start(); I2C_SendByte(MPU6050_ADDR); I2C_SendByte(reg); I2C_SendByte(byte); I2C_Stop(); } unsigned char MPU6050_ReadByte(unsigned char reg) //从MPU6050读取一个字节 { unsigned char byte; I2C_Start(); I2C_SendByte(MPU6050_ADDR); I2C_SendByte(reg); I2C_Start(); I2C_SendByte(MPU6050_ADDR | 1); byte = I2C_ReceiveByte(); I2C_SendACK(0); I2C_Stop(); return byte; } void MPU6050_Init() //MPU6050初始化 { MPU6050_WriteByte(MPU6050_PWR_MGMT_1, 0x00); MPU6050_WriteByte(MPU6050_SMPLRT_DIV, 0x07); MPU6050_WriteByte(MPU6050_CONFIG, 0x06); MPU6050_WriteByte(MPU6050_GYRO_CONFIG, 0x18); MPU6050_WriteByte(MPU6050_ACCEL_CONFIG, 0x01); } void main() //主函数 { unsigned char accel_x_h, accel_x_l, accel_y_h, accel_y_l, accel_z_h, accel_z_l; int accel_x, accel_y, accel_z; float accel_x_g, accel_y_g, accel_z_g; MPU6050_Init(); //MPU6050初始化 while (1) { accel_x_h = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H); accel_x_l = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H + 1); accel_y_h = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H + 2); accel_y_l = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H + 3); accel_z_h = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H + 4); accel_z_l = MPU6050_ReadByte(MPU6050_ACCEL_XOUT_H + 5); accel_x = (int)(accel_x_h << 8 | accel_x_l); accel_y = (int)(accel_y_h << 8 | accel_y_l); accel_z = (int)(accel_z_h << 8 | accel_z_l); accel_x_g = (float)accel_x / 16384.0; accel_y_g = (float)accel_y / 16384.0; accel_z_g = (float)accel_z / 16384.0; //将数据处理后输出 printf("accel_x: %f g, accel_y: %f g, accel_z: %f g\n", accel_x_g, accel_y_g, accel_z_g); delay_ms(100); } } 3. 程序说明 程序中的MPU6050_Init()函数用于初始化MPU6050,包括设置采样率、配置加速度计和陀螺仪的工作方式等。 程序中的while循环用于循环读取MPU6050的数据。通过调用MPU6050_ReadByte()函数读取加速度计的三个轴的数据,并将其转换成浮点数。然后,将处理后的数据输出到串口上。最后,通过delay_ms()函数延时100毫秒,以便下一次读取数据。 4. 总结 本文介绍了如何利用STC32单片机读取并处理MPU6050的初始数据。通过连接硬件、编写程序,我们可以轻松地获取MPU6050的数据,并进行处理。这为我们后续的项目开发提供了重要的基础

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值