標題: “智能物料傳送系統”設計任務書——藍橋15年決賽 [打印本頁]
作者: 大力做大力愛 時間: 2018-1-23 16:52
標題: “智能物料傳送系統”設計任務書——藍橋15年決賽
“智能物料傳送系統”設計任務書
選用材料為藍橋杯官方提供的開發板。
因為此板選用了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.giffile:////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.1當0<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類貨物。
圖2:數碼管顯示界面1-貨物類型顯示
說明:1:貨物類型顯示格式:I類貨物-數字1、II類貨物-數字;
2:A3草稿紙短邊接近30cm,可用于驗證測距結果。
2. 貨物傳送
在非空載、非過載的前提下,通過按鍵控制繼電器吸合,啟動貨物傳送過程,并通過數碼管實時顯示剩余的傳送時間,倒計時結束后,繼電器自動斷開,完成本次傳送過程,數碼管顯示格式如圖3所示:
圖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所示:
圖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();
}
作者: 大力做大力愛 時間: 2018-1-23 16:53
忘記上傳文件了 怎么上傳文件啊
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |