久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2002|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于51單片機的智能晾衣proteus仿真,光強一直沒變化?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:716583 發(fā)表于 2020-4-13 15:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真之后為什么我改變LDR的的值,顯示屏上一直都是255沒變化。第二塊單片機沒有起到作用。
仿真圖如下:








光敏檢測電路放大:



程序如下:
#include<reg52.h>
#include <intrins.h>
#include <math.h>   
#include <stdio.h>
#include <1602.h>
#include <sht11.h>
#include <24c02.h>

#define uchar unsigned char                                 //宏定義,uchar代表 unsigned char(省字)
#define uint  unsigned  int                                 //                同上
#define W_cmd 0xa0   //24c02寫指令
#define R_cmd 0xa1
uint  temp,humi;
value humi_val,temp_val;             //定義兩個共同體,一個用于濕度,一個用于溫度
uchar error;                        //用于檢驗是否出現(xiàn)錯誤
uchar checksum;                              //CRC

uchar TEMP_data[7];                 //用于記錄實測的溫度
uchar HUMI_data[6];                 //用于記錄實測的濕度
uchar LIGH_data[4];                                //用于記錄實測光感度

uchar show_temp[5];                   //顯示設(shè)定的溫度
uchar show_humi[4];                   //顯示設(shè)定的濕度

uchar data temp_humi_cache[4];         //溫濕度設(shè)置緩存
uchar temp_set;                 //保存溫度變量
uchar humi_set;                         //保存濕度變量
uchar presskeynum;                            //按鍵次數(shù)變量
uchar nn;                                    //用于蜂鳴器
uchar code word1[]={"  a product of  "};
uchar code word2[]={"UNITED ELECTRONS"};                        //顯示屏顯示的字符
uchar code word3[]={" Welcome........"};
sbit k1=P2^0; //選擇按鍵
sbit k2=P2^1; //增加按鍵
sbit k3=P2^2; //減小按鍵
sbit k4=P2^3;// 確認按鍵
sbit led1=P1^4;        //溫度過低指示燈
sbit led2=P1^5;        //溫度過高
sbit led3=P1^6;        //濕度低于下限值,報警,加濕。                   未出現(xiàn)LED
sbit led4=P1^7;        //濕度過高,報警,不調(diào)濕
sbit motor1=P3^4;
sbit motor2=P3^5;
sbit motor3=P3^6;
sbit motor4=P3^7;
sbit P2_6=P2^6;                           //暫時沒理解

//********延時函數(shù)*********
void delay(uint z)  //z為毫秒數(shù)

{
     int a,b;
     for(a=z;a>0;a--)
     for(b=120;b>0;b--);
}
void key()
{
     uchar m;
     if (k1==0) //調(diào)整按鍵檢測
     {
         delay(5);
         if (k1==0)
         {
             presskeynum++;
             if(presskeynum==3)
             presskeynum=0;
             while(k1==0);         //若一直按下,循環(huán)
             LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
         }
     }
     if(presskeynum==1)//溫度設(shè)置
     {
         if(k2==0)    // 加
         {
             delay(300);
             temp_set++;
             if (temp_set>30)
             temp_set=30;
             while(k2==0);       //加上此句必須松按鍵才處理
          }
          if(k3==0)//減
          {
               delay(300);
                temp_set--;
                if (temp_set<18)
                temp_set=18;
                while(k3==0);       //加上此句必須松按鍵才處理
           }

       }

         if(presskeynum==2)//濕度設(shè)置
         {
              if(k2==0)// 加
              {
                  delay(300);
                  humi_set++;
                  if (humi_set>99)
                  humi_set=99;
                  while(k2==0);
                }
                if(k3==0)//減
                {
                    delay(300);
                    humi_set--;
                    if (humi_set<1)
                    humi_set=1;
//                                        while(k3==0);                                                        //這句是調(diào)試加入的
                  }

           }



       if(k4==0)// 退出鍵                                                                                        //設(shè)置完初始值以后通過IIC寫入24c02并清屏       
       {
            delay(10);
            if(k4==0)
            {
                while(k4==0);
                presskeynum=0;
                temp_humi_cache[0]=temp_set/10;
                temp_humi_cache[1]=temp_set%10;
                temp_humi_cache[2]=humi_set/10;
                temp_humi_cache[3]=humi_set%10;

                for(m=0;m<4;m++)
                {  
                     WriteIIC(W_cmd,0x00+m,temp_humi_cache[m]);      //設(shè)定值寫入24c02
                }
                LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
             }
        }
}

//主函數(shù)

void main()
{
         uchar t;
         uchar temp_adc;
         k1=k2=k3=k4=1;
         motor1=motor2=motor3=motor4=0;
         P2_6=0;
     for (t=0;t<4;t++)
     temp_humi_cache[t]=ReadIIC(W_cmd,0x00+t,R_cmd);                        //讀入24c02設(shè)定的值
     temp_set=temp_humi_cache[0]*10+temp_humi_cache[1];                        //設(shè)置溫度
     humi_set=temp_humi_cache[2]*10+temp_humi_cache[3];                        //設(shè)置濕度
     LCD_Initial();                                                                                            //液晶初始化
     GotoXY(0,0);                //光標移動(0,0)
     Print_slow(word1);
     GotoXY(0,1);
     Print_slow(word2);
     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
     GotoXY(0,0);
     Print_slow(word3);
     LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏          //完成系統(tǒng)初始化           
     while(1)
     {
                     key();
                         P1 = 0xff;                                                                                         //P1口初始化
                         temp_adc = P1;                                                                                //讀取光敏值,8位精度最大256
             if(presskeynum==0)         //測量溫濕度
             {                                                                  
             s_connectionreset(); //啟動連接復(fù)位
             error=0;                                                          //初始化error=0,即沒有錯誤
             error+=s_measure((unsigned char*)&temp_val.i,&checksum,TEMP); //溫度測量值返回到temp.val.i          
             error+=s_measure((unsigned char*)&humi_val.i,&checksum,HUMI); //濕度測量值返回到humi_val.i
             if(error!=0)
                         s_connectionreset();                                                                    //如果發(fā)生錯誤,系統(tǒng)復(fù)位
             else
                 {
                                        humi_val.f=(float)humi_val.i;                   //轉(zhuǎn)換為浮點數(shù)
                                        temp_val.f=(float)temp_val.i;                   //轉(zhuǎn)換為浮點數(shù)
                                        calc_sth10(&humi_val.f,&temp_val.f);            //修正相對濕度及溫度,誤差彌補
                                        temp=temp_val.f*10;
                                        humi=humi_val.f*10;
                                        GotoXY(0,0);                                    //選擇溫度顯示位置
                                        Print("Temp:      C --- ");                          //5格空格
                                        GotoXY(0,1);                                    //選擇濕度顯示位置
                                        Print("Humi:      %     ");                          //5格空格
                                                                  
                                        GotoXY(5,0);                                    //設(shè)置溫度顯示位置
                                        TEMP_data[0]=temp/1000+'0';                                                //溫度百位
                                        if (TEMP_data[0]==0x30)                                                 //ASCLL = 0
                                        TEMP_data[0]=0x20;                                                            //對應(yīng)的ASCLL位空格
                                        TEMP_data[1]=temp%1000/100+'0';                        //溫度十位      
                                        if (TEMP_data[1]==0x30 && TEMP_data[0]!=0x30)
                                        TEMP_data[1]=0x20;
                                        TEMP_data[2]=temp%100/10+'0';                   //溫度個位
                                        TEMP_data[3]=0x2e;                              //小數(shù)點
                                        TEMP_data[4]=temp%10+'0';                       //溫度小數(shù)點后第一位            
                                        TEMP_data[5]=0xdf;                              //顯示溫度符號℃書上是第248
                                        TEMP_data[6]='\0';                                                                //實際上0xdf對應(yīng)的是小圓圈
                                        Print(TEMP_data);                               //輸出溫度
                                                                                                
                                        GotoXY(5,1);                                    
                                        HUMI_data[0]=humi/1000+'0';                     //濕度百位                           
                                        if (HUMI_data[0]==0x30)
                                        HUMI_data[0]=0x20;
                                        HUMI_data[1]=humi%1000/100+'0';                         //濕度十位      
                                        HUMI_data[2]=humi%100/10+'0';                            //濕度個位
                                        HUMI_data[3]='.' ;                                       //小數(shù)點
                                        HUMI_data[4]=humi%10+'0';                                //濕度小數(shù)點后第一位   
                                        HUMI_data[5]='\0';
                                        Print(HUMI_data);                                        //輸出濕度

                                        GotoXY(13,1);
                                        LIGH_data[0] = temp_adc%1000/100+'0';
//                                        if(LIGH_data[0] == 0x30)
//                                        LIGH_data[0] = 0x20;
                                        LIGH_data[1] = temp_adc%100/10+'0';
                                        LIGH_data[2] = temp_adc%10+'0';
                                        LIGH_data[3] = '\0';
                                        Print(LIGH_data);  
                                                                                                                               
                                           if ((temp/10)<temp_set)                                           
                                        {
                                                motor1=1;
                                                motor2=0;                               
                                        }else if ((temp/10)>=temp_set)
                                        {
                                                motor2=1;
                                                motor1=0;
                                       
                                        }
                                        if ((humi/10)<humi_set)
                                        {
                                                motor3=1;
                                                motor4=0;
                                        }
                                        else if ((humi/10)>=humi_set)
                                        {       
                                                motor4=1;
                                                motor3=0;
                                        }
                                                                                       
                                }  //else
                        }  //if
                                       
                        if(presskeynum==1)  //設(shè)定溫度時顯示的內(nèi)容
                        {
                                show_temp[0]=temp_set/10+0x30;
                                show_temp[1]=temp_set%10+0x30;
                                show_temp[2]=0xdf;
                                show_temp[3]='C';
                                show_temp[4]='\0';
                                GotoXY (0,0);
                                Print("SET TEMP:");
                                GotoXY (0,1);
                                Print(show_temp);
                         
                        }               
                        if(presskeynum==2)                      //設(shè)定濕度時顯示的內(nèi)容
                        {
                                show_humi[0]=humi_set/10+0x30;
                                show_humi[1]=humi_set%10+0x30;
                                show_humi[2]='%';
                                show_humi[3]='\0';
                                GotoXY (0,0);
                                Print("SET HUMI:");
                                GotoXY (0,1);
                                Print(show_humi);
                        }

                                                                         
        }//while
}   //mian




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:65956 發(fā)表于 2020-4-13 17:13 | 只看該作者
要檢測光敏的光照強度,一種是不用放大,直接用ADC采光敏電阻兩端的電壓計算而來;另一種就是經(jīng)過放大,但要用運放,不能用你圖中的三極管,這種你只能測到或高或低的電平而已;
回復(fù)

使用道具 舉報

板凳
ID:716583 發(fā)表于 2020-4-13 21:45 | 只看該作者
aking991 發(fā)表于 2020-4-13 17:13
要檢測光敏的光照強度,一種是不用放大,直接用ADC采光敏電阻兩端的電壓計算而來;另一種就是經(jīng)過放大,但 ...

謝謝大佬指點,我回去改過試一下。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久午夜视频 | 国产精品亚洲二区 | 欧美一级高潮片免费的 | 人人射人人草 | 国产精品福利网站 | 国产精品激情 | 日本精品久久久久 | jvid精品资源在线观看 | 亚洲一区日韩 | 九七午夜剧场福利写真 | 欧美日韩最新 | 亚洲一区二区三区久久 | 国产精品久久久久久久久久三级 | 欧美成年视频 | 成人在线视频免费观看 | 亚洲综合视频 | 亚洲欧美一区二区三区在线 | 欧美日韩视频在线 | 亚洲国产一区在线 | 成人黄色网址大全 | 日日摸夜夜添夜夜添精品视频 | 久久99精品国产麻豆婷婷 | 久久免费观看视频 | 玖玖国产精品视频 | 久色网 | 日韩一区在线播放 | 日韩综合| 国产97碰免费视频 | 精品无码三级在线观看视频 | 天堂在线www | 亚洲精品国产偷自在线观看 | 国产精品久久一区二区三区 | 欧美一区二区三区在线观看 | 欧美三级在线 | 91精品国产色综合久久 | 亚洲精品小视频在线观看 | 欧美亚洲另类丝袜综合网动图 | av黄色在线 | 国产精品免费一区二区三区四区 | 超碰成人免费 | 91精品久久久久久久久久入口 |