完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一直这么显示 Build target 'Target 1' compiling window.c... window.c(3): warning C318: can't open file '18b20.h' WINDOW.C(76): warning C206: 'ReadTemperature': missing function-prototype WINDOW.C(103): warning C280: 'j': unreferenced local variable window.c(193): warning C318: can't open file '18b20.h' WINDOW.C(246): error C231: 'ReadTemperature': redefinition WINDOW.C(282): error C231: 'ReadTemperature': redefinition Target not created #include #include #include "18b20.h" 3 #define uchar unsigned char//uchar 的范围是0~255 #define uint unsigned int//uint 无符号整型 范围是0~65535 ***it MOTOR1 = P1^5;//电机控制端口1 ***it MOTOR = P1^4;//电机控制端口0 ***it K3 = P3^4; ***it K2 = P3^3; ***it K1 = P3^2;//定义3个按键 ***it ADC_CS =P1^0; ***it ADC_CLK=P1^1; ***it ADC_DO =P1^2; ***it ADC_DI =P1^3;//AD 4个控制引脚 #define ZHENG_ZHUAN MOTOR1 = 0,MOTOR = 1 #define FAN_ZHUAN MOTOR1 = 1,MOTOR = 0 #define STOP MOTOR1 = 1,MOTOR = 1 void delayms(unsigned int i)//延时1ms { unsigned int j; for(;i>0;i--) for(j=0;j<125;j++); } void Delay(unsigned int i)//延时1ms { unsigned int j; for(;i>0;i--) for(j=0;j<125;j++); } void KeyScan() //按键检测 { if (K1 == 0) //k1按下 { delayms(10); //消除抖动 if ( K1 == 0)// k1按下,模拟有液滴,先正转,在反转 { ZHENG_ZHUAN;//开启电机 delayms(2000);// 延时3s左右 STOP; delayms(1000); } while(!K1);//直到按键弹起,没有液滴了,接下来反转 FAN_ZHUAN; delayms(2000);//延时3s左右 STOP; } if (K2== 0) { delayms(10); if ( K2 == 0) //同上,模拟遥控开窗 { ZHENG_ZHUAN;//开启电机 正转 delayms(2000);//延时3s左右 STOP; } while(!K2); } if (K3 == 0) { delayms(10); if ( K3 == 0) //同上,模拟遥控关窗 { FAN_ZHUAN;//开启电机,反转 delayms(2000);//延时3s左右 STOP; } while(!K3); } } void ReadTemp() { static bit zheng_flag = 0;//代表是否完成转动 static bit fan_flag = 1;//代表是否完成转动 int tmp = 0;//定义临时变量 tmp = ReadTemperature();//读取温度,温度保存在tmp临时变量 76 P0 = tmp; if (tmp < 30)//如果温度超过警戒温度 { if (zheng_flag == 0) { ZHENG_ZHUAN;//开启电机 正转 delayms(2000);//延时3s左右 STOP; delayms(100); zheng_flag = 1;//已经完成正转了 fan_flag = 0;//清楚反转标志 } } else//否则正常 { if (fan_flag == 0) { FAN_ZHUAN;//开启电机,反转 delayms(2000);//延时3s左右 STOP; delayms(100); fan_flag = 1;//已经完成了反转 zheng_flag = 0;//清楚正转标志 } } } unsigned char ReadADC(char j) //把模拟电压值转换成8位二进制数并返回 103 { unsigned char i,ch,adval;; ch=0; ADC_CS=0; ADC_DO=0;//片选,DO为高阻态 for(i=0;i<10;i++) {;} ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); //第一个脉冲,起始位 ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); //第二个脉冲,DI=1表示双通道单极性输入 ADC_CLK=0; Delay(2); ADC_DI=1; ADC_CLK=1; Delay(2); //第三个脉冲,DI=1表示选择通道1(CH2) ADC_DI=0; ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备 ADC_CLK=1; Delay(2); ADC_CLK=0; Delay(2);//经实验,这里加一个脉冲AD便能正确读出数据, //不加的话读出的数据少一位(最低位d0读不出? for(i=0;i<8;i++) { ADC_CLK=1; Delay(2); ADC_CLK=0; Delay(2); ch=(ch<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数 } ADC_CS=1;//取消片选,一个转换周期结束 adval=ch; return adval; } void LightControl() { static bit zheng_flag = 0;//代表是否完成转动 static bit fan_flag = 1;//代表是否完成转动 uchar tmp = 0; tmp = ReadADC(0);//读取AD值 if (tmp < 150)//当前光照比较强 { if (zheng_flag == 0) { ZHENG_ZHUAN;//开启电机 正转 delayms(2000);//延时3s左右 STOP; delayms(100); zheng_flag = 1;//已经完成正转了 fan_flag = 0;//清除反转标志 } } else//否则正常 { if (fan_flag == 0) { FAN_ZHUAN;//开启电机,反转 delayms(2000);//延时3s左右 STOP; delayms(100); fan_flag = 1;//已经完成了反转 zheng_flag = 0;//清除正转标志 } } } void main()//主函数 { int tmp = 0; while((tmp = ReadTemperature())>= 85);//温度传感器刚上电的时候读取前几组温度不准确,这个是为了排除温度不准确 while(1) { KeyScan();//按键检测 ReadTemp();//获取温度信息 LightControl();//光线控制 delayms(100); } } #include "18b20.h" 193 #include ***it DQ = P2^5; //定义通信端口 unsigned char sign; void delay_18B20(unsigned int i) { while(i--); } //初始化函数 void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时 大于480us DQ = 1; //拉高总线 delay_18B20(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20); } //读一个字节 unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); } return(dat); } //写一个字节 void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; } } //读取温度 long int ReadTemperature(void) { 246 unsigned char a=0; unsigned char b=0; long int t=0,temp1=0; float tt; char flag = 1; Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 delay_18B20(100); a=ReadOneChar(); b=ReadOneChar(); Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 //传感器返回值除16得实际温度值 //为了得到2位小数位,先乘100,再除16,考虑整型数据长度, //技巧处理后先乘25,再除4,除4用右移实现 temp1 = b; temp1 <<= 8; temp1 = temp1|a; if ( temp1 < 0x800) { flag = 0; } else if ( temp1 >= 0x800) { flag = 1; temp1 = ~temp1 + 1; } tt = temp1 * 0.0625; temp1 = tt + 0.5; // 四舍五入 if (flag == 1) temp1= temp1 *(-1); return temp1;} 283 |
|
相关推荐
|
|
不能打开头文件!
|
|
|
|
|
|
把格式弄好看一点,你自己复制粘贴,别人一眼都不会看你的,
|
|
|
|
|
|
1441 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1373 浏览 3 评论
3018 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1519 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1949 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 03:45 , Processed in 0.575437 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号