首页 > 编程知识 正文

c8051单片机iic程序,em231温度模块控制程序示例

时间:2023-05-03 17:22:25 阅读:112258 作者:3512

1、代码# include ' ht66f 2390.h ' # defines da _ pin _ pf2//pf2引脚为SDA#defineSDA_set_pfc2 //PF2引脚输入输出模式控制寄存器void dou_iic_init (; unsignedchardou _ IIC _ read (unsignedcharreg _ address; void dou _ IIC _ write (unsignedcharreg _ address,unsigned char REG_data ); unsignedcharreadtemp (unsignedchardev,unsigned char reg,unsigned char length,unsigned char *data ); void dou_iic_delay2us (; void dou_iic_Start (; void dou_iic_Stop (; void IIC_NAck (; void IIC_Ack (; unsignedchardou _ IIC _ sendbuye (unsignedchardat; unsigned char dou_iic_RecvByte (; 浮动时钟(unsigned char * chr temp ); 语音调频(floatd,unsigned char * c ); void main () {inituart ); //为了初始化、调试串行端口而查看温度数据,没有编写串行端口的功能代码。 另一个博客dou_iic_init (); //IIC初始化u8 c[2],o[5]; 浮动模板; int i; 浮动t; wile(1) {temp=0.0; for(I=0; i10; I )读模板(0x 00,0x 07,2,c ); //从红外线测温模块读取温度数据temp=temptotemp(c ); //10个数据延迟毫秒(30 ); } t=(浮动) ) temp/10.0 ); //求出平均值FTC(t,o ),将//浮点型转换为字符串send_buff ('当前温度为); //串行输出send_buff(o; send_buff((rn ); }//将获取的浮点温度数据转换为字符串voidFTC(floatd,unsigned char * c ) {int dd; DD=(int ) ) d*10 ); int b=dd/100; int g=dd/10; int s=dd; c[0]=b 48; c[1]=g 48; c[2]='.'; c[3]=s 48; c[4]=' '; 返回; 初始化IICvoid dou_iic_init () {SDA_set=0; SCL_set=0; SCL_pin=1; SDA_pin=1; SDA_up_set=1; //延迟2us,两个机器周期void dou_iic_delay2us () {ASM('nop ) }; ASM(nop ); }//IIC开始信号void dou_iic_Start () {SDA_pin=1; dou_iic_delay2us (; SCL_pin=1; dou_iic_delay2us (; //设置时间为SDA_pin保持时间4.7usSDA_pin=0; dou_iic_delay2us (; //保持时间为4usSCL_pin=0; dou_iic_delay2us (; }//IIC停止信号void dou_iic_Stop () {SDA_pin=0; dou_iic_delay2us (; SCL_pin=1; dou_iic_delay2us (; SDA_pin=1; dou_iic_delay2us (; SCL_pin=0; dou_iic_delay2us (; }//IIC是1字节数据unsignedchardou _ IIC _ sendbuye (unsignedchardat ) {unsigned char a=0,b=0;

for(a=0; a8; 要发送a//8比特,从最高位比特开始{SDA_pin=dat7; dat=dat1; dou_iic_delay2us (; SCL_pin=1; dou_iic_delay2us (; //创立时间4.7usSCL_pin=0; dou_iic_delay2us (; //时间大于4 us (sda _ pin=1; dou_iic_delay2us (; SDA_set=1; SCL_pin=1; 等待while(SDA_pin )//响应,即sda_pin从设备返回{b; if(B200 ) {SCL_pin=0; dou_iic_delay2us (; 返回0; }}SCL_pin=0; dou_iic_delay2us (; SDA_set=0; 返回1; 使用//I2c获取1字节的unsignedchardou _ IIC _ recv byte ({ unsigned chara=0,dat=0; SDA_pin=1; //开头和1字节发送后的SCL_pin均为0dou_iic_delay2us (; SDA_set=1; for(a=0; a8; a//接收8字节{SCL_pin=1; dou_iic_delay2us (; dat=1; dat|=SDA_pin; dou_iic_delay2us (; SCL_pin=0; dou_iic_delay2us (; }SDA_set=0; 返回日期; //I2C设备上1字节数据void dou _ IIC _ write (unsignedcharreg _ address,unsigned char REG_data ) { dou_iic_Start ) //开始信号dou _ IIC _ sendbuye (device _ address1); //发送设备地址写入信号dou_IIC_sendbuye(reg_address; //内部寄存器地址、dou_IIC_sendbuye(reg_data ); //内部寄存器数据,dou_iic_Stop (; //发送停止信号(//I2c指定设备指定寄存器中1字节数据unsignedchardou _ IIC _ read (unsignedcharreg _ address ) {unsigned char REG_data; dou_iic_Start (; //开始信号dou _ IIC _ sendbuye (device _ address1); //发送设备地址写入信号dou_IIC_sendbuye(reg_address; //发送存储单元地址,从0到dou_iic_Start (; //开始信号dou _ IIC _ sendbuye ((device _ address1)1); //发送设备地址读取信号REG_data=dou_iic_RecvByte (; //读出寄存器数据SDA_pin=1; //写入响应信号SCL_pin=1; //时钟线dou_iic_delay2us (); //延迟SCL_pin=0; //时钟线dou_iic_delay2us (); //延迟dou_iic_Stop (); //停止信号return REG_data; }/*从红外线设备读取数据并存储在data数组中的参数说明dev :目标设备地址reg:读取寄存器地址length :要读取的字节长度返回值实际读取的字节长度*/unsignedchadchangth 无符号char reg,无符号char length,无符号char * data ) {无符号char count=0; dou_iic_Start (; dou_IIC_sendbuye(deV1; //发送写入指令dou_IIC_sendbuye(reg )//发送从站地址dou_iic_Start (; //开始信号dou_IIC_sendbuye((deV1 )1); //收发信号for(count=0; 计数长度; count ({ data [ count ]=dou _ IIC _ recv byte ); if (计数!=长度-1(IIC _ nack ); //如果是最后的字节数据,则不响应,并结束(else ) IIC_ack的接收); } }dou_iic_Stop (); 返回计数; 将从//IIC读取的数据转换为浮点温度floattotemp (unsigned char * chr temp ) {float temp ); temp=(float ) ) (chrTemp[1] )8) chrTemp[0] ); temp=(浮动) ) temp * 0.02 )- 0.01 ); temp=(浮动) ) temp - 273.15; 返回时间; }void IIC_NAck () {SDA_pin=0; //写入不响应信号SCL_pin=1; dou_iic_delay2us (; SCL_pin=0; dou_iic_delay2us (; }void IIC_Ack () {SDA_pin=1; //写入响应信号SCL_pin=1; dou_iic_delay2us (; SCL_pin=0; dou_iic_delay2us (; ) 2、运行效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。