|
這次分享的是藍橋杯單片機第六屆國賽考題的程序源碼
第6屆:智能物料傳送系統試題題目_Page1.jpg (141.2 KB, 下載次數: 88)
下載附件
2019-5-19 16:00 上傳
第6屆:智能物料傳送系統試題題目_Page2.jpg (176.13 KB, 下載次數: 80)
下載附件
2019-5-19 16:00 上傳
第6屆:智能物料傳送系統試題題目_Page3.jpg (126.33 KB, 下載次數: 77)
下載附件
2019-5-19 16:00 上傳
單片機程序帶有完整注釋(一些簡單的地方我就沒注釋)- #include "main.h"
- #include "display.h"
- #include "iic.h"
- #include "key.h"
- #include "time.h"
- #include "sonic.h"
- #include "delay.h"
- u8 dis_buf[]={" "};
- u8 con_temp = 0X00;
- u16 dis_mode=1;//當前顯示模式
- u16 hw_flag = 1;//貨物類型標志,1:一類貨物;2:二類貨物
- u16 y_time=2,e_time=4;//一類貨物和二類貨物傳送時間標志
- bit ssbz=0;//LED閃爍標志
- bit job1_flag=0;
- bit job2_flag=0;
- bit job3_flag=0;
- bit job4_flag=0;
- bit job5_flag=0;
- u16 time=0;//傳送時間標志
- u16 yz_flag = 1;//當前運載類型標志,0:空載;1:非空載;2:過載;
- bit qdcs_flag=0;//啟動傳送標志
- bit ztcs_flag=0;//暫停傳送標志
- u8 led_temp=0xff;
- bit relay_flag = 0;//繼電器開關標志
- bit buzz_flag = 0;//蜂鳴器開關標志
- bit ts_flag = 0;//是否進入調節時間模式標志
- u16 ts_temp = 0;//1:調節1類貨物傳送時間;2:調節2類貨物傳送時間
- void System_init();
- void job1();
- void job2();
- void job3();
- void job4();
- void job5();
- void cc_sj();
- void dq_sj();
- void main()
- {
- System_init();
- pcf_init();
- t0_init();
- t1_init();
- t2_init();
- //cc_sj();
- dq_sj();
- while(1)
- {
- if(job1_flag)//數碼管顯示
- {
- job1();
- job1_flag=0;
- }
- if(job2_flag)//按鍵掃描與處理
- {
- job2();
- job2_flag=0;
- }
- if(job3_flag)//數碼管顯示模式與LED顯示模式處理
- {
- job3();
- job3_flag=0;
- }
- if(job4_flag)//電壓測量與超聲波測距
- {
- if(!qdcs_flag & !ts_flag)//啟動傳送之后不再測量電壓與距離
- job4();
- job4_flag=0;
- }
- if(job5_flag)//傳送時間計算
- {
- job5();
- job5_flag=0;
- }
- }
- }
- void System_init()
- {
- all_off;
- led_set=0xff;
- }
- void job1()//數碼管顯示
- {
- display_seg(dis_buf);
- }
- void job2()//按鍵處理
- {
- u8 key_num;
- key_num = read_key();
- if(s4_flag)
- {
- if(yz_flag!=0&&!qdcs_flag)//非空載,傳送標志為0能進入判斷
- {
- dis_mode = 2;
- qdcs_flag = 1;
- relay_flag = 1;
- if(hw_flag==1)
- {
- time = y_time;
- }
- else
- {
- time = e_time;
- }
- }
- s4_flag=0;
- }
- if(s5_flag)
- {
- if(qdcs_flag)
- {
- ztcs_flag = ~ztcs_flag;
- if(ztcs_flag)
- {
- relay_flag = 0;
- }
- if(!ztcs_flag)
- {
- relay_flag = 1;
- }
- }
- s5_flag=0;
- }
- if(s6_flag)
- {
- ts_flag = 1;
- ts_temp++;
- dis_mode = 3;
- if(ts_temp == 3)
- {
- cc_sj();
- dq_sj();
- ts_temp = 0;
- ts_flag = 0;
- dis_mode = 4;
- }
- s6_flag = 0;
- }
- if(s7_flag)
- {
- if(ts_flag)
- {
- switch(ts_temp)
- {
- case 1:y_time++;if(y_time== 11)y_time = 1;break;
- case 2:e_time++;if(e_time== 11)e_time = 1;break;
- }
- }
- s7_flag = 0;
- }
- }
- void job3()//顯示模式處理(數碼管顯示與LED顯示)
- {
- //數碼管顯示處理
- switch(dis_mode)
- {
- case 1:
- {
- sprintf(dis_buf,"%1d %02d %1d",dis_mode,juli,hw_flag);
- }break;
- case 2:
- {
- sprintf(dis_buf,"%1d %02d",dis_mode,time);
- }break;
- case 3:
- {
- if(!ssbz)
- {
- sprintf(dis_buf,"%1d %02d %02d",dis_mode,y_time,e_time);
- }
- else
- {
- switch(ts_temp)
- {
- case 1:sprintf(dis_buf,"%1d %02d",dis_mode,e_time);break;
- case 2:sprintf(dis_buf,"%1d %02d ",dis_mode,y_time);break;
- }
- }
-
- }break;
- case 4:
- {
- sprintf(dis_buf," ");
- }break;
- }
- //LED顯示處理
- if(yz_flag == 2)//過載,蜂鳴器響
- {
- led_temp = 0x04;
- buzz_flag = 1;//打開蜂鳴器響標志
- }
- else
- {
- led_temp = 0x00;
- buzz_flag = 0;//關閉蜂鳴器響標志
- }
- if(ztcs_flag)led_temp = led_temp|0x08;
- if(ssbz)led_set = ~led_temp;
- else led_set = 0xff;
- //繼電器與蜂鳴器處理
- con_temp = 0x00;
- if(relay_flag)con_temp |= 0x10;
- else con_temp &= 0XEF;
- if(buzz_flag)con_temp |= 0x40;
- else con_temp &= 0xbf;
- con_set = con_temp;
- }
- void job4()//電壓測量與測距處理
- {
- u16 adc=0;//模數轉換返回值
- f32 dy=0;//電壓值
- adc = pcf_adc();//調用模數轉換函數
- dy = (f32)adc/255.0*5.0;//計算當前電壓為多少
- if(dy>0.0&&dy<1.0)//空載數碼管熄滅
- {
- yz_flag=0;//空載
- if(!ts_flag)
- dis_mode = 4;//顯示模式4:數碼管全滅
- }
- else if(dy>=1.0&&dy<4.0)//非空載
- {
- yz_flag=1;//非空載
- if(!ts_flag)
- dis_mode = 1;//顯示模式1:數碼管顯示
- }
- else if(dy>=4.0)//過載
- {
- yz_flag=2;//過載
- if(!ts_flag)
- dis_mode = 1;
- }
- //測量距離
- if(yz_flag!=0)//如果非空載
- {
- ceju();//測量距離
- // juli =31;//測試
- if(juli<=30)//判斷貨物類型
- {
- hw_flag=1;//一類貨物
- }
- else
- {
- hw_flag=2;//二類貨物
- }
- }
- }
- void job5()//時間計算函數
- {
- if(!ztcs_flag)time--;//如果沒有暫停
- if(time == 0)//時間等于零
- {
- qdcs_flag = 0;
- ztcs_flag = 0;
- relay_flag = 0;
- }
- }
- void cc_sj()
- {
- write_eeprom(0,y_time);
- write_eeprom(1,e_time);
- }
- void dq_sj()
- {
- y_time = read_eeprom(0);
- e_time = read_eeprom(1);
- }
復制代碼 工程文件請到51hei附件里面下載
|
-
-
第6屆:智能物料傳送系統.rar
2019-5-19 22:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
82.82 KB, 下載次數: 28, 下載積分: 黑幣 -5
評分
-
查看全部評分
|