北京科技大学天津学院信息工程系嵌入式系统及应用报告
SDA = 1;
return val; //返回读取到的数据,一个字节,八位 }
void s_transstart(void) //传输使能函数,就是给控制器引脚处相应电平,使对应模块工作 { SDA = 1; SCL = 0; QWait(); QWait(); SCL = 1; QWait(); QWait(); SDA = 0; QWait(); QWait(); SCL = 0; QWait(); QWait(); QWait(); QWait(); QWait(); SCL = 1; QWait(); QWait(); SDA = 1; QWait(); QWait(); SCL = 0; QWait(); QWait(); }
void s_connectionreset(void) {
unsigned char i;
//复位操作函数 15
北京科技大学天津学院信息工程系嵌入式系统及应用报告
SDA = 1; SCL = 0; for(i = 0;i < 9; i++) { SCL = 1; QWait(); QWait(); SCL = 0; QWait(); QWait(); }
s_transstart(); //调用开始函数 }
char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) //函数,主要统计传输的数据个数 {
unsigned er = 0; unsigned int i,j; s_transstart(); switch(mode) {
case 3 :er += s_write_byte(3); break;
case 5 :er += s_write_byte(5); break; default :break; }
for(i = 0;i < 65535;i++) {
for(j = 0;j < 65535;j++) {if(SDA == 0) { break; } }
if(SDA == 0) {
16
北京科技大学天津学院信息工程系嵌入式系统及应用报告
break; } } if(SDA) { er += 1; }
*(p_value) = s_read_byte(ACK); *(p_value + 1) = s_read_byte(ACK); *p_checksum = s_read_byte(noACK); d6 = *(p_value); d7=*(p_value + 1); return er; }
void calc_sth11(float *p_humidity ,float *p_temperature)//计算温度值 {
const float C1 =- 4.0; const float C2 =+ 0.0405; const float C3 =- 0.0000028; const float T1 =+ 0.01; const float T2 =+ 0.00008; float rh =* p_humidity; float t =* p_temperature; float rh_lin; float rh_true; float t_C;
t_C = t * 0.01 - 44.0 ;
rh_lin = C3 * rh * rh + C2 * rh + C1;
rh_true = (t * 0.01 - 40.0 - 25) * (T1 + T2 * rh) + rh_lin; if(rh_true > 100) {
rh_true = 100; }
if(rh_true < 0.1) {
rh_true = 0.1; }
*p_temperature = t_C;
17
北京科技大学天津学院信息工程系嵌入式系统及应用报告
*p_humidity = rh_true; }
void main() //主函数 {
value humi_val,temp_val; //声明两个联合体变量
unsigned char error,checksum; //声明两个无符号的字符型变量 initUART(); //初始化串口
P1INP |= 0xC0; //初始化P1引脚 , 0xC0 = 1010 0000 ,使P1_7和P1_5引脚为1
begin = 0;
s_connectionreset(); while(1) //无限循环操作 { error = 0;
error += s_measure((unsigned char*) &humi_val.i,&checksum,5); //读入串口的数据进行温度的计算 d1 = d6; d2 = d7;
error += s_measure((unsigned char*) &temp_val.i,&checksum,3); d3 = d6; d4 = d7; if(error != 0) s_connectionreset(); else {
humi_val.f = (float)humi_val.i; temp_val.f = (float)temp_val.i; humi_val.f = d1 * 256 + d2; temp_val.f = d3 * 256 + d4;
calc_sth11(&humi_val.f,&temp_val.f);
printf(\ // printf(\ //printf(\ }
Wait(150); } }
18
北京科技大学天津学院信息工程系嵌入式系统及应用报告
四、设计调试和心得体会
系统软件的主程序是调用子程序的,它是所有子程序在功能上的汇总,是整个程序的“首脑”,CPU是从从主程序开始读程序的,所以主程序的设计尤为重要。这个系统软件的主程序主要完成温度在4位8段的数码管上显示温度的功能。
4.1功能实现分析
该硬件电路在最后测试中实现了准确的温湿度采集、能够传给KL25芯片发送采集到得参数。基本实现了设计任务,并可根据外界运用需要更换和外扩其他功能传感器。
4.2 心得体会
经过一个礼拜设计,调试和实践,我们已经在电路板上成功仿真运行了显示模块和温湿度测试模块。仿真运行结果符合最初的实验设计要求。
唯有实践方能出真知,这次做的产品给我们上了一次很生动的课。总的来说 这次实践,我们学到许多,不仅仅是书本或者是网上的资料给我们的知识,更重要的是动手实践后的体会,感悟。
由于时间的原因在设计过程中不能很好的做出我们设计所要达到的要求,对于以上的不足,我们只有通过以后的努力不断的提升。在设计中我们基本实现了温湿度的读取,在后级电路中由于个人能力有限,而不能实现后级驱动电路,在这方面我相信在以后的学习生涯中能得到解决,
最后我要感谢我的导师陈儒敏老师,在他的帮助下我们做好了基于KL25芯片温湿度控制系统的课程设计,同时我也要感谢那些在我遇到难题时候给予我帮助的同学和好友。
19