自己写了一个单片机程序,用oled显示温度值,P2.5口输出pwm。驱动部分令wen_du=temper,但是这条指令没用,temper的值并没有附给wen_du,并且也不能直接使用temper跟设定值d1、d2、d3、d4比较,两种方式执行的都是第一条if语句。拜托各位帮忙分析下!
#include <reg52.h>
#include "oled.h"
#include "ds18b20.h"
uint temper; //存放温度值
uint wen_du;
uint d4=34;
uint d3=31;
uint d2=28;
uint d1=25;
sbit motor=P2^5;
void wen_kong();
void output(char);
void delay1ms(int);
void main()
{
OLED_Init(); //OLED初始化
OLED_P16x16Ch(0,2,3);//温
OLED_P16x16Ch(16,2,4);//度
OLED_P16x16Ch(80,2,5);//℃
OLED_P8x16Ch(32,2,13);//冒号
while(1)
{
temper = getTmpValue(); //获取温度
ds18b20_sendChangeCmd(); //温度转换
dis_temper(48, 2, temper); //显示温度
wen_kong();//温控模式
}
}
void wen_kong()
{
if(wen_du>=d4)
{
output(96);//
OLED_P8x16Ch(48,6,4);
OLED_P16x16Ch(56,6,0); //4档
}
else if(wen_du>=d3)
{
output(72);//
OLED_P8x16Ch(48,6,3);
OLED_P16x16Ch(56,6,0); //3档
}
else if(wen_du>=d2)
{
output(48);//
OLED_P8x16Ch(48,6,2);
OLED_P16x16Ch(56,6,0); //2档
}
else if(wen_du>=d1)
{
output(24);//
OLED_P8x16Ch(48,6,1);
OLED_P16x16Ch(56,6,0); //1档'
}
else
{
motor=0;//关闭风扇
OLED_P16x16Ch(40,6,9); //风扇关闭
OLED_P16x16Ch(56,6,10);
OLED_P16x16Ch(72,6,11);
OLED_P16x16Ch(88,6,12);
}
}
//--------------------输出函数---------------
void output(char on)
{
char i;
for(i=0;i<10;i++)//循环
{
motor=1;//输出高电平
delay1ms(on);//延迟on时间
motor=0;//输出低电平
delay1ms(100-on);//延迟100-on时间
}
}
//-------------------延迟函数-------------
void delay1ms(int a)
{
int i,j;
for(i=0;i<a;i++)//外循环
for(j=0;j<120;j++);//内循环
} //延迟函数结束
|