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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2077|回復: 3
收起左側

基于單片機魚缸定時喂食彩燈控制系統

[復制鏈接]
ID:190577 發表于 2023-7-19 16:59 | 顯示全部樓層 |閱讀模式
一、系統方案
本設計采用AT89C52單片機主控器,液晶顯示1602顯示,按鍵設置定時時間,溫度DS18B20傳感器采集溫度值,按鍵設置溫度上下限,測量溫度值低于下限,啟動加熱設備,溫度值大于上限,啟動降溫設備,24路彩燈控制。
圖片1.png

二、硬件設計
原理圖如下:
圖片2.png
三、單片機軟件設計
1、首先是定時器初始化:
/*************定時器0初始化程序***************/
void init_time0()         
{
        EA   = 1;                   //開總中斷
        TMOD = 0X11;          //定時器0、工作方式1
        TH0 = (65536-10000)/256;  //重新加載初值
  TL0 = (65536-10000)%256;;

        ET0  = 1;                  //開定時器0中斷
        TR0  = 1;                  //允許定時器0定時
}
2、中斷服務程序
/**************定時器0中斷程序*****************/
void time0() interrupt 1
{                        
        static uchar value;

  unsigned char tmp;  //臨時變量
  static unsigned char index = 0;  //節拍輸出索引
  unsigned char code BeatCode[8] = {  //步進電機節拍對應的IO控制代碼
        0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6
    };

  if (beats1 != 0)  //節拍數不為0則產生一個驅動節拍
    {
        tmp = P2;                    //用tmp把P2口當前值暫存
        tmp = tmp & 0xF0;            //用&操作清零低4位
        tmp = tmp | BeatCode[index]; //用|操作把節拍代碼寫到低4位
        P2  = tmp;                   //把低4位的節拍代碼和高4位的原值送回P2
                if(mode1==0)
        index++;                     //節拍輸出索引遞增
                if(mode1==1)
        index--;                     //節拍輸出索引遞增
        index = index & 0x07;        //用&操作實現到8歸零
        beats1--;                     //總節拍數-1
    }
    else  //節拍數為0則關閉電機所有的相
    {
        P2 = P2 | 0x0F;               
    }



        TH0 = (65536-10000)/256;  //重新加載初值
  TL0 = (65536-10000)%256;;

        value ++;           
        if((value % 10) == 0)         //100ms  
                flag_100ms = 1;         
        if(value >=20)                         //200ms
        {
                value = 0;
                flag_200ms = 1;
        }
}
3、按鍵檢測程序
void key()         //獨立按鍵程序
{
        static uchar key_new;
        key_can = 20;                   //按鍵值還原
        P3 |= 0x78;                     //對應的按鍵IO口輸出為1
        if((P3 & 0x78) != 0x78)                //按鍵按下
        {
                delay_1ms(10);                     //按鍵消抖動
                if(((P3 & 0x78) != 0x78) && (key_new == 1))
                {                                                //確認是按鍵按下
                        key_new = 0;
                        switch(P3 & 0x78)
                        {
                                case 0x70:  key_can = 4; //減
                                if(menu_1==0)
                                {
          mode++;
                                        if(mode>2) mode=0;
                                        num=0;
                                }


                                break;         //得到按鍵值
                                case 0x68:  key_can = 3;  
                                if(menu_1==0)
                                {
                                                if(number==1)        
                                        led=!led;
                                }


                                break;         //得到按鍵值
                                case 0x58:  key_can = 2;
                                if(menu_1==0)
                                {
                                                if(number==1)        
                                        led1=!led1;
                                }
                                if(led1==0)
                                {
                    mode1=0;

                 StartMotor1(360);
                                }
                                else

                                {
                    mode1=1;

                 StartMotor1(360);
                                }        

                                break;         //得到按鍵值
                                case 0x38:  key_can = 1;  break;         //得到按鍵值
                        }
                }                        
        }
        else
                key_new = 1;        
}
4、溫度檢測程序
/*************讀取溫度的值 讀出來的是小數***************/
uint read_temp()
{
        int value;
        uchar low;                           //在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序
        init_18b20();                   //初始化18b20
        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0x44);           //啟動一次溫度轉換命令
        delay_uint(50);                   //500us

        init_18b20();                   //初始化18b20

        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0xbe);           //發出讀取暫存器命令

        EA = 0;
        low = read_18b20();           //讀溫度低字節
        value = read_18b20();  //讀溫度高字節
        EA = 1;
        value <<= 8;                   //把溫度的高位左移8位
        value |= low;                   //把讀出的溫度低位放到value的低八位中
        if(value< 0)                                //當溫度值為負數
  {

                fuhao=1;
                value=0;
        }
        else
        value *= 0.625;               //轉換到溫度值 小數
        return value;                   //返回讀出的溫度 帶小數
}


四、proteus仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。
圖片3.png


回復

使用道具 舉報

ID:582109 發表于 2023-7-22 22:26 | 顯示全部樓層
做個實物能挺好
回復

使用道具 舉報

ID:92810 發表于 2024-4-2 16:55 | 顯示全部樓層
做個實物能挺好
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 操网站 | 亚洲国产精品久久久久久 | 91青娱乐在线 | 亚洲一区二区三区四区五区午夜 | 国产男女视频网站 | 亚洲精品黄色 | 久久免费精彩视频 | 先锋资源网 | 三级黄色片在线观看 | 91视频网 | 久久久久久综合 | 男女激情网站免费 | 欧美日韩国产在线观看 | 国产激情免费视频 | 日韩高清一区 | 亚洲综合国产精品 | 国产91色在线 | 亚洲 | 欧美视频免费在线 | 日本不卡一区二区三区在线观看 | 国产精品视频在线播放 | 天堂在线1 | 在线成人一区 | 国产乱码精品一区二区三区忘忧草 | www国产成人 | 欧美精品一二三区 | 99资源站 | 日韩欧美一区二区三区 | 天堂国产 | 欧美8一10sex性hd | 超碰精品在线 | 亚洲精品视频一区二区三区 | 成人精品免费视频 | 欧美 日本 国产 | 国产日韩久久 | 日韩在线视频一区 | 精品视频亚洲 | 精品国产乱码久久久久久老虎 | 高清久久 | 亚洲狠狠爱 | 亚洲 日本 欧美 中文幕 | 国产精品99 |