欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
如何根據(jù)這個單片機程序來畫出流程圖呢?求指導(dǎo)
[打印本頁]
作者:
Amani123
時間:
2021-4-3 18:00
標(biāo)題:
如何根據(jù)這個單片機程序來畫出流程圖呢?求指導(dǎo)
由于本論壇禁止伸手黨,所以向大家請教一下大致的實現(xiàn)方法與思路,理清頭緒后我自己來實現(xiàn),謝謝大家
流程圖,是51單片機連mq2氣體傳感器,LED燈,光敏,風(fēng)扇,1602a液晶,溫濕度傳感器進(jìn)行工作
有鍵盤:溫度,濕度和切換+-模式,有上極限值
***************************main.c**********************
#include "stc12c5a60s2.h"
#include "intrins.h"
#include "stdio.h"
#include "math.h"
#include "string.h"
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define u8 unsigned char
#define u16 unsigned int
#define vu8 unsigned char
#define vu16 unsigned int
#define vu32 unsigned long int
vu8 sys[4];
vu8 dat11[5];
void delayms(int z)//延時函數(shù)
{
int x,y;
for(x=110*6;x>0;x--)
for(y=z;y>0;y--);
}
#define delay_ms delayms
#include "1602_12864.h"
#include "eeprom.h"
#include "adc.h"
#include "usart.h"
#include "ds18b20.h"
#include "dht11.h"
#include "display.h"
#include "int.h"
sbit k1=P2^5;
sbit k2=P2^6;
sbit k3=P2^7;
sbit fs=P1^5;
sbit led=P1^6;
sbit gm=P1^3;
vu8 CardID[4];
void main(void)//
{
vu16 i,status,k,mq2;
LCD_Init();//液晶初始化
Usart_Config(1);//串口1初始化
Timer0_Init();//定時器0初始化
SysRead((u8 *)&sys[0],4);//系統(tǒng)讀取參數(shù)
InitADC();
while(1)
{
mq2=GetADCResult(7)/(1024.0/99.0);//mq-2氣體傳感器
DH11_GetTempDamp();//dht11溫濕度傳感器
if(gm==1)
led=0;//開燈
else
led=1;//關(guān)燈
display2(TempNow,DampNow,&sys[0],&sys[1]);
if((TempNow>sys[0])||(DampNow>sys[1])) //風(fēng)扇
{
fs=0;//打開風(fēng)扇
}
else
{
fs=1;//關(guān)閉
}
k++;
if(k>12) //通過SIM800a模塊發(fā)送數(shù)據(jù)給手機app
{
k=0;
sendchar(1,'S');//固定字符S
sendchar(1,'0');
sendchar(1,'1');
sendchar(1,'0');
sendchar(1,TempNow/10+48);
sendchar(1,TempNow%10+48);
sendchar(1,',');
sendchar(1,DampNow/10+48);
sendchar(1,DampNow%10+48);
sendchar(1,',');
sendchar(1,mq2/10+48);
sendchar(1,mq2%10+48);
sendchar(1,',');
sendchar(1,(vu8)gm+48);
sendchar(1,'E');//固定字符E
}
delayms(100);
}
}
************************1602a液晶顯示器****************************
display.h
#define disname1 "T1"
#define disname2 "T2"
#define disname3 "T3"
#define disname4 "T4"
#define disname1max 99
#define disname2max 99
#define disname3max 99
#define disname4max 99
sbit keys=P2^5;
sbit key1=P2^6;
sbit key2=P2^7;
sbit key3=P3^7;
sbit key4=P2^4;
vu8 AddFlag=0;
//display2(TempNow,DampNow,&sys[0],&sys[1]);
void display1(vu8 a1,vu8 *val1h)//只顯示一組比較值
{
if(keys==0)
{
(*val1h)--;
if((*val1h)>disname1max)
(*val1h)=disname1max;
SysSave((u8 *)&sys[0],2);
}
if(key1==0)
{
(*val1h)++;
if((*val1h)>disname1max)
(*val1h)=0;
SysSave((u8 *)&sys[0],2);
}
LCD_DisStr(0,0,disname1);
LCDW_Dat(':');
LCDW_Dat(a1/10+48);
LCDW_Dat(a1%10+48);
LCD_DisStr(1,0,"H:");
LCDW_Dat(*(val1h)/10+48);
LCDW_Dat(*(val1h)%10+48);
}
void display2(vu8 a1,vu8 a2,vu8 *val1h,vu8 *val2h)
{
if(keys==0)
{
delayms(10);
if(keys==0)
AddFlag=1-AddFlag;
while(keys==0);
}
if(key1==0)
{
if(AddFlag==0)
{
(*val1h)++;
if((*val1h)>disname1max)
(*val1h)=0;
}
else
{
(*val1h)--;
if((*val1h)>disname1max)
(*val1h)=disname1max;
}
SysSave((u8 *)&sys[0],2);
}
if(key2==0)
{
if(AddFlag==0)
{
(*val2h)++;
if((*val2h)>disname2max)
(*val2h)=0;
}
else
{
(*val2h)--;
if((*val2h)>disname2max)
(*val2h)=disname2max;
}
SysSave((u8 *)&sys[0],2);
}
LCD_DisStr(0,0,disname1);
LCDW_Dat(':');
LCDW_Dat(a1/10+48);
LCDW_Dat(a1%10+48);
LCD_DisStr(0,12,"H:");
LCDW_Dat(*(val1h)/10+48);
LCDW_Dat(*(val1h)%10+48);
LCD_DisStr(1,0,disname2);
LCDW_Dat(':');
LCDW_Dat(a2/10+48);
LCDW_Dat(a2%10+48);
LCD_DisStr(1,12,"H:");
LCDW_Dat(*(val2h)/10+48);
LCDW_Dat(*(val2h)%10+48);
}
//顯示4個參數(shù),可調(diào)其值
void display4(vu8 *val1,vu8 *val2,vu8 *val3,vu8 *val4)
{ if(keys==0)
{
delayms(10);
if(keys==0)
AddFlag=1-AddFlag;
while(keys==0);
}
if(key1==0)
{
if(AddFlag==0)
{
(*val1)++;
if((*val1)>disname1max)
(*val1)=0;
}
else
{
(*val1)--;
if((*val1)>disname1max)
(*val1)=disname1max;
}
SysSave((u8 *)&sys[0],4);
}
if(key2==0)
{
if(AddFlag==0)
{
(*val2)++;
if((*val2)>disname2max)
(*val2)=0;
}
else
{
(*val2)--;
if((*val2)>disname2max)
(*val2)=disname2max;
}
SysSave((u8 *)&sys[0],4);
}
if(key3==0)
{
if(AddFlag==0)
{
(*val3)++;
if((*val3)>disname3max)
(*val3)=0;
}
else
{
(*val3)--;
if((*val3)>disname3max)
(*val3)=disname3max;
}
SysSave((u8 *)&sys[0],4);
}
if(key4==0)
{
if(AddFlag==0)
{
(*val4)++;
if((*val4)>disname4max)
(*val4)=0;
}
else
{
(*val4)--;
if((*val4)>disname4max)
(*val4)=disname4max;
}
SysSave((u8 *)&sys[0],4);
}
LCD_DisStr(0,0,disname1);
LCDW_Dat(':');
LCDW_Dat(*(val1)/10+48);
LCDW_Dat(*(val1)%10+48);
LCD_DisStr(0,16-strlen(disname2)-3,disname2);
LCDW_Dat(':');
LCDW_Dat(*(val2)/10+48);
LCDW_Dat(*(val2)%10+48);
LCD_DisStr(1,0,disname3);
LCDW_Dat(':');
LCDW_Dat(*(val3)/10+48);
LCDW_Dat(*(val3)%10+48);
LCD_DisStr(1,16-strlen(disname4)-3,disname4);
LCDW_Dat(':');
LCDW_Dat(*(val4)/10+48);
LCDW_Dat(*(val4)%10+48);
}
復(fù)制代碼
****************************dht11溫濕度傳感器***************************
dht11.h
#define STC_1T
sbit PIN_DHT11=P1^2;
vu8 TempNow=0x01,DampNow=0x01;
#ifdef STC_1T
void Delay_10us(void)
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
i--;
}
vu8 COM(void)
{
uchar i,date=0,timeout;
Delay_10us();
for(i=0;i<8;i++)
{
date<<=1;
timeout=2;
while((!PIN_DHT11)&&(timeout++))
Delay_10us();
if(timeout==1)
break;//3¬ê±íË3ö
//50usòÔoó¼ì2a
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(PIN_DHT11)
{
date|=1;
timeout=2;
while((PIN_DHT11)&&(timeout++));
if(timeout==1)
break;//3¬ê±íË3ö
}
}
return date;
}
//éÏμçoó1ÃëμÄêy¾YÎ趨,2»òaéÏà-μç×è,2»è»IO¿úÎT·¨à-μí
void DH11_GetTempDamp(void)
{
u16 i,y;
vu8 tab[5],timeout;
PIN_DHT11=0;
for(i=110*6;i>0;i--)
for(y=25;y>0;y--);
PIN_DHT11=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
if(!PIN_DHT11)
{
timeout=2;
while((!PIN_DHT11)&&(timeout++))
Delay_10us();
timeout=2;
while((PIN_DHT11)&&(timeout++));
Delay_10us();
for(i=0;i<5;i++)
tab[i]=COM();
PIN_DHT11=1;
if(tab[4]==(tab[0]+tab[1]+tab[2]+tab[3]))
{
TempNow=tab[2];//tab[0]êÇêa¶èμÄÕûêy,tab[1]êÇD¡êy,tab[2]êÇζèÕûêy,tab[3]êÇêa¶èD¡êy
//tab[4]êÇD£Ñéoí,êÇÇóoíoóμÄ×îμíλ
DampNow=tab[0];
}
}
}
#else
uchar TAB[4];
uchar U8FLAG,U8temp;
uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
uchar U8comdata;
void Delay_10us(void)
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
{
uchar i;
Delay_10us();
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!PIN_DHT11)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(PIN_DHT11)
U8temp=1;
Delay_10us();
U8FLAG=2;
while((PIN_DHT11)&&U8FLAG++);
if(U8FLAG==1)
break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}
void DH11_GetTempDamp(void)
{
PIN_DHT11=0;
delayms(15);
PIN_DHT11=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
PIN_DHT11=1;
if(!PIN_DHT11)
{
U8FLAG=2;
while((!PIN_DHT11)&&U8FLAG++);
U8FLAG=2;
while((PIN_DHT11)&&U8FLAG++);
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
PIN_DHT11=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
TAB[0]=U8T_data_H/10;
TAB[1]=U8T_data_H%10;
TAB[2]=U8RH_data_H/10;
TAB[3]=U8RH_data_H%10;
TempNow=U8T_data_H;
DampNow=U8RH_data_H;
}
}
#endif
復(fù)制代碼
視頻
https://share.weiyun.com/1FUq9s1c
作者:
man1234567
時間:
2021-4-9 08:55
第一步,通讀全部程序,并理解;
第二步,根據(jù)程序過程寫出各函數(shù)表達(dá)的目標(biāo);
第三步,結(jié)合全程序的理解和各函數(shù)的表達(dá)寫出事件全過程;
第四步,不要已懂裝不懂關(guān)鍵是要自己動手而不是只想伸手。
當(dāng)然也有一步就可以完成的:高價上某一個寶
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1