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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103和串口屏通訊 液晶屏測試工裝源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:390333 發表于 2018-8-27 11:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用stm32與串口屏通訊
工程路徑為..\STM32\DCDEMO7\RVMDK\DCDEMO7.uvproj ,請用KEIL4(MDK4)以上版本打開

單片機源程序如下:
  1. #include "hmi_driver.h"
  2. #include "hmi_user_uart.h"
  3. #include "cmd_queue.h"
  4. #include "cmd_process.h"
  5. #include "stdio.h"
  6. #include "hw_config.h"
  7. #include "ulitity.h"
  8. #include "string.h"
  9. #include "rtc.h"
  10. #include "stm32f10x_bkp.h"
  11. #include "stm32f10x_rtc.h"
  12. #include "stm32f10x_pwr.h"
  13. //#include "key_IN.h"

  14. #define TIME_100MS 10                                                                //100毫秒(10個單位)

  15. volatile uint32  timer_tick_count = 0;                                               //定時器節拍

  16. uint8  cmd_buffer[CMD_MAX_SIZE];                                                     //指令緩存
  17. static uint16 current_screen_id = 0;                                                 //當前畫面ID
  18. static int32 test_value = 0;                                                         //測試值
  19. static uint8 update_en = 0;                                                          //更新標記
  20. static int32 meter_flag = 0;                                                         //儀表指針往返標志位
  21. static int32 num = 0;                                                                //曲線采樣點計數
  22. static uint8 sec = 1;                                                                //時間秒
  23. static int32 curves_type = 0;                                                        //曲線標志位  0為正弦波,1為鋸齒波                  
  24. static int32 second_flag=0;                                                          //時間標志位
  25. static int32 Progress_Value = 0;                                                     //進度條的值
  26. static int32 icon_flag = 0;                                                          //圖標標志位
  27. //int32 key_flag  = 0;
  28. static uint16 screenid = 0;

  29. extern uint32 OP_XGUS;
  30. int t1 = 5;

  31. void UpdateUI(void);                                                                 //更新UI數據
  32. void picxdisp(uchar n,int x1,int y1,int x2,int y2) ;



  33. /*!                                                                                 
  34. *  \brief  程序入口                                                                 
  35. */                                                                                 
  36. int main()                                                                          
  37. {                                                                                   
  38.     static int32 test_value = 0;                                                     //測試值
  39.     uint32 timer_tick_last_update = 0;                                               //上一次更新的時間
  40.     qsize  size = 0;                                                               
  41.     //int PRESS ;
  42.     //配置時鐘                                                                    
  43.     Set_System();                                                                  
  44.     //配置串口中斷                                                               
  45.     Interrupts_Config();                                                            
  46.     //配置時鐘節拍                                                               
  47.     systicket_init();   
  48.    
  49.    // KEY_Init();
  50.     RTC_int();   
  51.   
  52.     //串口初始化                                             
  53.     Uart2Init(9600);                                                               
  54.     UartInit(9600);
  55.      
  56.     //清空串口接收緩沖區                                                         
  57.     queue_reset();                                                                  

  58.     //延時等待串口屏初始化完畢,必須等待300ms                                      
  59.     delay_ms(300);                                                                  


  60.     while(1)                                                                        
  61.     {   
  62.       size = queue_find_cmd(cmd_buffer,CMD_MAX_SIZE); //從緩沖區中獲取一條指令        
  63.                 if(size>0&&cmd_buffer[1]!=0x07)//接收到指令
  64.                 {
  65.                         ProcessMessage((PCTRL_MSG)cmd_buffer, size);//指令處理
  66.                 }
  67.      
  68.       /*PRESS = KEY_Scan();
  69.       switch(PRESS)
  70.       {
  71.    
  72.         case 1 :
  73.                 while(key_flag)
  74.                 {
  75.                   KEY_Scan();
  76.                   SetScreen(screenid);
  77.                   screenid++;
  78.                 }  
  79.         break;
  80.         case 2 :
  81.                 SetScreen(screenid);
  82.                 screenid -= 1;
  83.         break;
  84.         case 3 :
  85.                 SetScreen(screenid);
  86.                 screenid += 1;
  87.         break;
  88.       }*/
  89.     }
  90. }




  91. /*!
  92. *  \brief  消息處理流程
  93. *  \param msg 待處理消息
  94. *  \param size 消息長度
  95. */



  96. void ProcessMessage( PCTRL_MSG msg, uint16 size )
  97. {
  98.     uint8 cmd_type = msg->cmd_type;                                                  //指令類型
  99.     uint8 ctrl_msg = msg->ctrl_msg;                                                  //消息的類型
  100.     uint8 control_type = msg->control_type;                                          //控件類型
  101.     uint16 screen_id = PTR2U16(&msg->screen_id);                                     //畫面ID
  102.     uint16 control_id = PTR2U16(&msg->control_id);                                   //控件ID
  103.     uint32 value = PTR2U32(msg->param);                                              //數值


  104.     switch(cmd_type)
  105.     {  
  106.     case NOTIFY_TOUCH_PRESS:                                                         //觸摸屏按下
  107.     case NOTIFY_TOUCH_RELEASE:                                                       //觸摸屏松開
  108.         NotifyTouchXY(cmd_buffer[1],PTR2U16(cmd_buffer+2),PTR2U16(cmd_buffer+4));
  109.         break;                                                                    
  110.     case NOTIFY_WRITE_FLASH_OK:                                                      //寫FLASH成功
  111.         NotifyWriteFlash(1);                                                      
  112.         break;                                                                    
  113.     case NOTIFY_WRITE_FLASH_FAILD:                                                   //寫FLASH失敗
  114.         NotifyWriteFlash(0);                                                      
  115.         break;                                                                    
  116.     case NOTIFY_READ_FLASH_OK:                                                       //讀取FLASH成功
  117.         NotifyReadFlash(1,cmd_buffer+2,size-6);                                      //去除幀頭幀尾
  118.         break;                                                                     
  119.     case NOTIFY_READ_FLASH_FAILD:                                                    //讀取FLASH失敗
  120.         NotifyReadFlash(0,0,0);                                                   
  121.         break;                                                                    
  122.     case NOTIFY_READ_RTC:                                                            //讀取RTC時間
  123.         NotifyReadRTC(cmd_buffer[2],cmd_buffer[3],cmd_buffer[4],cmd_buffer[5],cmd_buffer[6],cmd_buffer[7],cmd_buffer[8]);
  124.         break;
  125.     case NOTIFY_CONTROL:
  126.         {
  127.             if(ctrl_msg==MSG_GET_CURRENT_SCREEN)                                     //畫面ID變化通知
  128.             {
  129.                 NotifyScreen(screen_id);                                             //畫面切換調動的函數
  130.             }
  131.             else
  132.             {
  133.                 switch(control_type)
  134.                 {
  135.                 case kCtrlButton:                                                    //按鈕控件
  136.                     NotifyButton(screen_id,control_id,msg->param[1]);                  
  137.                     break;                                                            
  138.                 case kCtrlText:                                                      //文本控件
  139.                     NotifyText(screen_id,control_id,msg->param);                        
  140.                     break;                                                            
  141.                 case kCtrlProgress:                                                  //進度條控件
  142.                     NotifyProgress(screen_id,control_id,value);                        
  143.                     break;                                                            
  144.                 case kCtrlSlider:                                                    //滑動條控件
  145.                     NotifySlider(screen_id,control_id,value);                          
  146.                     break;                                                            
  147.                 case kCtrlMeter:                                                     //儀表控件
  148.                     NotifyMeter(screen_id,control_id,value);                           
  149.                     break;                                                            
  150.                 case kCtrlMenu:                                                      //菜單控件
  151.                     NotifyMenu(screen_id,control_id,msg->param[0],msg->param[1]);      
  152.                     break;                                                              
  153.                 case kCtrlSelector:                                                  //選擇控件
  154.                     NotifySelector(screen_id,control_id,msg->param[0]);               
  155.                     break;                                                              
  156.                 case kCtrlRTC:                                                       //倒計時控件
  157.                
  158.                    NotifyTimer(screen_id,control_id);
  159.                     break;
  160.                 default:
  161.                     break;
  162.                 }
  163.             }
  164.             break;  
  165.         }
  166.     default:
  167.         break;
  168.     }
  169. }

  170. /*!
  171. *  \brief  畫面切換通知
  172. *  \details  當前畫面改變時(或調用GetScreen),執行此函數
  173. *  \param screen_id 當前畫面ID
  174. */
  175. void NotifyScreen(uint16 screen_id)
  176. {
  177.     //TODO: 添加用戶代碼
  178.                                                       //在工程配置中開啟畫面切換通知,記錄當前畫面ID
  179.    
  180.     //進到二維碼頁面生成二維碼
  181.    
  182. }

  183. /*!
  184. *  \brief  觸摸坐標事件響應
  185. *  \param press 1按下觸摸屏,3松開觸摸屏
  186. *  \param x x坐標
  187. *  \param y y坐標
  188. */
  189. void NotifyTouchXY(uint8 press,uint16 x,uint16 y)
  190. {

  191. }
  192. /*!
  193. *  \brief  更新數據
  194. */
  195. void UpdateUI()
  196. {
  197.    

  198.                                  
  199. }


  200. /*!
  201. *  \brief  按鈕控件通知
  202. *  \details  當按鈕狀態改變(或調用GetControlValue)時,執行此函數
  203. *  \param screen_id 畫面ID
  204. *  \param control_id 控件ID
  205. *  \param state 按鈕狀態:0彈起,1按下
  206. */
  207. void NotifyButton(uint16 screen_id, uint16 control_id, uint8  state)
  208. {
  209.   
  210.     if(screen_id == 0)
  211.     {
  212.         if(control_id==32)
  213.         {
  214.           GetControlValue(0,26);
  215.          
  216.         }
  217.         if(control_id==33)
  218.         {
  219.           GetControlValue(0,10);
  220.         }
  221.         if(control_id==34)
  222.         {
  223.           GetControlValue(0,22);
  224.         }
  225.         if(control_id==37)
  226.         {
  227.           GetControlValue(0,25);
  228.         }
  229.         if(control_id==35)
  230.         {
  231.           SetScreen(screenid);
  232.           screenid -= 1;
  233.         }
  234.         if(control_id==36)
  235.         {
  236.           SetScreen(screenid);
  237.           screenid += 1;
  238.         }
  239.     }
  240. }

  241. /*!
  242. *  \brief  文本控件通知
  243. *  \details  當文本通過鍵盤更新(或調用GetControlValue)時,執行此函數
  244. *  \param screen_id 畫面ID
  245. *  \param control_id 控件ID
  246. *  \param str 文本控件內容
  247. */
  248. void NotifyText(uint16 screen_id, uint16 control_id, uint8 *str)
  249. {        
  250.     int32 value=0;
  251.     int32 zalue;
  252.     sscanf(str,"%ld",&value);                                                        //把字符串轉換為整數
  253.     UnlockDeviceConfig();  
  254.   if(screen_id==0)                                                                 //畫面ID2:文本設置和顯示
  255.     {                                                                                                                              
  256.         if(control_id==26)                                                            //最高電壓
  257.         {                                                                        
  258.             //限定數值范圍(也可以在文本控件屬性中設置)                             
  259.             switch(value)
  260.             {
  261.               case 2400:
  262.                 zalue=1;
  263.                 SetCommBps(zalue);
  264.                 UartInit(2400);
  265.                 SetTextInt32(0,41,zalue,0,1);
  266.               break;
  267.               case 4800:
  268.                 zalue=2;
  269.               SetCommBps(zalue);
  270.               UartInit(4800);
  271.               SetTextInt32(0,41,zalue,0,1);
  272.               break;
  273.               case 9600:
  274.                 zalue=3;
  275.               SetCommBps(zalue);
  276.               UartInit(9600);
  277.               SetTextInt32(0,41,zalue,0,1);
  278.               break;
  279.               case 19200:
  280.                 zalue=4;
  281.               SetCommBps(zalue);
  282.               UartInit(19200);
  283.               SetTextInt32(0,41,zalue,0,1);
  284.               break;
  285.               case 38400:
  286.                 zalue=5;
  287.               SetCommBps(zalue);
  288.               UartInit(38400);
  289.               SetTextInt32(0,41,zalue,0,1);
  290.               break;
  291.               case 57600:
  292.                 zalue=6;
  293.               SetCommBps(zalue);
  294.               UartInit(57600);
  295.               SetTextInt32(0,41,zalue,0,1);
  296.               break;
  297.               case 115200:
  298.                 zalue=7;
  299.               SetCommBps(zalue);
  300.               UartInit(115200);
  301.               SetTextInt32(0,41,zalue,0,1);
  302.               break;
  303.             }
  304.         }         
  305.     }
  306.     LockDeviceConfig();
  307. }                                                                                

  308. /*!                                                                              
  309. *  \brief  進度條控件通知                                                      
  310. *  \details  調用GetControlValue時,執行此函數                                 
  311. *  \param screen_id 畫面ID                                                      
  312. *  \param control_id 控件ID                                                     
  313. *  \param value 值                                                              
  314. */                                                                              
  315. void NotifyProgress(uint16 screen_id, uint16 control_id, uint32 value)           
  316. {  
  317.    
  318. }                                                                                

  319. /*!                                                                              
  320. *  \brief  滑動條控件通知                                                      
  321. *  \details  當滑動條改變(或調用GetControlValue)時,執行此函數                  
  322. *  \param screen_id 畫面ID                                                      
  323. *  \param control_id 控件ID                                                     
  324. *  \param value 值                                                              
  325. */                                                                              
  326. void NotifySlider(uint16 screen_id, uint16 control_id, uint32 value)            
  327. {                                                              
  328.    
  329. }

  330. /*!
  331. *  \brief  儀表控件通知
  332. *  \details  調用GetControlValue時,執行此函數
  333. *  \param screen_id 畫面ID
  334. *  \param control_id 控件ID
  335. *  \param value 值
  336. */
  337. void NotifyMeter(uint16 screen_id, uint16 control_id, uint32 value)
  338. {
  339.     //TODO: 添加用戶代碼
  340. }

  341. /*!
  342. *  \brief  菜單控件通知
  343. *  \details  當菜單項按下或松開時,執行此函數
  344. *  \param screen_id 畫面ID
  345. *  \param control_id 控件ID
  346. *  \param item 菜單項索引
  347. *  \param state 按鈕狀態:0松開,1按下
  348. */
  349. void NotifyMenu(uint16 screen_id, uint16 control_id, uint8 item, uint8 state)
  350. {
  351.     //TODO: 添加用戶代碼
  352. }

  353. /*!
  354. *  \brief  選擇控件通知
  355. *  \details  當選擇控件變化時,執行此函數
  356. *  \param screen_id 畫面ID
  357. *  \param control_id 控件ID
  358. *  \param item 當前選項
  359. */
  360. void NotifySelector(uint16 screen_id, uint16 control_id, uint8  item)
  361. {
  362.    
  363. }

  364. /*!
  365. *  \brief  定時器超時通知處理
  366. *  \param screen_id 畫面ID
  367. *  \param control_id 控件ID
  368. */
  369. void NotifyTimer(uint16 screen_id, uint16 control_id)
  370. {
  371.     //TODO: 添加用戶代碼
  372. }

  373. /*!
  374. *  \brief  讀取用戶FLASH狀態返回
  375. *  \param status 0失敗,1成功
  376. *  \param _data 返回數據
  377. *  \param length 數據長度
  378. */
  379. void NotifyReadFlash(uint8 status,uint8 *_data,uint16 length)
  380. {
  381.     //TODO: 添加用戶代碼
  382. }

  383. /*!
  384. *  \brief  寫用戶FLASH狀態返回
  385. *  \param status 0失敗,1成功
  386. */
  387. void NotifyWriteFlash(uint8 status)
  388. {
  389.     //TODO: 添加用戶代碼
  390. }

  391. /*!
  392. *  \brief  讀取RTC時間,注意返回的是BCD碼
  393. *  \param year 年(BCD)
  394. *  \param month 月(BCD)
  395. *  \param week 星期(BCD)
  396. *  \param day 日(BCD)
  397. *  \param hour 時(BCD)
  398. *  \param minute 分(BCD)
  399. *  \param second 秒(BCD)
  400. */
  401. void NotifyReadRTC(uint8 year,uint8 month,uint8 week,uint8 day,uint8 hour,uint8 minute,uint8 second)
  402. {
  403.     //sec =(0xff & (second>>4))*10 +(0xf & second);                                    //BCD碼轉十進制
  404. }


復制代碼

所有資料51hei提供下載:
液晶屏測試工裝程序.rar (379.37 KB, 下載次數: 76)




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

使用道具 舉報

沙發
ID:549825 發表于 2019-5-29 02:16 | 只看該作者
謝謝分享!
回復

使用道具 舉報

板凳
ID:747344 發表于 2020-6-13 02:27 | 只看該作者
很棒 需要好好研究下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎免费视频 | 亚洲欧美日韩精品久久亚洲区 | 午夜精品一区二区三区在线 | 亚洲九九色 | 亚洲国产精品99久久久久久久久 | 中文字幕在线观 | 久久综合狠狠综合久久综合88 | 亚洲成人观看 | 日本一二三区在线观看 | 黄色大片免费网站 | 中文字幕在线一区二区三区 | 国产一区二区在线免费观看 | 色久影院 | 日韩美女在线看免费观看 | 在线91| 久久亚洲国产精品日日av夜夜 | 99re在线| 国产99久久精品一区二区300 | 九久久| 超碰精品在线 | 欧美一区 | 久久小视频 | 97av视频在线| 久久成人国产 | 国产一级片一区二区 | 天天干.com | 成人在线小视频 | 国产一级久久久久 | 91精品福利 | 国产精品五区 | 男人的天堂视频网站 | 欧美国产一区二区 | 国产成人精品一区二区 | 激情免费视频 | 精品无码久久久久久久动漫 | 99在线视频观看 | 中文字幕日韩一区 | 91综合在线视频 | 精品一区二区在线观看 | 欧美日韩看片 | 国产亚洲精品成人av久久ww |