亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機溫控風扇并顯示時鐘的源程序
[打印本頁]
作者:
huangsongwqq
時間:
2017-10-7 10:48
標題:
51單片機溫控風扇并顯示時鐘的源程序
單片機課大作業,溫控風扇并能顯示時間日期
0.png
(47.21 KB, 下載次數: 56)
下載附件
2017-10-7 23:01 上傳
單片機源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#include"lcd.h"
#include"temp.h"
#include"ds1302.h"
uchar ChCh[10] = "HUANG SONG";
uchar num=0;
uchar j;
uint tp;
uint temp;
uchar a,b;
uchar datas[] = {0, 0, 0, 0, 0}; //定義數組
void LcdDisplay(int);
#define LCD1602_DATAPINS P0
////////////////////
sbit beep=P2^4;
sbit dj=P2^1;//電機控制端接口
sbit DQ=P3^7;//溫度傳感器接口
//////////按鍵接口/////////////////////////////////
sbit key1=P3^0;//設置溫度
sbit key2=P3^1;//溫度加
sbit key3=P3^2;//溫度減
//////////////////////////////////////////////////////
sbit w1=P3^3;
sbit w3=P2^2;
sbit w4=P2^3;
sbit LE=P2^0;
/////共陰數碼管段選//////////////////////////////////////////////
uchar table[22]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x00,0x38,0x76,0x00,0xff,0x37};//'-',L,H,滅,全亮,n 16-21
int wen_du=0;
uchar gao,di;//pwm
uint shang,xia; //對比溫度暫存變量
uchar dang,dang1;//檔位顯示
uchar flag;
uchar d1,d2,d3;//顯示數據暫存變量
void delay(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
/***********ds18b20延遲子函數(晶振12MHz )*******/
void display()//顯示溫度
{
w1=0;P1=table[d1];LE=1;LE=0;delay(1); w1=1;//第1位
P1=0x00;LE=1;LE=0;
w3=0;P1=table[d2]; LE=1;LE=0; delay(1);w3=1;//第3位
P1=0x00;LE=1;LE=0;
w4=0;P1=table[d3]; LE=1;LE=0; delay(1);w4=1;//第4位
P1=0x00;LE=1;LE=0;
}
void zi_keyscan()//自動模式按鍵掃描函數
{
if(key1==0)
{
delay(1);
if(key1==0)flag=1;
while(key1==0);//松手檢測
}
while(flag==1)
{
d1=18;d2=shang/10;d3=shang%10;
display();
if(key1==0)
{
delay(0.1);
if(key1==0)flag=2;
while(key1==0);//松手檢測
}
if(key2==0)
{
delay(0.1);
if(key2==0)
{
shang+=1;
if(shang>=100)shang=100;
}while(key2==0);//松手檢測
}
if(key3==0)
{
delay(0.1);
if(key3==0)
{
shang-=1;
if(shang<=10)shang=10;
}while(key3==0);//松手檢測
}
}
while(flag==2)
{
d1=17;d2=xia/10;d3=xia%10;
display();
if(key1==0)
{
delay(0.1);
if(key1==0)flag=0;
while(key1==0);//松手檢測
}
if(key2==0)
{
delay(0.1);
if(key2==0)
{
xia+=1;
if(xia>=95)xia=95;
}while(key2==0);//松手檢測
}
if(key3==0)
{
delay(0.1);
if(key3==0)
{
xia-=1;
if(xia<=0)xia=0;
}while(key3==0);//松手檢測
}
}
}
void zi_dong()//自動溫控模式
{
uchar i;
d1=dang;d2=16;d3=16;
zi_keyscan();//按鍵掃描函數
display();
if(wen_du<xia){dj=0;dang=0;}//低于下限 停止
if((wen_du>=xia)&&(wen_du<=shang))//1擋
{
dang=1;
for(i=0;i<10;i++){dj=0;display();}
for(i=0;i<10;i++){dj=1;display();}
zi_keyscan();
}
if(wen_du>shang){dj=1;dang=2;display();}//高溫全速
}
unsigned int i=0;
void main()
{
TMOD= 0x01; //配置T0為模式1
TL0=0x00;
TH0=0xDC;
TF0 = 0;
EA=1;
ET0=1;
TR0=1;
beep=1;
dj=0;
shang=30;
xia=20; //初始化LCD1602
LcdInit();
Ds1302Init();
LcdWriteCom(0xc6); //寫地址 80表示初始地址
LcdWriteData('C');
tp=Ds18b20ReadTemp();
Ds1302ReadTime();
display();
while(1)
{
temp=tp*0.0625*100+0.5;
a=temp % 10000 / 1000;
b=temp % 1000 / 100;
wen_du=a*10+b;
LcdDisplay(tp);
Delay1ms(100);//1s鐘刷一次
}
}
void T0_time() interrupt 1
{
TL0=0x00;
TH0=0xDC;
TF0=0;
TR0=0;
tp=Ds18b20ReadTemp();
Ds1302ReadTime();
dang1=dang;
if(dang1==2)
{beep=~beep;
num=num++;
if(num==10)dang1=0;}
display();
zi_dong();
TR0=1;
}
void LcdDisplay(int temp) //lcd顯示
{
unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數組
float tp;
if(temp< 0) //當溫度值為負數
{
LcdWriteCom(0xc0); //寫地址 80表示初始地址
LcdWriteData('-'); //顯示負
//因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算由?.5,還是在小數點后面。
}
else
{
LcdWriteCom(0xc0); //寫地址 80表示初始地址
LcdWriteData('+'); //顯示正
tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
//如果溫度是正的那么,那么正數的原碼就是補碼它本身
temp=tp*0.0625*100+0.5;
//留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數點后面。
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000;
datas[2] = temp % 1000 / 100;
datas[3] = temp % 100 / 10;
datas[4] = temp % 10;
LcdWriteCom(0xc1); //寫地址 80表示初始地址
LcdWriteData('0'+datas[1]); //十位
LcdWriteCom(0xc2); //寫地址 80表示初始地址
LcdWriteData('0'+datas[2]); //個位
LcdWriteCom(0xc3); //寫地址 80表示初始地址
LcdWriteData('.'); //顯示 ‘.’
LcdWriteCom(0xc4); //寫地址 80表示初始地址
LcdWriteData('0'+datas[3]); //顯示小數點
LcdWriteCom(0xc5); //寫地址 80表示初始地址
LcdWriteData('0'+datas[4]); //顯示小數點
LcdWriteCom(0x80);
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
51單片機溫控風扇源程序.zip
(69.97 KB, 下載次數: 28)
2017-10-7 10:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1