C语言代码
mah[1]=A7; mah[0]=A8; return mah; }
//----------------------------------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------------------------------//
MLX90614和单片机STC12C5604AD的SMBus,PWM通信
子文件digitalLED.c
//----------------------------------------------------------------------------------------------------------------------------------------//
//----------------------------------------------------------------------------------------------------------------------------------------// 根据计算所得数据在数字式LEDs上显示 //----------------------------------------------------------------------------------------------------------------------------------------// #include
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
相关推荐: