|
自己寫了一個(gè)單片機(jī)程序,用oled顯示溫度值,P2.5口輸出pwm。驅(qū)動部分令wen_du=temper,但是這條指令沒用,temper的值并沒有附給wen_du,并且也不能直接使用temper跟設(shè)定值d1、d2、d3、d4比較,兩種方式執(zhí)行的都是第一條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(); //溫度轉(zhuǎn)換
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;//關(guān)閉風(fēng)扇
OLED_P16x16Ch(40,6,9); //風(fēng)扇關(guān)閉
OLED_P16x16Ch(56,6,10);
OLED_P16x16Ch(72,6,11);
OLED_P16x16Ch(88,6,12);
}
}
//--------------------輸出函數(shù)---------------
void output(char on)
{
char i;
for(i=0;i<10;i++)//循環(huán)
{
motor=1;//輸出高電平
delay1ms(on);//延遲on時(shí)間
motor=0;//輸出低電平
delay1ms(100-on);//延遲100-on時(shí)間
}
}
//-------------------延遲函數(shù)-------------
void delay1ms(int a)
{
int i,j;
for(i=0;i<a;i++)//外循環(huán)
for(j=0;j<120;j++);//內(nèi)循環(huán)
} //延遲函數(shù)結(jié)束
|
|