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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的MP3公交報站器設計(程序)

[復制鏈接]
跳轉到指定樓層
樓主
ID:90992 發表于 2018-10-14 19:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
隨著智慧公交的到來,智能報站器開始遍布到每一輛公交車上。本設計是基于51的低成本多功能自動定位遠程控制的報站器。

單片機源程序如下:
  1. #include "reg52.h"
  2. #include "flash.h"
  3. #include "sta013.h"
  4. #include "ds1302.h"
  5. #include "watchdog.h"
  6. #include "global.h"
  7. #include "communication.h"
  8. #include "voicefunction.h"
  9. #include "operate.h"
  10. #include "keydisp.h"
  11. #include "define.h"
  12. #include "turnbrakecheck.h"


  13. unsigned char xdata rs232_or_rs485 = 0;        //2016-05-17 10:28:02
  14. extern void SendGuidepostInit(void);                //2015-12-21 CJJ

  15. void main(void)
  16. {
  17.         //2015-12-22 CJJ
  18.         unsigned char xdata line_name_tmp[4] , i, j, k;
  19.         unsigned long xdata flashadd_tmp;

  20.         sys_init();                                        //系統初始化

  21.         DS_RAM_RD(RS232_OR_RS485, &rs232_or_rs485);//獲取后串口定義為232還是485
  22.         if (rs232_or_rs485)        //使能后485
  23.         {
  24.                 RS485EN = 1;
  25.                 RS232EN = 0;            
  26.         }
  27.         else                //使能后232      
  28.         {
  29.                 RS485EN = 0;
  30.                 RS232EN = 1;          
  31.         }

  32.         while(1)
  33.         {
  34.                 FeedWatchDog();
  35.                 TurnVoicePrompt();                        //2017.02.26 湯 博
  36.                 if(keynumber!=0xffff)
  37.                 {
  38.                         ClrTimmer();                        //清除定時器數據2003.05.20
  39.                         switch(keynumber)
  40.                         {
  41.                                 case KEY00:
  42.                                         CloseTimmer();        //close timmer when playying2003.05.20
  43.                                         PlayServeVoice(0);
  44.                                         break;
  45.                                 case KEY01:
  46.                                         CloseTimmer();        //close timmer when playying2003.05.20
  47.                                         PlayServeVoice(1);
  48.                                         break;
  49.                                 case KEY02:
  50.                                         CloseTimmer();        //close timmer when playying2003.05.20
  51.                                         if(S_Xuan6_8==0)
  52.                                                 PlayServeVoice(2);
  53.                                         else
  54.                                                 PlayServeVoice(5);
  55.                                         break;
  56.                                 case KEY03:
  57.                                         CloseTimmer();        //close timmer when playying2003.05.20
  58.                                         if(S_Xuan6_8==0)
  59.                                                 PlayServeVoice(3);
  60.                                         else
  61.                                                 PlayServeVoice(6);
  62.                                         break;
  63.                                 case KEY04:
  64.                                         CloseTimmer();        //close timmer when playying2003.05.20
  65.                                         if(S_Xuan6_8==0)
  66.                                                 PlayServeVoice(4);
  67.                                         else
  68.                                                 PlayServeVoice(7);
  69.                                         break;
  70.                                 case KEY06:
  71.                                         if(S_Xuan6_8==0)
  72.                                         {
  73.                                                 S_Xuan6_8=1;
  74.                                                 //顯示"擴展"
  75.             Disp_Symbol(FLAG_EXTEND,ON,OFF);
  76.                                         }
  77.                                         else
  78.                                         {
  79.                                                 S_Xuan6_8=0;
  80.                                                 //"擴展"消失
  81.                                                 Disp_Symbol(FLAG_EXTEND,OFF,OFF);
  82.                                         }
  83.                                         break;
  84.                                 case KEY05:
  85.                                         CloseTimmer();        //close timmer when playying2003.05.20
  86.                                         PlayBaoZhan(PLAY_REPEAT);
  87.                                         break;
  88.                                 case KEY09:
  89.                                         ChangBusStop(1);        //=1增站
  90.                                         CloseTimmer();        //close timmer when playying2003.05.20
  91.                                         break;
  92.                                 case KEY0A:
  93.                                         ChangBusStop(0);        //=1增站
  94.                                         CloseTimmer();        //close timmer when playying2003.05.20
  95.                                         break;
  96.                                 case KEY07:                                //報進站 2017.02.22
  97.                                         CloseTimmer();        //close timmer when playying2003.05.20
  98.                                         // 2006.11.25add
  99.                                         if(GB_StudyAuto)
  100.                                                 GB_IsPressKeyPlay = 1;
  101.                                             PlayIn_Flag = 1;       //2017.02.26  湯博
  102.                                         PlayBaoZhan(PLAY_IN);
  103.                                         break;
  104.                                 case KEY08:             //報出站 2017.02.22
  105.                                         CloseTimmer();        //close timmer when playying2003.05.20
  106.                                         // 2006.11.25add
  107.                                         if(GB_StudyAuto)
  108.                                                 GB_IsPressKeyPlay = 1;
  109.                                         PlayBaoZhan(PLAY_OUT);
  110.                                         break;
  111.                                 case KEY10:
  112.                                         //StartTimmer();
  113.                                         CloseTimmer();
  114.                                         if(ChangeState(SPK_BIT_IN_CFG))        //改變外喇叭狀態
  115.                                                 Disp_Symbol(FLAG_SPEAKER_F,ON,OFF);  //顯示改變
  116.                                         else
  117.                                                 Disp_Symbol(FLAG_SPEAKER_F,OFF,OFF);
  118.                                         SltSpkOFF();                        //2012.4.14
  119.                                         break;
  120.                                 case KEY11:
  121.                                         //StartTimmer();
  122.                                         CloseTimmer();
  123.                                         if(ChangeState(AUTO_BIT_IN_CFG))           //改變自動報站狀態
  124.                                                 Disp_Symbol(FLAG_AUTO_F,ON,OFF);  //顯示改變
  125.                                         else
  126.                                                 Disp_Symbol(FLAG_AUTO_F,OFF,OFF);
  127.                                         break;
  128.                                 case KEY12:
  129.                                         //StartTimmer();
  130.                                         CloseTimmer();
  131.                                         if(ChangeState(TMV_BIT_IN_CFG))        //改變時段音量狀態
  132.                                                 Disp_Symbol(FLAG_TIME_F,ON,OFF);  //顯示改變
  133.                                         else
  134.                                                 Disp_Symbol(FLAG_TIME_F,OFF,OFF);
  135.                                         break;
  136.                                 case KEY13:
  137.                                         //StartTimmer();
  138.                                         CloseTimmer();
  139.                                         ChangeDirection();
  140.                                         break;
  141.                                 case KEY14:
  142.                                         //StartTimmer();
  143.                                         CloseTimmer();
  144.                                         if(ChangeState(MUSIC_BIT_IN_CFG))        //改變背景音樂狀態
  145.                                                 Disp_Symbol(FLAG_MUSIC,ON,OFF);  //顯示改變
  146.                                         else
  147.                                                 Disp_Symbol(FLAG_MUSIC,OFF,OFF);
  148.                                         break;
  149.                                 case KEY16:
  150.                                         //StartTimmer();
  151.                                         CloseTimmer();
  152.                                         if(ChangeState(OV_BIT_IN_CFG))        //改變區間狀態
  153.                                                 Disp_Symbol(FLAG_OVER_F,ON,OFF);  //顯示改變
  154.                                         else
  155.                                                 Disp_Symbol(FLAG_OVER_F,OFF,OFF);
  156.                                         break;
  157.                                 case KEY15:
  158.                                         //顯示"線路"并閃爍
  159.                                         StartTimmer();                //啟動定時2003.05.20
  160.                                         SetMenu();                        //菜單設置2017.02.22
  161.                                         break;
  162.                                 case KEY_UP_L: //↑ 長按
  163.                                         CloseTimmer();
  164.                                         Disp_Clear();
  165.                                         Disp_Num(0 , BLACK, OFF);                        //顯示" 485"
  166.                                         Disp_Num(1 , 5 , OFF);
  167.                                         Disp_Num(2 , 8 , OFF);
  168.                                         Disp_Num(3 , 4 , OFF);
  169.                                         rs232_or_rs485 = 1;
  170.                                         DS_RAM_WR(RS232_OR_RS485, rs232_or_rs485);
  171.                                         RS485EN = 1;
  172.                                         RS232EN = 0;   //后485       
  173.                                         Delay_350ms(6);
  174.                                         revertdisp();                        //恢復默認顯示!!!!!
  175.                                         break;
  176.                                 case KEY_DOWN_L://↓ 長按
  177.                                         CloseTimmer();
  178.                                         Disp_Clear();
  179.                                         Disp_Num(0 , BLACK , OFF);                        //顯示" 232"
  180.                                         Disp_Num(1 , 2 , OFF);
  181.                                         Disp_Num(2 , 3 , OFF);
  182.                                         Disp_Num(3 , 2 , OFF);
  183.                                         rs232_or_rs485 = 0;
  184.                                         DS_RAM_WR(RS232_OR_RS485, rs232_or_rs485);
  185.                                         RS485EN = 0;
  186.                                         RS232EN = 1;   //后232
  187.                                         Delay_350ms(6);
  188.                                         revertdisp();                        //恢復默認顯示!!!!!
  189.                                         break;
  190.                                 default:
  191.                                         break;
  192.                         }
  193.                         keynumber=0xffff;
  194.                 }//end if(keynumber!=0xffff)
  195.                 if(RevertDisp_Flag==1)      //恢復初始顯示2017.02.22
  196.                 {
  197.                         RevertDisp_Flag=0;
  198.                         revertdisp();
  199.                 }
  200.                
  201.                 if(GB_Config & AUTO_BIT_IN_CFG)                //如果啟動自動報站則進入自動報站處理程序
  202.                 {
  203.                         // 下面代碼2007.7.6add 2007.7.13 move here 防止影響其他的閃爍顯示
  204.                         if(GpsDataReceive_Flag)         //如果接收到完整的GPS數據包     2017.02.24 湯博 注
  205.                         {
  206.                                 if(GB_IsInceptGPSdata)                                //如果接收到GPS數據包     2017.02.24 湯博 注
  207.                                 {
  208.                                         GB_IsInceptGPSdata = 0;                        //接收到GPS數據包標志置零   
  209.                                         Disp_Symbol(FLAG_AUTO_F , ON , OFF);  //顯示改變
  210.                                 }
  211.                                 else
  212.                                 {
  213.                                         GB_IsInceptGPSdata = 1;
  214.                                         Disp_Symbol(FLAG_AUTO_F , OFF , OFF);
  215.                                 }
  216.                         }
  217.                         AutoPlayBaoZhan();
  218.                 }

  219.                
  220.                
  221. #if TURN_BRAKE_CHECK_EN > 0
  222.                 turn_brake_check();
  223. #endif

  224.                 //以下為線路變更處理--------------------------------------------------------------------------------------
  225.                 EA = 0;//關總中斷避免干擾
  226.                 if (0 != (road_line[0] || road_line[1] || road_line[2] || road_line[3]))//若非全0則表明成功收到線路變更命令
  227.                 {
  228. //                        SerialSendByte('Y');//_DBG_
  229.                         //獲取線路總條數
  230.                         flashadd_tmp = 11;//LINE_NUM_OFSET_OF_FILE_HEADER;//線路總數目偏移地址
  231.                         FlashRandomRead(flashadd_tmp  , &j , 1);

  232. //                        SerialSendByte(j);//_DBG_
  233.                         //將'1''9''2'逐個搜索比較"線路名稱",再轉換為線路編號(從1開始編號的)作為SetCurrentLine的參數
  234.                         for (i = 0; i < j; i++)
  235.                         {
  236.                                 flashadd_tmp = 12/*LINE_OFSET_OF_FILE_HEADER*/ + i * sizeof(unsigned long);
  237.                                 FlashRandomRead(flashadd_tmp  , (unsigned char *)(&flashadd_tmp) , sizeof(unsigned long));//編號i的線路的屬性偏移地址
  238.                                 FlashRandomRead(flashadd_tmp  , line_name_tmp , sizeof(line_name_tmp));//語音文件支持8Byte,實際使用4Byte
  239.                                 for (k = 0; k < 4; k++)//逐字比較
  240.                                 {
  241.                                         if (road_line[k] != line_name_tmp[k])//不匹配//192存儲為[0X31 0X39 0X32 0X00]
  242.                                         {
  243.                                                 break;//失敗,搜索下條線路
  244.                                         }
  245.                                 }       
  246. //                                SerialSendByte(line_name_tmp[0]);//_DBG_
  247. //                                SerialSendByte(line_name_tmp[1]);//_DBG_
  248. //                                SerialSendByte(line_name_tmp[2]);//_DBG_
  249. //                                SerialSendByte(line_name_tmp[3]);//_DBG_
  250.                                 if (4 == k)//匹配成功
  251.                                 {
  252.                                         SetCurrentLine(i);//設置當前線路 2015-12-22         CJJ
  253.                                         ES = 0;
  254.                                         SendGuidepostInit();//向站牌發送線路切換信息 2015-12-22         CJJ
  255. ……………………

  256. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:

hardware.zip

22.98 KB, 下載次數: 36, 下載積分: 黑幣 -5

project.zip

181.53 KB, 下載次數: 35, 下載積分: 黑幣 -5

user.zip

54.4 KB, 下載次數: 22, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2018-10-15 01:01 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩久久久久 | 久久久久久免费看 | 综合久久色| 日日操夜夜操天天操 | 精品不卡 | 欧美日韩中文字幕 | 成av在线| 精品综合久久 | 亚洲国产精品第一区二区 | 国产视频一区在线 | 亚洲 欧美 在线 一区 | 国产午夜精品久久久 | 欧美日韩网站 | 成人在线日韩 | 四虎影视免费在线 | 中文字幕高清免费日韩视频在线 | 网站黄色在线免费观看 | 成人精品毛片国产亚洲av十九禁 | 岛国毛片| 亚洲精品www| 国产高清精品一区二区三区 | 国产在线一级片 | 四色成人av永久网址 | 精品99爱视频在线观看 | 欧美亚洲另类丝袜综合网动图 | 色99视频 | 视频一区二区在线观看 | 日韩国产一区二区三区 | 噜噜噜噜狠狠狠7777视频 | 最新av中文字幕 | 99精品欧美一区二区三区综合在线 | 国产精品一区二区av | 性视频网 | 岛国av一区二区三区 | 国产精品成人一区 | 国产视频精品免费 | 免费一区二区三区 | 激情在线视频网站 | 午夜网| 亚洲福利一区二区 | 日本黄色的视频 |