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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2293|回復: 5
收起左側

程序是本壇下的。想控制溫度,就加了一個LED1, 溫度下限時led1=0; 溫度上限時

[復制鏈接]
回帖獎勵 50 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次
ID:126608 發表于 2019-7-18 06:42 | 顯示全部樓層 |閱讀模式
/******************************************************************************
程序是本壇下的。想控制溫度,就加了一個LED1, 溫度下限時led1=0; 溫度上限時
led1=1;超溫停止,但沒改成功,希望大家指導一下,非常感謝。
***************/
//2016.10.15編寫
//作者:劉海龍
//硬件:三位共陰數碼管+stc15單片機+DS18B20溫度芯片+蜂鳴器//選擇內部12M晶振
#include <STC15W.h>
#include <intrins.h>
#include<4LED_YIN.H>//數碼管驅動顯示程序
#include<DS18B20.H>//DS18B20溫度芯片驅動程序
#include<EEPROM.H>//STC15系列內部EEPROM
bit w=0,q;//報警標志位
sbit beep=P5^5;//蜂鳴器負極連接IO正極接vcc
sbit k1=P5^4;//設置鍵
sbit k2=P1^2;//
回復

使用道具 舉報

ID:126608 發表于 2019-7-18 06:43 | 顯示全部樓層
/******************************************************************************
程序是本壇下的。想控制溫度,就加了一個LED1, 溫度下限時led1=0; 溫度上限時
led1=1;超溫停止,但沒改成功,希望大家指導一下,非常感謝。
***************/
//2016.10.15編寫
//作者:劉海龍
//硬件:三位共陰數碼管+stc15單片機+DS18B20溫度芯片+蜂鳴器//選擇內部12M晶振
#include <STC15W.h>
#include <intrins.h>
#include<4LED_YIN.H>//數碼管驅動顯示程序
#include<DS18B20.H>//DS18B20溫度芯片驅動程序
#include<EEPROM.H>//STC15系列內部EEPROM
bit w=0,q;//報警標志位
sbit beep=P5^5;//蜂鳴器負極連接IO正極接vcc
sbit k1=P5^4;//設置鍵
sbit k2=P1^2;//        加鍵
sbit k3=P1^3;//         減鍵
sbit led1=P1^4;//

unsigned char menu=0,cou,HH,HL,LH,LL;//HH為溫度上限高8位HL為溫度上限低8位
//LH為溫度下限高8位LL為溫度下限低8位
unsigned int L,H;//H為溫度上限,L為溫度下限
/************************************************************************/
void delay1ms (unsigned int a){ // 1ms延時程序
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 629; i++);//STC15單片機在外部晶振為12MHz時i值上限為629  
        }                                                       
}
/*****************************************************************************/
void disp(unsigned int t){//數碼管顯示
unsigned int i;
i=        t/100;//第一位數碼管顯示溫度十位
diplay_data (1,disdata[i]);
i=t%100/10;//第二位數碼管顯示溫度個位
diplay_data (2,disdata[i]+0x80);//0x80為個位數后面的小數點
i=t%100%10;//第三位數碼管顯示溫度小數位
diplay_data (3,disdata[i]);

}
/***********************************************/
void di(){//蜂鳴器驅動程序
        beep=0;
        delay1ms(500);
        beep=1;
        delay1ms(500);
        }
/*********************************************************************************************
函數名:定時/計數器初始化函數
調  用:T_C_init();
/**********************************************************************************************/
void T_C_init (void){
        TMOD = 0x11; //高4位控制T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ]
        EA = 1;        //中斷總開關
        TH0 = 0x3c; //16位計數寄存器T0高8位(寫入初值)
        TL0 = 0xb0; //16位計數寄存器T0低8位
        ET0 = 1; //T/C1中斷開關
        TR0 = 0; //T/C1關閉開關
                beep=1;       
                led1=0; //后加的
}
/*********************************************************************************************
函數名:定時/計數器1中斷處理函數
調  用:[T/C1溢出后中斷處理]
/*****************************/
void T_C0 (void) interrupt 1  using 1{ //切換寄存器組到1
    cou++;                      // 軟計數器加1   
    if(cou > 99){// 計數值到(5s)
        cou = 0;// 軟計數器清零
        IapEraseSector(0x00); //擦除整個扇區
        IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫入 EEPROM
        IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫入 EEPROM
        IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫入 EEPROM
        IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫入 EEPROM         
        TR0 = 0; //T/C1停止計數
        menu=0;//返回 主菜單的溫度顯示界面                 
    }               
        TH0 = 0x3c; //16位計數寄存器T0高8位(重新寫入初值)
        TL0 = 0xb0; //16位計數寄存器T0低8位
}
/**********************************************************************************************/
/**********************************************************************************************/
void main (void){
        unsigned char i;
        delay1ms(300); //延時待系統穩定
        init();//IO工作方式初始化
        T_C_init();//定時器初始化
       
        ReadTemperature(); //讀取溫度
        HH = IapReadByte(0x00);//開機時從EEPROM中讀取H高8位參數
        HL = IapReadByte(0x01);//開機時從EEPROM中讀取H的低8位參數
        H=HH*256+HL;//讀出溫度上限值
        LH = IapReadByte(0x02);//開機時從EEPROM中讀取L高8位參數
        LL = IapReadByte(0x03);//開機時從EEPROM中讀取L的低8位參數
        L=LH*256+LL;//讀出溫度下限值
        while(1){//主循環
                         
/**********************顯示溫度界面******************************/

                          if(tem<L){
                            led1=0;/低溫加熱
                          }       
                          if(tem>=H){
                            led1=1;//超溫停止
                          }//不論低溫加熱,還是超溫停止。led1都沒有變化。
                  if(menu==0){
                           for(i=15;i>0;i--){
                           disp(ReadTemperature());}
                          if(tem>=H&&w==0||tem<=L&&w==0){
                            di();//超溫或者低溫報警
                          q=1;
                            }

                  
                          if(k3==0&&q==1){w=1;}//如果報警時按下K1則關閉報警聲
                          if(tem<=H&&tem>=L){w=0;}//如果溫度恢復正常把報警標志清除
                        if(k2==0&&k3==0){//k2k3同時按下溫度上限下限值恢復出廠設置
                                delay1ms(10);
                                if(k2==0&&k3==0){
                                        H=380;//溫度上限38度
                                        L=370;//溫度下限37度
                                        LL=L;
                                        LH=(L>>8);
                                        HL=H;
                                        HH=(H>>8);
                                        IapEraseSector(0x00); //擦除整個扇區
                                        IapProgramByte(0x00,HH );//將 新的溫度上限值高8位寫入 EEPROM
                                        IapProgramByte(0x01, HL);//將 新的溫度上限值低8位寫入 EEPROM
                                        IapProgramByte(0x02,LH );//將 新的溫度下限值高8位寫入 EEPROM
                                        IapProgramByte(0x03, LL);//將 新的溫度下限值低8位寫入 EEPROM         
                                        di();
                                }
                        }       
                   }
/*********************進入調溫度上限界面*******************************/
                  if(menu==1){
                         diplay_data (1,disdata[H/100]);
                         diplay_data (2,disdata[H%100/10]+0x80);
                         diplay_data (3,disdata[H%10]);
                         if(k2==0){
                                delay1ms(10);
                                 if(k2==0){
                                H++; //按下K1鍵則溫度上限加零點一度
                                 cou=0;//重新計數
                                 TR0 = 1; //T/C1啟動開關
                                   
                                 while(!k2);
                                HL=H;
                                HH=(H>>8);
                                }
                          }
                         if(k3==0){
                                delay1ms(10);
                                 if(k3==0){
                                H--; //按下K1鍵則溫度上限減零點一度
                                 cou=0;//重新計數
                                 TR0 = 1; //T/C1啟動開關
                                   
                                 while(!k3);
                                HL=H;
                                HH=(H>>8);
                                }
                          }
                       
                  }
/*******************進入調溫度下限界面****************************/
                   if(menu==2){
                         diplay_data (1,disdata[L/100]);
                         diplay_data (2,disdata[L%100/10]+0x80);
                         diplay_data (3,disdata[L%10]);
                         if(k2==0){
                                delay1ms(10);
                                 if(k2==0){
                                 cou=0;//重新計數
                                 TR0 = 1; //T/C1啟動開關
                                    L++; //按下K1鍵則溫度下限加零點一度
                                 while(!k2);
                                LL=L;
                                LH=(L>>8);
                                }
                         }

                         if(k3==0){
                                delay1ms(10);
                                 if(k3==0){
                                cou=0;//重新計數
                                 TR0 = 1; //T/C1啟動開關
                                    L--; //按下K1鍵則溫度下限減零點一度
                                 while(!k3);
                                LL=L;
                                LH=(L>>8);                               
                             }
                        }
                  }
/*************************按下K1鍵進入菜單設置界面***************************/
                  if(k1==0){
                         delay1ms(10);
                         if(k1==0){
                         cou=0;//重新計數
                         TR0 = 1; //T/C1啟動開關
                            menu++; //按下K1鍵則菜單加一
                           if(menu>2){menu=0;}
                         while(!k1);
                        }
                   }                               
        }       
}
/*****************************************************************************/
回復

使用道具 舉報

ID:126608 發表于 2019-7-18 10:26 | 顯示全部樓層
剛剛解決了,原來還得加else 語句、
回復

使用道具 舉報

ID:123289 發表于 2019-7-18 11:03 | 顯示全部樓層
你需要先讀弄它,如何證明你已讀通呢?畫出程序框圖吧,一看框圖你就知道該如何做了。
回復

使用道具 舉報

ID:126608 發表于 2019-7-19 06:55 | 顯示全部樓層
確實不能全看懂程序,只能將下載的程序簡單改動,還在學習,謝謝指導。
回復

使用道具 舉報

ID:542954 發表于 2019-8-11 20:05 | 顯示全部樓層
你這個程序里面的選擇結構里面邏輯存在重復,需要重新規劃if里面的內容
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成在线人视频免费视频 | 久久99这里只有精品 | 免费影视在线观看 | 欧美在线视频一区二区 | 欧美日韩高清在线一区 | 狠狠久久| 91天堂| 国产精品一二区 | 日本精品视频 | 久久久一区二区三区 | 一级片视频免费 | 欧美日韩成人影院 | 免费国产精品久久久久久 | 国产午夜精品一区二区三区嫩草 | av毛片在线播放 | 国产成人精品一区二区三区在线 | 亚洲在线高清 | 亚洲一区视频在线播放 | 91传媒在线播放 | 91中文在线观看 | 一区二区三区四区在线视频 | 国产一区二区三区在线 | 亚洲欧美aⅴ | 欧州一区 | www.97国产| 日韩在线中文字幕 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 国产亚洲精品久久久优势 | 人人干人人干人人 | av在线一区二区三区 | av资源中文在线 | 91在线精品秘密一区二区 | 国产成人精品福利 | 精品视频一区二区 | 日韩欧美福利视频 | 成人在线免费电影 | 91高清在线视频 | av在线天天 | 中文字幕在线看第二 | 亚洲欧美日韩在线 | 在线视频日韩 |