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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2328|回復: 1
打印 上一主題 下一主題
收起左側

“智能物料傳送系統”設計任務書——藍橋15年決賽

[復制鏈接]
跳轉到指定樓層
樓主
ID:272080 發表于 2018-1-23 16:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
“智能物料傳送系統”設計任務書


選用材料為藍橋杯官方提供的開發板。

因為此板選用了4塊74LS573芯片用于鎖存P0口信號,這種設計可節約很多的i/0口,與市面上很多的開發板不一樣,所以如果要換到其他開發板上使用,需要改一下顯示代碼 和LED亮滅代碼,但是大致思路不變,只要改變一下那幾個比較特殊的使用到了573鎖存來編程的函數即可。

我也是一名菜雞  如果有那個大神有更好的編程思路的話 那就拜托大神賜教了。


功能簡述
  
        
單片機
   
   
   
  
        
數據存儲
   
   
   
  
        
傳送控制
   
   
   
  
        
貨物類型監測
   
   
   
  
        
數碼管顯示
   
   
   
  
        
按鍵輸入
   
   
   
file:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image001.giffile:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image002.gif
  
        
過載空載監測
   
   
   
file:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image003.giffile:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image004.giffile:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image005.giffile:////Users/yefeng/Library/Group%20Containers/UBF8T346G9.Office/msoclip1/01/clip_image006.gif    智能物料傳送系統能夠實現貨物類型判斷、過載監測、緊急停止和系統參數存儲記錄等功能。系統硬件部分主要由按鍵電路,顯示電路,數據存儲電路、傳感器檢測電路及單片機系統組成,系統框圖如圖一所示:
                                                                                    
圖一:系統框圖
I2C總線驅動程序、CT107D單片機考試平臺電路原理圖以及本題所涉及到的芯片數據手冊,可參考計算機上的電子文檔。原理圖文件、程序流程圖及相關工程文件請以考生號命名,并保存在計算機上的考生文件夾中(文件夾名為考生準考證號,文件夾位于Windows桌面上)。
設計任務及要求
1. 過載檢測與貨物類型識別
  1.1空載、過載檢測
     使用電位器RB2輸出電壓V0模擬壓力變送器輸出,設備實時采集電位器輸出電壓,完成貨物空載,過載檢測功能。
  1.1.10<V0<1V時,判斷為空載,L1點亮;
  1.1.2當1<=V0<4V時,判斷為非空載,貨物被填裝到傳送起始位,L2點亮;
  1.1.3當V0>=4V時,判斷為過載狀態,L3以0.5秒為間隔閃爍提醒,蜂鳴器報警提示。
  說明:空載狀態下,所有數碼管熄滅。
  1.2 貨物類型判斷
貨物被填裝到傳送起始位置后,系統啟動超聲波被測距功能,完成貨物類型判斷,數碼管顯示界面如圖2所示:
  1.2.1 當超聲探頭與貨物之間的距離小于等于30cm時判斷為I類貨物;
  1.2.2 當超聲探頭與貨物之間的距離大于30cm時判斷為II類貨物。
  
1
  
8
8
3
2
8
8
2
界面編號
熄滅
距離:32cm
熄滅
II類貨物
圖2:數碼管顯示界面1-貨物類型顯示
說明:1:貨物類型顯示格式:I類貨物-數字1、II類貨物-數字;
      2:A3草稿紙短邊接近30cm,可用于驗證測距結果。
2. 貨物傳送
在非空載、非過載的前提下,通過按鍵控制繼電器吸合,啟動貨物傳送過程,并通過數碼管實時顯示剩余的傳送時間,倒計時結束后,繼電器自動斷開,完成本次傳送過程,數碼管顯示格式如圖3所示:
  
2
  
8
8
8
8
8
0
1
界面編號
熄滅
剩余傳送時間:1
圖3:數碼管顯示界面2-剩余傳送時間顯示
說明:繼電器吸合時,指示燈L10點亮,斷開時L10熄滅。
3.按鍵功能描述
  3.1 按鍵S4定義為“啟動傳送”按鍵,按鍵按下后,啟動貨物傳送過程。
      說明:按鍵S4在空載、過載、傳送過程中無效。
  3.2 按鍵S5定義為“緊急停止”按鍵,按鍵按下后,繼電器立即斷開,指示燈L4以0.5秒為間隔閃爍,剩余傳送時間計時停止。再次按下S5,傳送過程恢復,L4熄滅,恢復倒計時功能,繼電器吸合。知道本次傳送完成。
      說明:按鍵S5僅在傳送過程中有效。
  3.3 按鍵S6定義為“設置”按鍵,按下S6按鍵,調整I類貨物傳送時間,再次按下S6按鍵,調整II類貨物傳送時間,第三次按下S6,保存調整后的傳送時間到E2PROM,并關閉數碼管顯示。設置過程中數碼管顯示界面如圖4所示:
  
3
  
8
8
0
2
8
0
4
界面編號
熄滅
I類:傳送時間2秒
熄滅
II類:傳送時間為4秒
圖4:數碼管顯示界面3-傳送時間設置界面
說明:1:貨物傳送時間可設定范圍為1-10秒,通過按鍵S7調整;
      2:“設置”按鍵S6、“調整”按鍵S7僅在空載狀態下有效;
      3:通過按鍵S6切換選擇到不同貨物類型的傳送時間時,顯示該類貨物傳送時間的數碼管閃爍。
4.數據存儲
I、II類型貨物的傳送時間在設置完成后需要保存到E2PROM中,設備重新上電后,能夠恢復最近一次的傳送時間配置信息。
5.上電初始化狀態與工作流程說明
5.1  I類設備默認傳送時間為2秒,II類設備為4秒;
5.2  最終作品提交前,將RB2輸出電壓調整到最小值,確保設備處于空載狀態;


代碼如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#include"led_jdq.h"
#include"iic.h"
#include"hc.h"

sbit s4=P3^3;
sbit s5=P3^2;
sbit s6=P3^1;
sbit s7=P3^0;

uchar tab[]={   0xC0,/*0*/
                        0xF9,/*1*/
                        0xA4,/*2*/
                        0xB0,/*3*/
                        0x99,/*4*/
                        0x92,/*5*/
                        0x82,/*6*/
                        0xF8,/*7*/
                        0x80,/*8*/
                        0x90,/*9*/
                        0xBF,/*-*/
                                0xff
};
uchar dspbuf[]={11,11,11,11,11,11,11,11};
uchar DSP;

uchar hc_add;                   //定時刷新超聲波數據標志位  
bit hc_add_flag;

uint led3_add;                   //定時刷新led3標志位  
bit led3_add_flag;

uint sec_add;                   //秒標志位
bit sec_flag;

bit s6_flag;

bit open_sec;                   //倒計時開始標志位
uchar sz_flag;                   //設置標志位

uchar vv;                      //電壓值
uint ss;                                //超聲波距離
uchar hw;                                   //貨物類型

char time1,time2;     //貨物1貨物2送貨時間倒計時
char time11,time22;   //送貨時間

uchar ms_flag;          //送貨前顯示模式標志位
bit sh_flag;                         //送貨標志位

void display();                         //顯示函數
void int_t();                         //初始化定時器

void vv_dat();                 //判斷電壓狀態

void moshi();                //顯示模式1  送貨狀態
void sh_moshi();
void sz_moshi();

void hwlx();                 //判斷貨物類型
void key4();                //s4按鍵功能
void key5();                //s5按鍵功能
void key6();
void key7();

void delay(uint time);

void main()
{
        time11=2;                                        //初始化傳送時間
        time22=4;
       


        int_t();                                          //初始化定時器       
        int_8591();                                        //初始化pcf8591

//        iic_w(0,time11);
//        delay(100);
//        iic_w(1,time22);
        delay(10);
        time11=iic_r(0);                                    //讀出24c02
        delay(10);
        time22=iic_r(1);                                    //讀出24c02

        time1=time11;                                //初始化送貨時間
        time2=time22;
        cls_jdq();                                        //關閉繼電器
        while(1)
        {
       

                if(hc_add_flag)                         //讀出距離
                {
                        ss=hc_red();

                        vv=red_8591();                     //讀出電壓
                        hc_add_flag=0;
                }

               

                vv_dat();                                  //判斷電壓值
                hwlx();                                          //貨物類型判斷

                if(sh_flag==0)
                {
                        if(sz_flag==0)
                        moshi();
                        else
                        sz_moshi();
                        cls_led10();
                }
                else
                {
                        sh_moshi();
                }

                key4();
                if(vv<10)
                {
                        key6();
                }

//                dspbuf[0]=ss/100;
//                dspbuf[1]=ss%100/10;
//                dspbuf[2]=ss%10;
//                dspbuf[3]=x%10;
//                dspbuf[4]=vv/10;
//                dspbuf[5]=vv%10;
        }
}

void t0 () interrupt 1
{
        TH0=(65535-1000)/256;
        TL0=(65535-1000)%256;
        hc_add++;
        led3_add++;
        if(hc_add==200)
        {
                hc_add=0;
                hc_add_flag=1;
        }

        if(led3_add==500)
        {
                led3_add_flag=~led3_add_flag;
                led3_add=0;
        }

        if(open_sec)
        {
                sec_add++;
                if(sec_add==1000)
                {       
                        sec_add=0;
                        if(hw==1)
                        {
                                time1--;
                                if(time1<0)
                                {
                                        time1=time11;
                                        sh_flag=0;
                                        open_sec=0;
                                }
                        }  else
                        {
                                time2--;
                                if(time2<0)
                                {
                                        time2=time22;
                                        sh_flag=0;
                                        open_sec=0;
                                }
                        }
                }
        }
        display();
}

void int_t()
{
        TMOD=0X11;
        ET0=1;
        TH0=(65535-1000)/256;
        TL0=(65535-1000)%256;

        TH1=0;
        TL1=0;
        TR0=1;
        EA=1;
}

void display()
{
        P2=(P2&0x1f)|0xe0;
        P0=0xff;
        P2&=0x1f;

        P2=(P2&0x1f)|0xc0;
        P0=1<<DSP;
        P2&=0x1f;

        P2=(P2&0x1f)|0xe0;
        P0=tab[dspbuf[DSP]];
        P2&=0x1f;

        DSP++;
        if(DSP==8)
        DSP=0;
}

void vv_dat()                                          //判斷電壓
{
       
                if(vv<10)
                {
                   open_led1();
//                   key6();
                   ms_flag=0;
                }               
                else
                {
                        if(vv<40)
                        {
                                open_led2();
                                ms_flag=1;
                        }
                        else
                        {
                                cls_led2();
                                if(led3_add_flag)
                                open_led3();
                                else
                                cls_led3();

                                ms_flag=0;
                        }

                        cls_led1();
                }
}

void delay(uint time)
{
        uint i;
        while(time--)
        {for(i=0;i<800;i++);}
}


void hwlx()
{
        if(ss<=30)
        hw=1;
        else
        hw=2;
}

void key4()
{
        if(ms_flag)
        {
                if(s4==0)
                {
                         delay(10);
                         if(s4==0)
                         {
                                 sh_flag=1;
                                open_sec=1;
                                open_jdq();
                                while(!s4);
                         }
                }
        }
}

void key5()
{
        if(s5==0)
        {
                delay(10);
                if(s5==0)
                {
                        open_sec=~open_sec;
                        while(!s5);       
                }
        }

}

void key6()
{
       
        if(s6==0)
        {
                delay(10);
                if(s6==0)
                {
                         sz_flag++;
                         if(sz_flag==3)
                         {
                                 sz_flag=0;
                                time1=time11;
                                time2=time22;
                                iic_w(0,time11);                                           //寫入24c02
                                delay(100);
                                iic_w(1,time22);                                           //寫入24c02
                         }
                         while(!s6);
                }
        }
}

void key7()
{
        if(s7==0)
        {
                delay(10);
                {
                        if(s7==0)
                        {
                                if(sz_flag==1)
                                {
                                        time11++;
                                        if(time11>10)
                                        {
                                                time11=1;
                                        }
                                }  else
                                {
                                        time22++;
                                        if(time22>10)
                                        {
                                                time22=1;
                                        }
                                }
                                while(!s7);
                        }
                }
        }
}

void moshi()
{
        switch(ms_flag)
        {
                case 0: dspbuf[0]=dspbuf[1]=dspbuf[2]=dspbuf[3]=dspbuf[4]=dspbuf[5]=dspbuf[6]=dspbuf[7]=11;
                                break;

                case 1: dspbuf[0]=1;
                                dspbuf[1]=11;
                                dspbuf[2]=11;
                                dspbuf[3]=ss%100/10;
                                dspbuf[4]=ss%10;;
                                dspbuf[5]=11;
                                dspbuf[6]=11;
                                dspbuf[7]=hw;
                                break;
        }
        cls_led10();
        cls_jdq();
}

void sh_moshi()
{
        open_jdq();
        open_led10();
        dspbuf[0]=2;
        dspbuf[1]=11;
        dspbuf[2]=11;
        dspbuf[3]=11;
        dspbuf[4]=11;
        dspbuf[5]=11;
        if(hw==1)
        {
                dspbuf[6]=time1/10;
                dspbuf[7]=time1%10;
        }else
        {
                dspbuf[6]=time2/10;
                dspbuf[7]=time2%10;
        }
        key5();
        if(open_sec==0&&sh_flag==1)
        {
                 if(led3_add_flag)
                 open_led4();
                 else
                 cls_led4();
        }        else  cls_led4();
}

void sz_moshi()
{
        dspbuf[0]=3;
        dspbuf[1]=11;
        dspbuf[2]=11;
        dspbuf[3]=time11/10;
        dspbuf[4]=time11%10;
        dspbuf[5]=11;
        dspbuf[6]=time22/10;
        dspbuf[7]=time22%10;
        key7();
}





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

使用道具 舉報

沙發
ID:272080 發表于 2018-1-23 16:53 | 只看該作者
忘記上傳文件了  怎么上傳文件啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产午夜 | 国产精品久久久久久久久久免费 | 午夜99 | 在线国产一区二区三区 | 成人久草| 日韩成人在线免费观看 | 毛片一区二区 | 天天操一操 | 伊人精品在线 | 亚洲精品欧美一区二区三区 | 亚洲精品第一页 | 亚洲成人三区 | 欧美一区二区三区在线观看 | 久亚州在线播放 | 久久av网| 九色在线 | 精品网站999www | julia中文字幕久久一区二区 | 在线a视频 | 久久久久久久综合色一本 | 国产片网站 | 国产精品观看 | 久久99精品国产自在现线小黄鸭 | 日韩在线xx | 日韩精品久久一区二区三区 | 成人福利网站 | 中文字幕在线一区二区三区 | 91免费小视频 | 在线看日韩 | 亚洲h在线观看 | 97日日碰人人模人人澡分享吧 | 久久久久国产精品 | 婷婷在线视频 | 91视频进入| 欧美日韩专区 | 久久在线| 日本免费一区二区三区四区 | 婷婷综合色 | 香蕉久久久 | 日韩在线精品视频 | 在线观看中文视频 |