欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機+DHT11怎么在數碼管上顯示溫濕度上下限閾值,并通過按鍵調節?
[打印本頁]
作者:
菜鳥不會單片機
時間:
2020-6-3 22:11
標題:
單片機+DHT11怎么在數碼管上顯示溫濕度上下限閾值,并通過按鍵調節?
要用DHT11在數碼管上顯示當前溫濕度,并且可以通過按鍵設置閾值,同時能用串口通信發送相關數據到串口仿真終端。
現已經能實現顯示當前溫濕度,并可以靠按住按鍵1、2顯示濕度或溫度的上下限,串口內容能夠勉強過關。
但是通過按鍵調節閾值卻始終實現不了,同時我發現我的按鍵掃描函數是有bug的,按鍵一按下并彈起,實際上等同于我期望達到的按鍵二按下的效果。該BUG我理解發生原因,但是不知道怎么比較好的解決。
(因不明原因,PROTEUS文件在上傳前一會崩潰,一旦開始仿真就會閃退)
核心問題:DHT11怎么在數碼管上顯示溫濕度上下限閾值,并通過按鍵調節?
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
無標題.png
(148.87 KB, 下載次數: 20)
下載附件
2020-6-3 22:10 上傳
單片機源程序如下:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define cmd_8155 XBYTE[0x8000]
#define pb_8155 XBYTE[0x8002]
#define pc_8155 XBYTE[0x8003]
sbit dht=P1^0;
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit k6=P1^6;
sbit rled=P3^2;
sbit tled=P3^3;
unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極0~9編碼
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x76,0x38};//共陰極0~9+H、L編碼
unsigned char DisBuff[5]={0,0,0,0,0};
unsigned char a[5]={0,0,0,0,0};
uchar k;
signed char R;//濕度
signed char T;//溫度
unsigned char key_value;//按鍵值
unsigned char WRH=85,WRL=35,WTH=40,WTL=15;
uint flag=0,c;
void delay_ms(unsigned int cnt) //延時函數ms
{
unsigned int x;
for( ; cnt>0; cnt--)
{
for(x=110; x>0; x--);//軟件延時為1MS
}
}
void delay_us(unsigned int cnt) //延時函數us
{
while(cnt--);
}
void DHT11_delay_us(unsigned char n)//DHT延時函數us
{
while(--n);
}
void DHT11_delay_ms(unsigned int z)//DHT延時函數ms
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void DHT11_start()//DHT啟動函數
{
dht=1;
DHT11_delay_us(2);
dht=0;
DHT11_delay_ms(30); //延時18ms以上
dht=1;
DHT11_delay_us(30);
}
unsigned char DHT11_rec_byte() //接收一個字節
{
unsigned char i,dat=0;
for(i=0;i<8;i++) //從高到低依次接收8位數據
{
while(!dht); ////等待50us低電平過去
DHT11_delay_us(8); //延時60us,如果還為高則數據為1,否則為0
dat<<=1; //移位使正確接收8位數據,數據為0時直接移位
if(dht==1) //數據為1時,使dat加1來接收數據1
dat+=1;
while(dht); //等待數據線拉低
}
return dat;
}
void DHT11_receive() //接收40位的數據
{
unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(dht==0)
{
while(dht==0); //等待拉高
DHT11_delay_us(40); //拉高后延時80us
R_H=DHT11_rec_byte(); //接收濕度高八位
R_L=DHT11_rec_byte(); //接收濕度低八位
T_H=DHT11_rec_byte(); //接收溫度高八位
T_L=DHT11_rec_byte(); //接收溫度低八位
revise=DHT11_rec_byte();//接收校正位
DHT11_delay_us(25); //結束
if((R_H+R_L+T_H+T_L)==revise) //校正
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
R=RH;
T=TH;
}
}
void key(){
if(k1==0&&flag==0){
flag=1;}
if(k1==1&&flag==1){
c=0;
flag=0;}
if(k2==0&&flag==0){
flag=1;}
if(k2==1&&flag==1){
c=1;
flag=0;}
if(k3==0&&flag==0){
flag=1;}
if(k3==1&&flag==1){
c=2;
flag=0;}}
void disr()//展示濕度上下限
{
unsigned char i,j,rn[6]={11,0,0,10,0,0};
rn[1]=WRH/10;
rn[2]=WRH%10;
rn[4]=WRL/10;
rn[5]=WRL%10;
SP = 0x60;
cmd_8155 = 0x0e;
pc_8155=0;
for(k=0;k<200;k++){
j=32;
for(i=0;i<6;i++)
{ pb_8155 = table[rn[i]];
delay_us(10);
pc_8155 = j;
j = j/2;
}
delay_ms(1);}}
void dist()//展示溫度上下限
{
unsigned char i,j,tn[6]={11,0,0,10,0,0};
tn[1]=WTH/10;
tn[2]=WTH%10;
tn[4]=WTL/10;
tn[5]=WTL%10;
SP = 0x60;
cmd_8155 = 0x0e;
pc_8155=0;
for(k=0;k<200;k++){
j=32;
for(i=0;i<6;i++)
{ pb_8155 = table[tn[i]];
delay_us(10);
pc_8155 = j;
j = j/2;
}delay_ms(1);}}
void display() //展示當前溫濕度
{
unsigned char i,j,shu[6]={0,0,0,0,0,0};
shu[0]=R/10;
shu[1]=R%10;
shu[4]=T/10;
shu[5]=T%10;
SP = 0x60;
cmd_8155 = 0x0e;
pc_8155=0;
for(k=0;k<200;k++)
{
j = 32;
for(i=0;i<6;i++)
{
pc_8155 = 0x00;
delay_us(10);
pb_8155 = s[shu[i]];
pc_8155 = j;
j = j/2;
delay_us(10);
}}delay_ms(1);}
void initscon(){//初始化串口
SCON=0X40;
TMOD=0X20;
PCON=0X00;
TH1=0xfd;
TL1=0xfd;
ES=0;
ET1=0;
TR1=1;
}
void send(){//向串口發送數據
uchar i;
initscon();
for(i=0;i<4;i++){
SBUF=a[i];
while(TI==0);
TI=0;}}
void main(void)//主函數
{ while(1){
DHT11_receive();//讀取溫濕度
a[0]=R/10;
a[1]=R%10;
a[2]=T/10;
a[3]=T%10;
send();
key();
switch(c){
case 0:display();break;
case 1:disr();break;
case 2:dist();break;}
if(R>WRH||R<WRL){
rled=0;}else{
rled=1;}
if(T>WTH||T<WTL){
tled=0;}else{
tled=1;}
}}
復制代碼
全部資料51hei下載地址:
DHT11.rar
(36.9 KB, 下載次數: 39)
2020-6-3 22:04 上傳
點擊文件名下載附件
作者:
gemxie
時間:
2020-6-28 11:39
你給的壓縮包里面是可以的嗎??
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1