第一范文网 - 专业文章范例文档资料分享平台

MLX90614和STC12C5604AD的SMBus&PWM 通信

来源:用户分享 时间:2025/5/20 13:23:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

C语言代码

mah[1]=A7; mah[0]=A8; return mah; }

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------//

MLX90614和单片机STC12C5604AD的SMBus,PWM通信

子文件digitalLED.c

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// 根据计算所得数据在数字式LEDs上显示 //----------------------------------------------------------------------------------------------------------------------------------------// #include #include \ //头文件引用自身 //----------------------------------------------------------------------------------------------------------------------------------------// /定义I/O端口去控制数字式LEDs //----------------------------------------------------------------------------------------------------------------------------------------// sbit a0 = P1^7; //指定a0线给P17 sbit a1 = P1^5; //指定a1线给P15 sbit a2 = P1^6; //指定a2线给P16 //----------------------------------------------------------------------------------------------------------------------------------------// 函数名: show 功能: 在数字式LEDs上显示温度读数 参数: unsigned int mahh[],int number 注解: 显示存储在数组mahh[5]的数据 //----------------------------------------------------------------------------------------------------------------------------------------// void show(unsigned int mahh[],int number) {

unsigned char yanshicon; unsigned char weicon; unsigned char code LED_tab[10]={ 0xFC, //0 0x60, //1 0xDA, //2 0xF2, //3 0x66, //4 0xB6, //5 0xBE, //6 0xE0, //7 0xFE, //8 0xF6, //9 }; P2=0; //关显示 a0=1; a1=1; a2=1;

//a2,a1,a0控制显示位置,可由0-7之间变化 //控制显示位置,当其值为0-7时,对应数码管位1-8位 while(1) { if(++yanshicon>200) //每200个扫描周期执行一次 { yanshicon=0;

13 / 23

C语言代码

MLX90614和单片机STC12C5604AD的SMBus,PWM通信

if(++weicon>7) weicon=0; //显示位置轮流,需要严格限制范围为0-7 P2=0; //关显示 switch(weicon) { case 0: //第1位显示内容 P2=0; //关显示 a0=0; a1=0; a2=0; break; case 1: //第2位显示内容 P2=0; //关显示 a0=1; a1=0; a2=0; break; case 2: //第3位显示内容 P2=0; //关显示 a0=0; a1=1; a2=0; break; case 3: //第4位显示内容 P2=LED_tab[mahh[4]]; //显示数组mahh[4]的数值 a0=1; a1=1; a2=0; break; case 4: //第5位显示内容 P2=LED_tab[mahh[3]]; //显示数组mahh[3]的数值 a0=0; a1=0; a2=1; break; case 5: //第6位显示内容 P2=LED_tab[mahh[2]]; //显示数组mahh[2]的数值 a0=1; a1=0; a2=1; break; case 6: //第7位显示内容 P2=LED_tab[mahh[1]]; //显示数组mahh[1]的数值 a0=0; a1=1; a2=1; break; case 7: //第8位显示内容 P2=LED_tab[mahh[0]]; //显示数组mahh[0]的数值 a0=1; a1=1; a2=1; break; default: break; }

14 / 23

C语言代码

} } }

//----------------------------------------------------------------------------------------------------------------------------------------//

MLX90614和单片机STC12C5604AD的SMBus,PWM通信

2.2 写入数据到MLX90614部分(改变发射率、改变SMBus地址、改变PWMCTRL配置) 主文件SMBus.c中同样可以实现改变发射率、改变SMBus地址、改变PWMCTRL配置等功能。以下亦给出了对应的C程序,应用时只需简单地将现行主文件中的主函数(读取温度读数)替换以新的主函数(改变发射率,SMBus地址等),并在头文件里加入或减去需要或不需要的子头文件即可。

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// 功能:改变发射率 //----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// void main() { unsigned char slaveaddress; unsigned int *Emv; //定义指向整型变量的指针 unsigned int EmvLO; unsigned int EmvHI; float Emissivity=0.5; //给定一个发射率数值-用户可自己选择 Emv=dec2hex(Emissivity); //调用子函数(十进制转换为十六进制) 返回数列首地址 EmvLO=(*(Emv+2)<<4)+*(Emv+3); //载入发射率低字节 EmvHI=(*(Emv+0)<<4)+*(Emv+1); //载入发射率高字节

_SCL_IO; _SDA_OUTPUT; SCL=0; // Delay(1200); //SMBus请求时间,将PWM模式转换为SMBus模式(至少为2ms) SCL=1; // slaveaddress=MEM_READ(0x00,0x2E); //得到存于EEPROM \中的受控器件地址 EEPROM_WRITE(slaveaddress,0x24,0x00,0x00); //首先写入数据0x0000到EEPROM \ EEPROM_WRITE(slaveaddress,0x24,EmvLO,EmvHI); //写入新发射率到EEPROM \ //重启以激活 }

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------//

功能:改变SMBus 地址

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// void main() { unsigned char slaveaddress; unsigned int DataLO; unsigned int DataHI;

15 / 23

C语言代码

DataLO=0x5A; //载入受控器件地址低字节(用户需自己选择) DataHI=0x00; //载入受控器件地址高字节 _SCL_IO;

_SDA_OUTPUT;

SCL=0; // Delay(1200); //SMBus请求时间,将PWM模式转换为SMBus模式(至少为2ms) SCL=1; //

slaveaddress=MEM_READ(0x00,0x2E); //得到存于EEPROM \的旧的受控器件地址

EEPROM_WRITE(slaveaddress,0x2E,0x00,0x00); //写入数据0x0000到EEPROM \ EEPROM_WRITE(slaveaddress,0x2E,DataLO,DataHI); //写入新的受控地址到EEPROM \ //需要重启以激活 }

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// MLX90614和单片机STC12C5604AD的SMBus,PWM通信

功能:改变PWMCTRL配置,配置为PWM输出格式 //----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------// void main() { unsigned char slaveaddress; unsigned char PWMCTRLO; unsigned char PWMCTRHI; PWMCTRLO=0x07; //PWMCTRL低字节 (0x07代表选定单个PWM模式,使能PWM,并且SDA引脚设置为Push-Pull推挽式) PWMCTRHI=0x02; //PWMCTRL高字节 (0x02代表PWM周期为1.024ms*1,并且无PWM重复)

_SCL_IO;

_SDA_OUTPUT;

SCL=0; // Delay(1200); //SMBus请求时间,将PWM模式转换为SMBus模式(至少为2ms) SCL=1; //

slaveaddress=MEM_READ(0x00,0x2E); //读取存于MLX90614 EEPROM \中的SMBus地址

EEPROM_WRITE(slaveaddress,0x22,0x00,0x00); //写入数据0x0000到EEPROM \ EEPROM_WRITE(slaveaddress,0x22,PWMCTRLO,PWMCTRHI); //写入新的PWMCTRL数值到EEPROM \ //需要重启以激活 }

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------//

功能:改变PWMCTRL配置,配置为SMBus输出格式

//----------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------------------------------------------------//

16 / 23

搜索更多关于: MLX90614和STC12C5604AD的SMBus&PW 的文档
MLX90614和STC12C5604AD的SMBus&PWM 通信.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5eedo1m54t1j03v4hzhm_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top