欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵2和3都沒反應(yīng),溫度也讀不進(jìn)去,有人幫忙看看嘛

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:744915 發(fā)表于 2020-5-6 08:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>                         //調(diào)用單片機(jī)頭文件
#include <intrins.h>
#include "common.h"
#include "lcd1602.h"
#include "DS18B20_One.h"
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535



#define  GEAR1                  65   //1檔
#define  GEAR2                  50   //2檔
#define  GEAR3                  40   //3檔
#define  GEAR4                  30   //4檔
#define  GEAR5                  25   //5檔
#define  GEAR6                  20   //6檔
#define  GEAR7                  15   //7檔
#define  GEAR8                  10   //8檔
#define  GEAR9                  5    //9檔

sbit Motor = P3^4;//風(fēng)扇
sbit RTHW = P1^4;//人體紅外

sbit key1 = P1^1;//加
sbit key2 = P1^2;//減
sbit key3 = P1^3;//切換

unsigned char IrValue[6];
unsigned char Time;

unsigned char T_max = 30;
uchar PWM_Val = 0xFF;
uchar count = 0;

unsigned char shoudong = 1;//手動調(diào)節(jié)檔位

bit Auto_flag = 1;
bit on_0ff = 1;

/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void delay(uint i)
{
        while(i--);        
}

void Timer0Init(void)//11.0592M,定時100us
{
                TMOD |= 0x01;
            TL0 = 0xA4;  
                TH0 = 0xFF;
                ET0 = 0;
                TR0 = 1;
                EA = 1;
}


void display_Max()//顯示上限值
{
                lcd_write_char(2,1,T_max/10+'0');
                lcd_write_char(3,1,T_max%10+'0');
}

void keyscan()//按鍵掃描
{
                if(key1 == 0)//加鍵按下
                {
                         delay_ms(10);
                         if(key1 == 0)
                         {
                                
                                  if(Auto_flag==1)
                                        {           while(!key1);
                                                 if(T_max < 99)//最大只能到99
                                                 {
                                                                T_max++;
                                                 }
                                                 display_Max();//顯示
                                                
                                    }
                                   else
                                    {
                                                if(shoudong < 10)
                                                        shoudong++;
                                     }
                        }
                        
                }
        else if(key2 == 0)//減鍵按下
                {
                         delay_ms(10);
                         if(key2 == 0)
                         {
                                    while(!key2);
                                   if(Auto_flag==1)
                                         {
                                                         if(T_max > 0)//最小只能到0
                                                         {
                                                                        T_max--;
                                                         }
                                                         display_Max();//顯示
                                        }
                                        else
                                        {
                                                        if(shoudong > 1)
                                                                shoudong--;
                                        }
                        }
                }
        else if(key3 == 0)//切換鍵按下
                        {
                                 delay_ms(10);
                                 if(key3 == 0)
                                 {
                                                 while(!key3);
                                                 Auto_flag = ~Auto_flag;
                                             if(Auto_flag==0)
                                                 {
                                                        
                                                        lcd_write_str(12, 0, "SD");
                                                        Motor = 1;
                                                 }
                            }
                     }               
}

void PWM_Dispose(uchar x)//PWM檔位調(diào)節(jié)
{
                switch(x)
                {
                                case(1):PWM_Val = GEAR1;lcd_write_str(14,1,"1 ");break;
                                case(2):PWM_Val = GEAR2;lcd_write_str(14,1,"2 ");break;
                                case(3):PWM_Val = GEAR3;lcd_write_str(14,1,"3 ");break;
                                case(4):PWM_Val = GEAR4;lcd_write_str(14,1,"4 ");break;
                                case(5):PWM_Val = GEAR5;lcd_write_str(14,1,"5 ");break;
                                case(6):PWM_Val = GEAR6;lcd_write_str(14,1,"6 ");break;
                                case(7):PWM_Val = GEAR7;lcd_write_str(14,1,"7 ");break;
                                case(8):PWM_Val = GEAR8;lcd_write_str(14,1,"8 ");break;
                                case(9):PWM_Val = GEAR9;lcd_write_str(14,1,"9 ");break;
                                case(10):PWM_Val = 0;Motor = 1;lcd_write_str(14,1,"10");break;
                                default:PWM_Val = 0;Motor = 1;lcd_write_str(14,1,"10");break;
                }
}

void        temp_dispose(int temp)//溫度控制風(fēng)扇處理,總共10檔
{
                if(temp        <= T_max)//如果實際溫度低于上限,關(guān)閉風(fēng)扇
                {
                          PWM_Val = 0xFF;
                          Motor = 0;
                          lcd_write_str(14,1,"--");
                }
                else
                {
                                PWM_Dispose(temp - T_max);//PWM調(diào)節(jié),溫度高于上限,每高于一度檔位增加一檔
                }
}

/*******************************************************************************
* 函 數(shù) 名         : datapros()
* 函數(shù)功能                   : 溫度讀取處理轉(zhuǎn)換函數(shù)
* 輸    入         : temp
* 輸    出         : 無
*******************************************************************************/

void datapros()         
{
           int temp=0;
        ET0 = 0;
        temp = DS18B20_TF();//讀取溫度值
        ET0 = 1;
          //顯示溫度
                lcd_write_char(6,0,temp % 100 / 10+'0');
                lcd_write_char(7,0,temp % 10+'0');

                if(Auto_flag)//在自動模式下,感應(yīng)到有人,并且溫度高于上限,開啟風(fēng)扇
                {
                        lcd_write_str(12, 0, "Auto");
                          if(RTHW == 1)
                                {
                                        temp_dispose(temp);
                                }
                                else
                                {        
                                          PWM_Val = 0xFF;
                                          Motor = 0;
                                          lcd_write_str(14,1,"--");
                                }
                }
                else//手動模式下,Auto不顯示
                {
                                lcd_write_str(12, 0, "    ");
                }

}

void main()
{
                  uint cnt = 0;
        
            Motor = 0;//關(guān)閉風(fēng)扇
                lcd_init();//1602初始化
                Timer0Init();//開啟定時器
                DS18B20_TF();//溫度初始化
                lcd_write_str(0, 0, " Ds18b20 Init...");
                delay_ms(1000);
                lcd_write_str(0, 0, "Temp:   C       ");
                lcd_write_str(0, 1, "M:  C    Gear:  ");
            display_Max();
                while(1)
                {
                          keyscan();

                            if(Auto_flag == 0)
                                        {
                                                
                                                
                                                        
                                                        if(on_0ff)//不是在關(guān)閉狀態(tài)下,執(zhí)行手動檔位
                                                        {
                                                                PWM_Dispose(shoudong);
                                                        }
                                                        else//關(guān)閉風(fēng)扇
                                                        {
                                                                        PWM_Val = 200;
                                                                        Motor = 0;
                                                                        lcd_write_str(14,1,"--");
                                                        }
                                        }
                        
                        if(cnt++ > 100)//延時一段時間
                                {
                                                cnt = 0;
                                                datapros();
                                }
                                delay_ms(1);
                }
}



void Tim0_str()interrupt 1 using 2//定時器中斷1,用于PWM調(diào)節(jié)
{
                TL0 = 0xA4;
                TH0 = 0xFF;
        
                count++;
                if(count > 200)//20毫秒一個周期
                        count = 0;
                if(count >= PWM_Val)
                        Motor = 1;
                else
                         Motor = 0;
}




捕獲.PNG (41.68 KB, 下載次數(shù): 54)

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

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2020-5-7 09:38 | 只看該作者
程序不全比如DS18B20_TF怎么讀數(shù)都不清楚怎么判定問題
回復(fù)

使用道具 舉報

板凳
ID:282850 發(fā)表于 2020-5-7 11:14 | 只看該作者
設(shè)計、調(diào)試程序有絕招的,不是你這樣搞,別人也不好幫你
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表