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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

原創分享-第六屆藍橋杯單片機決賽試題:智能物料傳送系統(試題+源程序)

[復制鏈接]
跳轉到指定樓層
樓主
這次分享的是藍橋杯單片機第六屆國賽考題的程序源碼 單片機程序帶有完整注釋(一些簡單的地方我就沒注釋)
  1. #include "main.h"
  2. #include "display.h"
  3. #include "iic.h"
  4. #include "key.h"
  5. #include "time.h"
  6. #include "sonic.h"
  7. #include "delay.h"

  8. u8 dis_buf[]={"        "};
  9. u8 con_temp = 0X00;
  10. u16 dis_mode=1;//當前顯示模式
  11. u16 hw_flag = 1;//貨物類型標志,1:一類貨物;2:二類貨物
  12. u16 y_time=2,e_time=4;//一類貨物和二類貨物傳送時間標志
  13. bit ssbz=0;//LED閃爍標志
  14. bit job1_flag=0;
  15. bit job2_flag=0;
  16. bit job3_flag=0;
  17. bit job4_flag=0;
  18. bit job5_flag=0;
  19. u16 time=0;//傳送時間標志
  20. u16 yz_flag = 1;//當前運載類型標志,0:空載;1:非空載;2:過載;
  21. bit qdcs_flag=0;//啟動傳送標志
  22. bit ztcs_flag=0;//暫停傳送標志
  23. u8 led_temp=0xff;
  24. bit relay_flag = 0;//繼電器開關標志
  25. bit buzz_flag = 0;//蜂鳴器開關標志
  26. bit ts_flag = 0;//是否進入調節時間模式標志
  27. u16 ts_temp = 0;//1:調節1類貨物傳送時間;2:調節2類貨物傳送時間

  28. void System_init();
  29. void job1();
  30. void job2();
  31. void job3();
  32. void job4();
  33. void job5();
  34. void cc_sj();
  35. void dq_sj();

  36. void main()
  37. {
  38.         System_init();
  39.         pcf_init();
  40.         t0_init();
  41.         t1_init();
  42.         t2_init();
  43.         //cc_sj();
  44.         dq_sj();
  45.         while(1)
  46.         {
  47.                 if(job1_flag)//數碼管顯示
  48.                 {
  49.                         job1();
  50.                         job1_flag=0;
  51.                 }
  52.                 if(job2_flag)//按鍵掃描與處理
  53.                 {
  54.                         job2();
  55.                         job2_flag=0;
  56.                 }
  57.                 if(job3_flag)//數碼管顯示模式與LED顯示模式處理
  58.                 {
  59.                         job3();
  60.                         job3_flag=0;
  61.                 }
  62.                 if(job4_flag)//電壓測量與超聲波測距
  63.                 {
  64.                         if(!qdcs_flag & !ts_flag)//啟動傳送之后不再測量電壓與距離
  65.                         job4();
  66.                         job4_flag=0;
  67.                 }
  68.                 if(job5_flag)//傳送時間計算
  69.                 {
  70.                         job5();
  71.                         job5_flag=0;
  72.                 }         
  73.         }
  74. }

  75. void System_init()
  76. {
  77.         all_off;
  78.         led_set=0xff;
  79. }

  80. void job1()//數碼管顯示
  81. {
  82.         display_seg(dis_buf);
  83. }

  84. void job2()//按鍵處理
  85. {
  86.         u8 key_num;
  87.         key_num = read_key();
  88.         if(s4_flag)
  89.         {
  90.                 if(yz_flag!=0&&!qdcs_flag)//非空載,傳送標志為0能進入判斷
  91.                 {
  92.                         dis_mode = 2;
  93.                         qdcs_flag = 1;
  94.                         relay_flag = 1;
  95.                         if(hw_flag==1)
  96.                         {
  97.                                 time = y_time;
  98.                         }
  99.                         else
  100.                         {
  101.                                 time = e_time;
  102.                         }        
  103.                 }
  104.                 s4_flag=0;
  105.         }
  106.         if(s5_flag)
  107.         {
  108.                 if(qdcs_flag)
  109.                 {
  110.                         ztcs_flag = ~ztcs_flag;
  111.                         if(ztcs_flag)
  112.                         {
  113.                                 relay_flag = 0;        
  114.                         }
  115.                         if(!ztcs_flag)
  116.                         {
  117.                                 relay_flag = 1;
  118.                         }
  119.                 }
  120.                 s5_flag=0;
  121.         }
  122.         if(s6_flag)
  123.         {
  124.                 ts_flag = 1;
  125.                 ts_temp++;
  126.                 dis_mode = 3;
  127.                 if(ts_temp == 3)
  128.                 {
  129.                         cc_sj();
  130.                         dq_sj();
  131.                         ts_temp = 0;
  132.                         ts_flag = 0;
  133.                         dis_mode = 4;        
  134.                 }
  135.                 s6_flag = 0;        
  136.         }
  137.         if(s7_flag)
  138.         {
  139.                 if(ts_flag)
  140.                 {
  141.                         switch(ts_temp)
  142.                         {
  143.                                 case 1:y_time++;if(y_time== 11)y_time = 1;break;
  144.                                 case 2:e_time++;if(e_time== 11)e_time = 1;break;
  145.                         }
  146.                 }
  147.                 s7_flag = 0;
  148.         }
  149. }
  150. void job3()//顯示模式處理(數碼管顯示與LED顯示)
  151. {
  152.         //數碼管顯示處理
  153.         switch(dis_mode)
  154.         {
  155.                 case 1:
  156.                 {
  157.                         sprintf(dis_buf,"%1d  %02d  %1d",dis_mode,juli,hw_flag);
  158.                 }break;

  159.                 case 2:
  160.                 {
  161.                         sprintf(dis_buf,"%1d     %02d",dis_mode,time);               
  162.                 }break;

  163.                 case 3:
  164.                 {
  165.                         if(!ssbz)
  166.                         {
  167.                                 sprintf(dis_buf,"%1d  %02d %02d",dis_mode,y_time,e_time);        
  168.                         }
  169.                         else
  170.                         {
  171.                                 switch(ts_temp)
  172.                                 {
  173.                                         case 1:sprintf(dis_buf,"%1d     %02d",dis_mode,e_time);break;
  174.                                         case 2:sprintf(dis_buf,"%1d  %02d   ",dis_mode,y_time);break;        
  175.                                 }
  176.                         }
  177.                                        
  178.                 }break;

  179.                 case 4:
  180.                 {
  181.                         sprintf(dis_buf,"        ");
  182.                 }break;
  183.         }
  184.         //LED顯示處理
  185.         if(yz_flag == 2)//過載,蜂鳴器響
  186.         {
  187.                 led_temp = 0x04;
  188.                 buzz_flag = 1;//打開蜂鳴器響標志
  189.         }
  190.         else
  191.         {
  192.                 led_temp = 0x00;
  193.                 buzz_flag = 0;//關閉蜂鳴器響標志
  194.         }
  195.         if(ztcs_flag)led_temp = led_temp|0x08;
  196.         if(ssbz)led_set = ~led_temp;
  197.         else led_set = 0xff;
  198.         //繼電器與蜂鳴器處理
  199.         con_temp = 0x00;
  200.         if(relay_flag)con_temp |= 0x10;
  201.         else con_temp &= 0XEF;
  202.         if(buzz_flag)con_temp |= 0x40;
  203.         else con_temp &= 0xbf;
  204.         con_set = con_temp;        
  205. }
  206. void job4()//電壓測量與測距處理
  207. {
  208.         u16 adc=0;//模數轉換返回值
  209.         f32 dy=0;//電壓值
  210.         adc = pcf_adc();//調用模數轉換函數
  211.         dy = (f32)adc/255.0*5.0;//計算當前電壓為多少
  212.         if(dy>0.0&&dy<1.0)//空載數碼管熄滅
  213.         {
  214.                 yz_flag=0;//空載
  215.                 if(!ts_flag)
  216.                 dis_mode = 4;//顯示模式4:數碼管全滅
  217.         }
  218.         else if(dy>=1.0&&dy<4.0)//非空載
  219.         {
  220.                 yz_flag=1;//非空載
  221.                 if(!ts_flag)
  222.                 dis_mode = 1;//顯示模式1:數碼管顯示
  223.         }
  224.         else if(dy>=4.0)//過載
  225.         {
  226.                 yz_flag=2;//過載
  227.                 if(!ts_flag)
  228.                 dis_mode = 1;        
  229.         }
  230.         //測量距離
  231.         if(yz_flag!=0)//如果非空載
  232.         {
  233.                 ceju();//測量距離
  234. //                juli =31;//測試
  235.                 if(juli<=30)//判斷貨物類型
  236.                 {
  237.                         hw_flag=1;//一類貨物
  238.                 }
  239.                 else
  240.                 {
  241.                         hw_flag=2;//二類貨物
  242.                 }        
  243.         }
  244. }

  245. void job5()//時間計算函數
  246. {
  247.         if(!ztcs_flag)time--;//如果沒有暫停
  248.         if(time == 0)//時間等于零
  249.         {
  250.                 qdcs_flag = 0;
  251.                 ztcs_flag = 0;
  252.                 relay_flag = 0;
  253.         }
  254. }

  255. void cc_sj()
  256. {
  257.         write_eeprom(0,y_time);
  258.         write_eeprom(1,e_time);
  259. }

  260. void dq_sj()
  261. {
  262.         y_time = read_eeprom(0);
  263.         e_time = read_eeprom(1);
  264. }
復制代碼
工程文件請到51hei附件里面下載

第6屆:智能物料傳送系統.rar

82.82 KB, 下載次數: 28, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级a爱片性色毛片免费 | 精品九九| 你懂的在线视频播放 | 国产日韩欧美二区 | 久久国内精品 | 久久久www成人免费精品 | 国产1区2区 | 国产超碰人人爽人人做人人爱 | 在线亚洲免费视频 | 日韩一区二区在线视频 | 精品视频一区二区 | 高清免费在线 | 91日韩| 一区在线播放 | 中文字幕免费 | 二区av | 久久久久久成人 | 亚洲国产视频一区二区 | 午夜精品视频 | 欧美 日韩 亚洲91麻豆精品 | 国产精品亚洲综合 | 国产亚洲欧美在线视频 | 9久久| 久久99国产精品 | 成人一区二区视频 | 日韩中文字幕在线免费 | 国产丝袜一区二区三区免费视频 | 国产精品99久久久久久动医院 | 精品综合网 | 视频在线一区二区 | 精品自拍视频在线观看 | 高清一区二区 | 视频在线一区 | 福利社午夜影院 | 天天操天天拍 | 99在线免费观看视频 | 午夜欧美 | 国产在线二区 | 一本综合久久 | 久久精品这里 | 国产精品亚洲一区 |