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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12968|回復: 5
收起左側

基于STM32的智能小車源碼

[復制鏈接]
ID:292155 發表于 2018-3-15 10:11 | 顯示全部樓層 |閱讀模式
基于stm32 的智能小車


單片機源程序如下:
  1. #include <stm32f10x_lib.h>
  2. #include "sys.h"
  3. #include "usart.h"               
  4. #include "delay.h"       
  5. #include "led.h"
  6. #include "key.h"
  7. #include "exti.h"
  8. #include "wdg.h"
  9. #include "timer.h"
  10. #include "lcd.h"          
  11. #include "usmart.h"
  12. //===
  13. #include "adc.h"
  14. #include "dma.h"
  15. #include "24cxx.h"
  16. #include "flash.h"
  17. #include "touch.h"        
  18. ////////////////////////////////////////////////////////////////////////////////////
  19. #include "Imageprocess.h"//圖像處理
  20. #include "car_crtl.h"//車子的控制
  21. //全局變量
  22. #include "world.h"



  23.    
  24. //全局變量
  25. int pinbi;
  26. int data00;                     //速度
  27. char jz_flag;
  28. char flag_show;                  // 一場數據接收完標志
  29. unsigned int ang;               //轉角
  30. int m;                          // 記錄行中斷次數
  31. int hang;                       // 存數組行標
  32. //==== 全局數組定義 ==========================
  33. int before[IMAGE_ROW];          // 上一場數據緩存數組
  34. signed int Line_center[IMAGE_ROW+1];     // 記錄黑線中心數組
  35. //unsigned char uca_Buffer1[IMAGE_ROW][IMAGE_COLUMN];       // 數據數組//90,136
  36. unsigned char uca_pic[IMAGE_ROW*IMAGE_COLUMN];       // 數據數組//90,136
  37. unsigned char *p_addr_Buffer1[IMAGE_ROW];                 // 等同于數據數組
  38. unsigned char *p_pic;                 // 等同于數據數組
  39. char chang_flag,lcd_flag;
  40. int speed_0,speed_now;
  41. int pwmval,duoval;


  42. void show_set(void)
  43. {
  44.   LCD_ShowString(272,16*2,"-    +");
  45.     LCD_ShowNum(280,16*2,pwmval,4,16);//顯示速度
  46.   LCD_ShowString(272,16*3,"-    +");
  47.     LCD_ShowNum(280,16*3,pwmval*2,4,16);
  48.   LCD_ShowString(272,16*4,"-    +");
  49.     LCD_ShowNum(280,16*4,pwmval*3,4,16);
  50.   LCD_ShowString(272,16*5,"-    +");
  51.     LCD_ShowNum(280,16*5,pwmval*4,4,16);
  52.   LCD_ShowString(272,16*6,"-    +");
  53.     LCD_ShowNum(280,16*6,pwmval*5,4,16);
  54.   LCD_ShowString(272,16*7,"-    +");
  55.     LCD_ShowNum(280,16*7,pwmval*6,4,16);
  56. }


  57. void Load_Drow_Dialog(void)
  58. {
  59.         LCD_Clear(WHITE);//清屏   
  60.         POINT_COLOR=BLUE;//設置字體為藍色
  61.         LCD_ShowString(296,0,"RST");//顯示清屏區域
  62.         LCD_ShowString(296,16,"SET");//顯示清屏區域
  63.   
  64.                 //畫矩形
  65.                 POINT_COLOR=RED;
  66.         LCD_DrawRectangle(64-1, 32-1, IMAGE_COLUMN+64, 32+IMAGE_ROW);
  67. show_set();
  68.   


  69. }
  70. //==============================================
  71. void GAY03_init()
  72. {
  73.         Stm32_Clock_Init(12);//系統時鐘設置
  74.         delay_init(96);                 //延時初始化
  75.         uart_init(96,38400); //串口1初始化  
  76.         LED_Init();                 //燈的初始化
  77.         LCD_Init();                 //彩色屏幕初始化
  78.         usmart_dev.init(96); //初始化USMART//本來是100ms中斷掃描       
  79. EXTIX_Init();        //行場中斷初始化        
  80.     //KEY_Init();                //PA0設置成輸入,采集二值化數據 (上一句已經搞定)
  81.         //Timerx_Init(5000,9599); //Timerx_Init(5000,7199);//10Khz 的計數頻率,計數到 5000 為500ms
  82.     //PWM_Init(900,0);  //不分頻。PWM 頻率=72000/900=8Khz
  83. //====電機
  84. PWM11_Init(1000,31); //PA8 95---1K
  85. //====舵機 //60HZ
  86. PWM22_Init(16666,95); //PWM_Init(900,0);  //不分頻。PWM 頻率=72000/900=8Khz
  87.   DIAN_VAL=0; //0---1000
  88.   DUO_VAL=straight;//1500---1.5ms        //
  89.   pwmval=0;
  90.   duoval=straight;




  91. }
  92. //串口,狀態設置函數
  93. void sset(u16 a,u16 b)
  94. {
  95.      if(a==0)
  96.         pwmval=b;        //更改電機速度
  97. else if(a==1)
  98.     duoval=b;   //更改舵機角度
  99. else if(a==2)
  100.     lcd_flag=b;        //車載視頻
  101. else if(a==3)
  102.     pwmval=b;        //
  103. else if(a==4)
  104.     pwmval=b;        //
  105. else if(a==5)
  106.     pwmval=b;        //
  107. else if(a==6)
  108.     pwmval=b;        //
  109. else if(a==99)
  110.               {
  111.                          jz_flag=1;
  112.              }
  113. }
  114. //函數參數調用測試函數
  115. void test_fun(void(*ledset)(u8),u8 sta)
  116. {
  117.         ledset(sta);
  118. }  

  119. //Mini STM32開發板擴展實驗9
  120. //USMART應用 實驗
  121. //正點原子@ALIENTEK
  122. //技術論壇:www.openedv.com               
  123. int main(void)
  124. {                          
  125.    
  126. signed int i;
  127. char lost_h;
  128. //unsigned int j;
  129. //unsigned int speed[8];
  130. //unsigned int j;
  131. //u16 led0pwmval=0;
  132. // u8 dir=1;
  133. //u8 dir=1;
  134.          
  135. //=====================================================================//
  136. GAY03_init();          //超頻到96M,串口工作在38400波特率,初始化了LED和液晶       

  137. chang_disable();
  138. hang_disable();

  139. for(i = 0 ; i < IMAGE_ROW ; i++)                   // 圖像采集數組賦地址
  140.         p_addr_Buffer1[i] = &uca_pic[i*IMAGE_COLUMN];
  141.       //p_addr_Buffer1[0]=&uca_Buffer1[i][0];
  142. //p_pic=uca_Buffer1;//取圖像首地址!!!!

  143. flag_show=0;                        
  144. //===============================================================================//
  145. //                            初始化結束開始辦正事                              
  146. //===============================================================================//       
  147.         POINT_COLOR=RED;               
  148.                 LED0=!LED0;                                         
  149.                 //delay_ms(500);
  150.                 //開機畫面
  151.                 /*for(i=68;i>0;i=i-10)
  152.                 {
  153.                 //LCD_Clear(WHITE);
  154.                 LCD_Init();
  155.                 LCD_chinese(20,i,0);        LCD_chinese(120,i,1);        LCD_chinese(220,i,2);       
  156.                 LCD_chinese(20,i+100,3);        LCD_chinese(120,i+100,4);        LCD_chinese(220,i+100,5);
  157.                 delay_ms(80);       
  158.                 }
  159.                 */
  160.                 POINT_COLOR=BLUE;
  161.                 LCD_ShowString(140,200,"Designed By E=mc^2.0");
  162.                 //畫矩形
  163.                 POINT_COLOR=RED;
  164.         LCD_DrawRectangle(64-1, 32-1, IMAGE_COLUMN+64, 32+IMAGE_ROW);
  165.                 //delay_ms(800);            
  166.          
  167. //===============================================================================//
  168. //                          辦正事                              
  169. //===============================================================================//       
  170.         //Timerx_Init(5000,7199);//10Khz的計數頻率,計數到5000為500ms  
  171.         //PWM_Input_Init(50000,96);       
  172.          //PWM0_INPUT_INIT(50000,960);         //測量頻率越高,pcs要越小;測量頻率越小,psc要越大,這樣,精度才能跟上去
  173. //        void PWM0_INPUT_INIT(u16 arr,u16 psc)
  174. //       
  175.         chang_enable();
  176.     //hang_disable();
  177. //=============默認打開車載視頻!!!==============
  178.         lcd_flag=1;
  179. //================默認速度=======================
  180.         pwmval=330;

  181.          //初始化觸摸屏
  182.         POINT_COLOR=RED;//設置字體為藍色          
  183.        
  184.         Touch_Init();
  185.        
  186.         Load_Drow_Dialog();
  187.         JTAG_Set(JTAG_SWD_DISABLE);       

  188.         while(1)
  189.         {                                  
  190. //如果速度發生了變化!!
  191. //LCD_ShowNum(156,130,TIM3->CCR1,5,16);//顯示頻率
  192. //LCD_ShowNum(156,150,TIM3->CCR2,5,16);//顯示占空比
  193.         /*if(speed[4]!=)
  194.             {
  195.                 j=speed[0];                       
  196.                 speed[0]= speed[1];
  197.                 speed[1]= speed[2];
  198.                 speed[2]= speed[3];
  199.                 speed[3]= speed[4];
  200.                 speed[4]= speed[5];
  201.                 speed[5]= speed[6];
  202.                 speed[6]= speed[7];
  203.                 speed[7]= TIM3->CCR1;
  204.                 if(j<speed[1])
  205.                   j=speed[1];
  206.                 if(j<speed[2])
  207.                   j=speed[2];
  208.                 if(j<speed[3])
  209.                   j=speed[3];
  210.                 if(j<speed[4])
  211.                   j=speed[4];
  212.                 if(j<speed[5])
  213.                   j=speed[5];
  214.                 if(j<speed[6])
  215.                   j=speed[6];
  216.                 if(j<speed[7])
  217.                   j=speed[7];        
  218.                 }  */      
  219.   // delay_ms(10);
  220.    //if(dir)pwmval+=10;
  221.   // else pwmval-=10;

  222.   // if(pwmval>1000)dir=0;
  223.    //if(pwmval==0)dir=1;              
  224.   //DIAN_VAL=pwmval; //0---1000
  225.   //DUO_VAL=duoval;//1500---1.5ms        //
  226. //==========這個其實應該每隔一段時間執行一次1ms-2ms=========
  227.           dianji();  
  228. //===========是否一場數據???===========//  
  229.           if(flag_show == 1)                                                                      
  230.                 {
  231.                 flag_show = 0;                                                                   
  232.                 //LCD_ShowNum(156,128,speed_now,5,16);//顯示車速                               
  233.                 LED1=!LED1;         //注意這個綠色燈的的頻率//控制頻率                  
  234.                                                                                 // 標志清零,等待下一場數據
  235.                 //uart(3);//把圖像通過串口發回來
  236.                 lost_h = Imageprocess();//圖像處理函數
  237.                 duoji(lost_h);
  238.        
  239.             //chang_enable();
  240.                 //===============打開接收==============//
  241.                 chang_flag=1;            
  242.                 //====================車載視頻相關======================//
  243.                 if(lcd_flag==1)
  244.                         {
  245.                         LCD_pic();
  246.                         }
  247.                 }
  248.         //===================觸摸屏被按下==================//         
  249.         if(Pen_Point.Key_Sta==Key_Down)
  250.                 {
  251.                         Pen_Int_Set(0);//關閉中斷
  252.                         do
  253.                         {
  254.                                 Convert_Pos();
  255.                                 Pen_Point.Key_Sta=Key_Up;
  256.                                 //判斷觸摸屏位置
  257.                                 if(Pen_Point.X0>296&&Pen_Point.Y0<16)
  258.                                 {
  259.                                 Load_Drow_Dialog();//清除
  260.                                 LCD_LED=1;// 背光
  261.                                 lcd_flag=1;// 車載視頻
  262.                                 }
  263.                                 //===
  264.                                 else if(Pen_Point.X0>296&&Pen_Point.Y0<32&&Pen_Point.Y0>16)
  265.                                 {
  266.                                 Load_Drow_Dialog();//清除
  267.                                 LCD_LED=0;//關閉背光
  268.                                 lcd_flag=0;//關閉車載視頻
  269.                                 }
  270.                                 else if(Pen_Point.X0>270&&Pen_Point.X0<282&&Pen_Point.Y0>16*2&&Pen_Point.Y0<16*3)
  271.                                 {
  272.                                 pwmval++;  //==1
  273.                                  show_set();
  274.                                 }
  275.                                         else if(Pen_Point.X0>308&&Pen_Point.Y0>16*3&&Pen_Point.Y0<16*4)
  276.                                 {
  277.                                 pwmval--;  //==2
  278.                                  show_set();
  279.                                 }
  280.                                 /*        else if(Pen_Point.X0>270&&Pen_Point.X0<282&&Pen_Point.Y0>16*2&&Pen_Point.Y0<16*3)
  281.                                 {
  282.                                 pwmval++;        //==3
  283.                                  show_set();
  284.                                 }
  285.                                         else if(Pen_Point.X0>270&&Pen_Point.X0<282&&Pen_Point.Y0>16*2&&Pen_Point.Y0<16*3)
  286.                                 {
  287.                                 pwmval++;        //==4
  288.                                  show_set();
  289.                                 }
  290.                                         else if(Pen_Point.X0>270&&Pen_Point.X0<282&&Pen_Point.Y0>16*2&&Pen_Point.Y0<16*3)
  291.                                 {
  292.                                 pwmval++;  //==5
  293.                                  show_set();
  294.                                 }
  295.                                         else if(Pen_Point.X0>270&&Pen_Point.X0<282&&Pen_Point.Y0>16*2&&Pen_Point.Y0<16*3)
  296.                                 {
  297.                                 pwmval++;  //==6
  298.                                  show_set();
  299.                                 }*/
  300.                                 else
  301.                                 {
  302.                                         //Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0);//畫圖            
  303.                                          LCD_DrawPoint(Pen_Point.X0,Pen_Point.Y0);
  304.                                         GPIOC->ODR|=1<<1;    //PC1 上拉          
  305.                                 }
  306.                         }while(PEN==0);//如果PEN一直有效,則一直執行
  307.                         Pen_Int_Set(1);//開啟中斷
  308.                 }
  309.         //else delay_ms(10);
  310.                 if(jz_flag==1)//則執行校準程序
  311.                 {
  312.                     jz_flag=0;
  313.                         LCD_Clear(WHITE);//清屏
  314.                     Touch_Adjust();  //屏幕校準
  315.                         Save_Adjdata();         
  316.                         Load_Drow_Dialog();
  317.                 }
  318.        
  319.          
  320.         }                                                                                            
  321. }

復制代碼

所有資料51hei提供下載:
GAY03_V1.0.zip (257.26 KB, 下載次數: 124)


回復

使用道具 舉報

ID:330544 發表于 2018-7-13 13:31 | 顯示全部樓層
全智能的還是遙控的呀
回復

使用道具 舉報

ID:502693 發表于 2019-4-1 19:37 | 顯示全部樓層
厲害了
回復

使用道具 舉報

ID:484435 發表于 2019-8-4 15:54 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:496635 發表于 2020-5-17 12:25 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 最近中文字幕免费 | 亚洲国产第一页 | 国产精品久久久久久久7777 | 精品久久久久久红码专区 | 视频在线一区 | 亚洲精品1区 | 亚洲精品第一页 | 国产成人在线免费 | 成人午夜性成交 | 国产成人精品免费视频 | 国产精品日日夜夜 | 欧美日韩成人在线 | 毛片网站在线观看视频 | 亚洲精品国产成人 | 欧美一级在线视频 | 亚洲精品欧美 | 亚洲国产精品一区在线观看 | 日本国产一区二区 | 综合另类 | 精品国产一区二区三区久久久久久 | 成人乱人乱一区二区三区软件 | 欧美精品片 | 亚洲狠狠丁香婷婷综合久久久 | 精品毛片| 日韩精品一区二区不卡 | 精品国产一区二区三区免费 | 国产精品成人一区二区三区 | 成人福利在线 | 羞羞的视频免费观看 | 国产精品久久久精品 | 精品在线观看入口 | 国产成人精品一区二区三区在线观看 | 福利视频三区 | 国产精品视频网址 | 91视频官网| 欧美久久免费观看 | 精品视频一区二区三区在线观看 | 日韩精品免费在线 | 久久国产精品一区二区 | 国产日韩一区 | 日韩精品在线播放 |