標(biāo)題: 基于51單片機(jī)的智能電風(fēng)扇設(shè)計(jì) [打印本頁]
作者: 1731062422 時(shí)間: 2017-11-10 14:19
標(biāo)題: 基于51單片機(jī)的智能電風(fēng)扇設(shè)計(jì)
以前寫過的一個(gè)東西 有三檔調(diào)節(jié) 可以報(bào)警
#include <reg52.H>
#include <intrins.H>
#include <math.H>
#define uchar unsigned char
#define uint unsigned int
sbit led1 = P1^2;
sbit OUTPUT = P3^2; //電機(jī)驅(qū)動位1
sbit OUTPUT_0 = P3^3; //電機(jī)驅(qū)動位2
sbit RS = P1^1; //LCD命令及指令聲明
sbit LCDEN = P1^0; //LCD信號使能端聲明
sbit set_warn_temp = P1^4; //設(shè)置報(bào)警溫度
sbit KEY_F_UP = P1^5; //頻率上調(diào)按鈕;
sbit KEY_F_DOWN = P1^6; //頻率下調(diào)按鈕;
sbit KEY_F_auto = P1^7; //智能與手動轉(zhuǎn)換調(diào)速位
int feq,flag_c = 1,flag_auto = 1; //頻率初值相關(guān)位、檔位標(biāo)志位、智能與手動轉(zhuǎn)換調(diào)速位轉(zhuǎn)換標(biāo)志位
uint temp_2,warn_temp = 28; //提取溫度
void delayMs(uint a) //毫秒延時(shí)函數(shù)
{
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--);
}
void t_init() //定時(shí)器初始化
{
TMOD=0x01; //定時(shí)器0和定時(shí)器1都工作在方式1,16位計(jì)數(shù)器;
TH0 = 1000/256;
TL0 = 1000%256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void key_scan() //按鍵掃描
{
if(set_warn_temp == 0) //頻率上調(diào)鍵按下;
{
delayMs(5);
if(set_warn_temp == 0) //增大檔位
{
warn_temp++;
while(set_warn_temp == 0);
}
}
if(KEY_F_UP == 0) //頻率上調(diào)鍵按下;
{
delayMs(5);
if(KEY_F_UP == 0) //增大檔位
{
flag_c++;
if(flag_c > 3)
flag_c = 3;
while(KEY_F_UP == 0);
}
}
else if(KEY_F_DOWN == 0) //減小檔位
{
delayMs(5);
if(KEY_F_DOWN == 0)
{
flag_c--;
if(flag_c < 0)
flag_c = 0;
while(KEY_F_DOWN == 0);
}
}
else if(KEY_F_auto == 0) //智能與手動轉(zhuǎn)換;
{
delayMs(5);
if(KEY_F_auto == 0)
{
flag_auto = ~flag_auto;
while(KEY_F_auto == 0);
}
}
}
void flag_auto_change() //檔位隨溫度智能轉(zhuǎn)換
{
if(flag_auto == 1)
{
if(temp_2< 25)
{
flag_c = 0;
}
else if((temp_2>=27) && (temp_2<=29))
{
flag_c=1;
}
elseif((temp_2 >= 30) && (temp_2 <= 32))
{
flag_c = 2;
}
elseif((temp_2 >= 33 )&&( temp_2 <= 34) )
{
flag_c = 3;
}
}
}
void flag_feq() //檔位標(biāo)志位與頻率的轉(zhuǎn)換
{
if(flag_c == 0)
{
TR0 = 0;
OUTPUT = 0;
}
else
{
TR0 = 1;
switch(flag_c)
{
case 1:
feq = 63000;
break;
case 2:
feq = 33000;
break;
case 3:
feq = 13000;
break;
default:
break;
}
}
}
void timer0() interrupt 1 //定時(shí)器中斷函數(shù)
{
TH0 = (65536-feq)/256;
TL0 = (65536-feq)%256;
//TR1=1; //開定時(shí)器1;
OUTPUT = ~OUTPUT;
}
//LCD部分
void delayUs() //毫秒延時(shí)函數(shù)
{
_nop_();
}
void writeComm(uchar comm) //LCD命令函數(shù)
{
RS = 0;
P2 = comm;
LCDEN = 1;
delayUs();
LCDEN = 0;
delayMs(1);
}
void writeData(uchar dat) //寫數(shù)據(jù):RS=1,RW=0;
{
RS = 1;
P2 = dat;
LCDEN = 1;
delayUs();
LCDEN = 0;
delayMs(1);
}
voidinit() //LCD初始化
{
// dula = wela = 0;
writeComm(0x38);
writeComm(0x0c);
writeComm(0x06);
writeComm(0x01);
}
void writeString(uchar * str, uchar length) //送字符函數(shù)
{
uchar i;
for(i = 0; i < length; i++)
{
writeData(str);
}
}
/**//*****************************DS18B20溫度部分*******************************/
sbitds = P3^7; //溫度計(jì)IO引腳
void dsInit()
{
unsigned int i;
ds = 0;
i= 100;
while(i>0)
i--;
ds = 1;
i= 4;
while(i>0)
i--;
}
void dsWait()
{
unsigned int i;
while(ds);
while(~ds);
i = 4;
while(i > 0)
i--;
}
bit readBit()
{
unsigned int i;
bit b;
ds = 0;
i++;
ds = 1;
i++;
i++;
b= ds;
i= 8;
while(i>0) i--;
return b;
}
unsigned char readByte()
{
unsigned int i;
unsigned char j, dat;
dat = 0;
for(i=0; i<8; i++)
{
j = readBit();
dat = (j << 7) | (dat >> 1);
}
return dat;
}
void writeByte(unsigned char dat)
{
unsigned int i;
unsigned char j;
bit b;
for(j = 0; j < 8; j++)
{
b = dat & 0x01;
dat >>= 1;
if(b)
{
ds = 0;
i++;
i++;
ds = 1;
i = 8;
while(i>0)i--;
}
else
{
ds = 0;
i = 8;
while(i>0)
i--;
ds = 1;
i++;
i++;
}
}
}
void sendChangeCmd()
{
dsInit();
writeByte(0xcc);
writeByte(0x44);
}
void sendReadCmd()
{
dsInit();
writeByte(0xcc);
writeByte(0xbe);
}
int getTmpValue()
{
unsigned int tmpvalue;
int value;
float t;
unsigned char low, high;
sendReadCmd();
low = readByte();
high = readByte();
tmpvalue = high;
tmpvalue <<= 8;
tmpvalue |= low;
value = tmpvalue;
\
t= value * 0.0625;
\
value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5
return value;
}
void display(int v) //LCD顯示函數(shù)
{
uinta,b;
unsigned char count;
unsigned char datas[] = {0, 0, 0, 0, 0};
unsigned int tmp = abs(v);
uchar table[] = "warning";
uchar table1[] = "safe ";
datas[0] = tmp / 10000;
datas[1] = tmp % 10000 / 1000;
datas[2] = tmp % 1000 / 100;
datas[3] = tmp % 100 / 10;
datas[4] = tmp % 10;
a= datas[2];
b= datas[1];
temp_2= b * 10 + a;
if(temp_2 > warn_temp)
{
writeComm(0x80+ 9);
writeString(table, 7);
}
if(temp_2 <= warn_temp)
{
writeComm(0x80 + 9);
writeString(table1, 7);
}
writeComm(0x80+0x40);
if(v < 0)
{
writeString("- ", 2);
}
else
{
writeString("+ ", 2);
}
if(datas[0] != 0)
{
writeData('0' + datas[0]);
}
for(count = 1; count != 5; count++)
{
writeData('0' + datas[count]);
if(count == 2)
{
writeData('.');
}
}
flag_auto_change(); //檔位隨溫度智能轉(zhuǎn)換
writeComm(0x80+ 6);
writeData(0x30 + flag_c);
writeComm(0x80+ 0x40 + 13);
writeData(0x30 + warn_temp / 10);
writeData(0x30+ warn_temp % 10);
}
/*************************主函數(shù)部分***********************/
void main()
{
uchartable_lev[] = "level:" ;
uchartable_set[] = "set:" ;
sendChangeCmd();
init(); //LCD初始化
t_init(); //定時(shí)器初始化
OUTPUT_0= 0; //給電機(jī)驅(qū)動一端始終賦零
writeComm(0x80);
writeString(table_lev, 6);
writeComm(0x80 + 0x40 + 9);
writeString(table_set, 4);
while(1)
{
delayMs(1000); //溫度轉(zhuǎn)換時(shí)間需要750ms以上
key_scan(); //按鍵掃描
display(getTmpValue()); //顯示
flag_feq(); //檔位標(biāo)志位與頻率的轉(zhuǎn)換
sendChangeCmd();
}
}
file:///C:/Users/Liu/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品成人av
|
天天综合久久
|
久久精品国产一区
|
久久精品1|
午夜小视频在线播放
|
新超碰97
|
美女一区|
久久久人成影片免费观看
|
91九色在线观看
|
亚洲一区二区在线电影
|
激情三区
|
国产综合网站
|
在线看片网站
|
91精品久久久久久久久久小网站
|
欧美不卡
|
成人免费视频网站在线看
|
久久青
|
一区在线观看
|
日日做夜夜爽毛片麻豆
|
91久色
|
av在线成人|
黄色高清视频
|
希岛爱理在线
|
国产高潮好爽受不了了夜夜做
|
中文字幕乱码视频32
|
夜夜操天天操
|
亚洲视频在线看
|
亚洲一区在线观看视频
|
成人网av|
国产精品久久久久9999鸭
|
国产xxxx岁13xxxxhd|
网色
|
日韩在线视频一区
|
欧美一区二区在线
|
欧美性生活视频
|
日韩久久久久久久久久久
|
精品av久久久久电影
|
一级黄色短片
|
欧美激情 一区
|
日韩成人
|
国产欧美精品一区二区色综合朱莉
|