找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 527|回复: 3
打印 上一主题 下一主题
收起左侧

有错误 基于STM32F103单片机的三相电机控制程序,霍尔传感器版本

[复制链接]
跳转到指定楼层
楼主
ID:640768 发表于 2023-11-21 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. #include "main.h"

  2. /*********全局变量***********/
  3. u8 Ref_Lcd_flag=0;
  4. u8 state=0;                  // 运行主状态
  5. u32 feedback_value=0;                   //速度反馈值
  6. u32 TIMER=0;
  7. u8 frequent_1=0;  //踏频速率
  8. vu16 I_Thrut[4];  //供电电压和三相电流   // I_Thrut[3]为电压
  9. u8 Run_Pause=0;

  10. u8 Speed_aver=0;
  11. u16 Frequent_aver=0;
  12. u16 Mileage_e0;

  13. u8 Frame_flag=0;
  14. u8 Start_flag=0;
  15. u8 Cart_flag=0;

  16. u8 ERROR_flag=0;   //错误类型标志位

  17. Pid_struct Main_pid;

  18. u8 Assist;       //档位
  19. u8 Mileage;
  20. u8 datatemp[2];
  21. u8 Flash_Buff[2];

  22. u8 V_BUS_Flag;
  23. u8 begin;
  24. u8 Key=0;        
  25. u32 Mileage_Single=0;
  26. u8 d=0;
  27. extern u16 Exti_speed_1;
  28. extern u32 frequent_sum;
  29. int main(void)
  30. {
  31.   /***********IO时钟初始化*********************/
  32.     Rcc_init();
  33.   /********中断优先级设置********/
  34.     STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,2);
  35.     Mileage=datatemp[1];
  36.   //  Assist=datatemp[0];  
  37.     Assist=0;     
  38.     Mileage_e0=Mileage;
  39.     NVIC_Config();
  40.    
  41.   /**********屏幕初始化*****************/  
  42.     delay_init();
  43.     SPI1_Init();        //SPI1初始化
  44.           LCD_Init();        
  45.     POINT_COLOR=RED ;//设置字体为红色   
  46.     LCD_ShowString(80,160,200,16,24,"WELCOME");  //写电量位置               
  47.     FRAME_INIT();
  48.    
  49.   /********BLDC设置初始化**********/
  50.      BLDC_GPIOConfig();
  51.      BLDC_TIM1Config();
  52.      BLDC_TIM3Config();
  53.      IR2136_EN_SET;   // 使能 PB12  输出使能
  54.    
  55.   /********串口/AD/定时器/外部中断初始化*************************/   
  56.            USART1_GPIOConfig();
  57.      USART1_Config();
  58.      KEY_Init();  
  59.      
  60.     Adc_Init();
  61.     DMA_Configuration();
  62.    
  63.     TIM4_Init(9999,71);     //  10ms 编码器计时
  64.     TIM2_Init(4999,7199);   // 0.5s 定时中断  采样
  65.    
  66.     EXTI1_Init();      // Pb9  踏频中断   J6
  67.     EXTI0_Init();     // Pb0  霍尔测速中断  
  68.     EXTI10_Init();         //PC10       刹车中断   J4
  69.                
  70.     Speed_PIDInit(&Main_pid);    //PID初始化  为起步设置一个固定速度
  71.                
  72.     state=STOP;   
  73.     delay_ms(1000);
  74.    
  75. while(1){
  76.             
  77.      USART_Reci();   
  78.      KEY_Scan();  
  79.   
  80.     if( Assist==0){     // 纯人力模式  电机不运行
  81.         state=MANPOWER;   
  82.     }

  83.     switch(state)
  84.     {
  85.         case MANPOWER:   // 纯人力模式
  86.               BLDC_Stop();  // 关闭电机防止误操作
  87.               while(1){
  88.                  KEY_Scan();         //按键跳出此模式
  89.               if(state==CART){     //不影响其它传感器中断运行  仪表正常工作
  90.                     state=CART;     
  91.                     break;     // 跳出此循环                    
  92.                }  
  93.                 if(Assist!=0){     //不影响其它传感器中断运行  仪表正常工作
  94.                     state=START;     
  95.                     break;     // 跳出此循环                    
  96.                  }
  97.                  Ref_LCD();
  98.               }
  99.               
  100.         case CART:   // 一键推车模式  
  101.                               
  102.             while(state==CART){        
  103.               
  104.                    TIM1->CCR1=450;
  105.                    TIM1->CCR2=450;
  106.                    TIM1->CCR3=450;
  107.                    BLDC_Start1();
  108.                    USART_Reci();   
  109.               
  110.                 KEY_Scan();      //KEY修改标志位
  111.                 Ref_LCD();         
  112.                 if(state!=CART){
  113.                     d=0;
  114.                 state=START;                    
  115.                 BLDC_Stop();
  116.                 break;   
  117.               }
  118.             }
  119.                   
  120.         case START:    //起步 执行启动程序  并转换到正常运行状态   
  121.         //     Run_Pause=1;
  122.         if(frequent_1!=0){
  123.           //    Run_Pause=0;
  124.               Start_flag=1;
  125.               Speed_PIDInit(&Main_pid);
  126.               BLDC_Start1();            
  127.               state=RUN;  
  128.           }   
  129.             break;
  130.         
  131.         case RUN:    // 助力状态  逻辑检测电流/传感器参数           
  132.              Adjust_Speed();   
  133.              break;
  134.                
  135.         case STOP:
  136.             BLDC_Stop();
  137.             break;
  138.         
  139.         case FAULT:                 
  140.            while(1){
  141.               char f1[5];
  142.               sprintf(f1,"%d",ERROR_flag);
  143.               LCD_Clear(WHITE);
  144.               BLDC_Stop();   // 错误信息产生  关闭电机  防止误操作
  145.               POINT_COLOR=RED ;//设置字体为红色   
  146.               LCD_ShowString(80,160,200,16,24,"ERROR");  //写电量位置           
  147.               LCD_ShowString(160,160,200,16,24,f1);  //写电量位置  
  148.               Key=KEY_Scan1(0);                //得到键值
  149.               if(Key==KEY0_l)
  150.               {
  151.                   NVIC_SystemReset();
  152.               }
  153.            }
  154.             break;              
  155.     }  
  156.    Ref_LCD();     
  157. }
  158. }


  159. void Adjust_Speed(void)
  160. {    u8 sw=0;
  161.    if(frequent_1==0){
  162.        state=START;
  163.        BLDC_Stop();
  164.     }
  165.     else if(frequent_1<=1){
  166.       Speed_PIDAdjust(&Main_pid,2000+Assist*1000);
  167.     }
  168.     else if(frequent_1<=3){
  169.       Speed_PIDAdjust(&Main_pid,2500+Assist*1000);
  170.      }
  171.     else if(frequent_1<=5){
  172.       Speed_PIDAdjust(&Main_pid,3500+Assist*1000);
  173.      }
  174.     else if(frequent_1<=7){
  175.       Speed_PIDAdjust(&Main_pid,4500+Assist*1000);
  176.      }

  177.     if((float)(720*1.0/Exti_speed_1)>25){
  178.       BLDC_Stop();
  179.       sw=1;
  180.     }
  181.     if(sw==1&&(float)(720*1.0/Exti_speed_1)<20){
  182.       BLDC_Start1();
  183.       sw=0;
  184.     }  
  185. }
  186.   
  187. void KEY_Scan(void)
  188. {
  189.       Key=KEY_Scan1(0);                //得到键值
  190.                 switch(Key)
  191.                 {                                 
  192.            case KEY0_s:      
  193.          if(Frame_flag==0){   //Frame_flag=0 正常显示界面
  194.             FRAME_INIT1();
  195.             Mileage_Single=Mileage_e0-Mileage;
  196.             Speed_aver=(float)((Mileage_Single*1.0/(TIMER*1.0))*6); //单位转换
  197.             Frame_flag=1;         
  198.             Frequent_aver=frequent_sum/TIMER;
  199.             mes_show1((float)Mileage_e0*0.1,(float)Mileage_Single*0.1,TIMER,(float)Speed_aver,frequent_sum/8,Frequent_aver/8);                        
  200.           }
  201.          else{   //Frame_flag=0 第二页面
  202.               BLDC_Stop();
  203.               Flash_Buff[0]=Assist;
  204.               Flash_Buff[1]=Mileage;   
  205.               STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)Flash_Buff,2);
  206.               POINT_COLOR=RED ;
  207.               LCD_Clear(WHITE);   
  208.               LCD_ShowString(40,160,200,16,24,"WRITE SUCCESS");  //写电量位置
  209.             
  210.             FRAME_INIT();
  211.             Frame_flag=0;
  212.           }     
  213.                              break;
  214.          
  215.             case KEY0_l:
  216.                 NVIC_SystemReset();     
  217.                                 break;
  218.             
  219.         case KEY1_s:           //下键
  220.                 if(Assist!=0){
  221.                       Assist--;
  222.                    if(Assist<1){
  223.                            Assist=0;
  224.                       }   
  225.                   }
  226.                                 break;            
  227.         case KEY1_l:
  228.                Assist=0;
  229.         
  230. //               BLDC_Stop();
  231. //               Flash_Buff[0]=Assist;
  232. //               Flash_Buff[1]=Mileage;   
  233. //               STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)Flash_Buff,2);
  234. //               POINT_COLOR=RED ;
  235. //               LCD_Clear(WHITE);   
  236. //               LCD_ShowString(40,160,200,16,24,"WRITE SUCCESS");  //写电量位置
  237. //               delay_ms(1000);
  238. //               LCD_Clear(WHITE);
  239. //               FRAME_INIT();
  240.                            break;
  241.             
  242.                case KEY2_s:   // 上键
  243.              if(state==CART){
  244.                 BLDC_Stop();
  245.                 state=START;
  246.               }
  247.               Assist++;
  248.               if(Assist>4){
  249.               Assist=5;
  250.                    }            
  251.                  break;
  252.                   
  253.                 case KEY2_l:     //长按上键  进入推车模式
  254.                  state=CART;         
  255.                 break;
  256.             
  257.                         default:  break;
  258.                 }
  259. }
  260.    
  261. /*****************简陋版,需要配套写解析函数*********************/
  262. void USART_Reci(void)
  263. {
  264.      if(USART1_RX_STA)                        //接收到一次数据了
  265.    {
  266.       if(USART1_RX_BUF[0]=='s')
  267.         {  
  268.         Mileage_Single=Mileage-Mileage_e0;
  269.         Speed_aver=(float)(Mileage_Single/TIMER)*6; //单位转换
  270.         Frequent_aver=frequent_sum/TIMER;
  271.         uprintf(USART1,"s%.1fs\n",Speed_aver);      
  272.         }        
  273.       else if(USART1_RX_BUF[0]=='m')
  274.         {  
  275.         //  uprintf(USART1,"me%.1fme\n",Mileage_Single*0.1);  
  276.         uprintf(USART1,"m%.1fm\n",Mileage*0.1);                                       
  277.         }        
  278.       else if(USART1_RX_BUF[0]=='f')
  279.         {  
  280.         uprintf(USART1,"f%d\nf",frequent_sum/8);
  281.       //  uprintf(USART1,"f1%d\nf1",Frequent_aver/8);                                      
  282.         }        
  283.         else if(USART1_RX_BUF[0]=='a')
  284.         {  
  285.        Assist++;
  286.       //  uprintf(USART1,"f1%d\nf1",Frequent_aver/8);                                      
  287.         } else if(USART1_RX_BUF[0]=='b')
  288.         {  
  289.        Assist--;
  290.         uprintf(USART1,"f1%d\n",state);                                      
  291.         }
  292.         
  293.         
  294.       USART1_RX_STA=0;        
  295.    }        
  296. }        


  297. /***********************************************
  298. /////中断优先级     刹车EXTI5-9  00    接受串口  04    霍尔 02    踏频 03
  299. ***********************************************/
  300. void NVIC_Config(void)
  301. {
  302.          NVIC_InitTypeDef NVIC_InitStructure;                                          //复位NVIC寄存器为默认值        
  303.      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);           //设置中断优先级组

  304.      NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;                        
  305.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;          // 刹车
  306.            NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                                       
  307.            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
  308.      NVIC_Init(&NVIC_InitStructure);
  309.         
  310.       NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                   //霍尔中断
  311.       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
  312.       NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
  313.       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  314.       NVIC_Init(&NVIC_InitStructure);
  315.         
  316.      NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;   // 10ms 中断
  317.          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
  318.          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;               
  319.          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        
  320.          NVIC_Init(&NVIC_InitStructure);        
  321.       
  322. //     NVIC_InitStructure.NVIC_IRQChannel =  ADC1_2_IRQn;
  323. //         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3
  324. //         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                //子优先级3
  325. //         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  326. //         NVIC_Init(&NVIC_InitStructure);        //根据指定的参数初始化VIC寄存器

  327.      NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;                         // 踏频中断
  328.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;         
  329.            NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                                       
  330.            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
  331.      NVIC_Init(&NVIC_InitStructure);   
  332.       
  333.      NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                        // 霍尔测速中断
  334.      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;         
  335.            NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;                                       
  336.            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
  337.      NVIC_Init(&NVIC_InitStructure);
  338.          
  339.       NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  340.       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
  341.       NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;
  342.       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  343.       NVIC_Init(&NVIC_InitStructure);
  344.       
  345. //      NVIC_InitStructure.NVIC_IRQChannel = TIM1_TRG_COM_IRQn;  //开TIM1触发中断
  346. //      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  347. //      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  348. //      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  349. //      NVIC_Init(&NVIC_InitStructure);        
  350.    
  351.            NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;    // 30s 定时中断
  352.            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;
  353.            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;               
  354.            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        
  355.            NVIC_Init(&NVIC_InitStructure);               
  356.    
  357. }


  358. /**************************************************
  359. //// SPI仪表显示界面
  360. ***************************************************/

  361. //局部刷屏幕   Res_Lcd在TIM2 里计数,每2s 局部刷新一次
  362. void Ref_LCD(void)
  363. {   
  364.    if(Ref_Lcd_flag>50)
  365.     {   
  366.      if(Frame_flag==0){
  367.             if(Exti_speed_1==0){
  368.                mes_show(TIMER,(float)Mileage_e0*0.1,Assist,0,frequent_1*8);
  369.              }else{
  370.                mes_show(TIMER,(float)Mileage_e0*0.1,Assist,(float)(720*1.0/Exti_speed_1),frequent_1*8);   
  371.              }
  372.         }        
  373.         Ref_Lcd_flag=0;
  374.      }
  375. }


  376. void mes_show(u16 a,float b,u8 c,float d,u8 e)
  377. {       u8 h=0;
  378.         char a1[5];
  379.         char b1[8];
  380.         char c1[5];
  381.         char d1[5];
  382.         char e1[5];
  383.         char f1[5];
  384.         
  385.          h=a/60;
  386.         a=a-h*60;
  387.        sprintf(a1,"%.1d",a);
  388.        sprintf(b1,"%.1f",b);
  389.        sprintf(c1,"%d",c);
  390.        sprintf(d1,"%.1f",d);
  391.        sprintf(e1,"%d",e);
  392.        sprintf(f1,"%d",h);   
  393.     if(a<=9){
  394.        LCD_ShowString(65,222,200,16,24,"0");        //TIME
  395.        LCD_ShowString(77,222,200,16,24,a1);        //TIME
  396.        }
  397.      else if(a>9&&a<=59){
  398.        LCD_ShowString(65,222,200,16,24,a1);        //TIME
  399.      }   
  400.      
  401.     if(h<=9){
  402.      LCD_ShowString(32,222,200,16,24,"0");        //TIME
  403.      LCD_ShowString(44,222,200,16,24,f1);        //TIME
  404.     }else if(h>9&&h<=59){
  405.        LCD_ShowString(32,222,200,16,24,f1);        //TIME
  406.      }
  407.       
  408.      LCD_ShowString(25,287,200,16,24,b1); //MILE
  409.          LCD_ShowString(20,90,200,16,96,c1);        //ASSIST
  410.          LCD_ShowString(110,100,200,16,48,d1); //SPEED
  411.      LCD_ShowString(140,230,200,16,48,e1); //FRE
  412.         
  413. //     if(I_Thrut[3]<=160){
  414. //     
  415. //     }else if(I_Thrut[3]>=195){
  416. //       LCD_Fill(21,19,26,27,BLACK);    //电池图标
  417. //     }else if(I_Thrut[3]<=180){
  418. //      LCD_Fill(21,19,26,27,BLACK);    //电池图标  
  419. //      LCD_Fill(28,19,33,27,BLACK);    //电池图标
  420. //     }
  421.          
  422. //     LCD_Fill(21,19,26,27,BLACK);    //电池图标
  423. //     LCD_Fill(28,19,33,27,BLACK);    //电池图标
  424. //     LCD_Fill(35,19,40,27,BLACK);    //电池图标
  425. //     LCD_Fill(42,19,47,27,BLACK);    //电池图标   
  426. }
  427.   

  428. void mes_show1(float a,float b,u8 c,float d,u16 e,u16 f)
  429. {       u8 h=0;
  430.         char a1[5];
  431.         char b1[8];
  432.         char c1[5];
  433.         char d1[5];
  434.         char e1[5];
  435.         char f1[5];
  436.         char g1[5];
  437.         h=c/60;
  438.         c=c-h*60;
  439.        sprintf(a1,"%.1f",a);
  440.        sprintf(b1,"%.1f",b);
  441.        sprintf(c1,"%d",c);
  442.        sprintf(d1,"%.1f",d);
  443.        sprintf(e1,"%d",e);
  444.        sprintf(f1,"%d",f);
  445.        sprintf(g1,"%d",h);
  446.      if(c<=9){
  447.        LCD_ShowString(137,128,200,16,24,"0");        //TIME
  448.        LCD_ShowString(149,128,200,16,24,c1);        //TIME
  449.        }
  450.      else if(a>9&&a<=59){
  451.        LCD_ShowString(137,128,200,16,24,c1);        //TIME
  452.      }  
  453.    
  454.     if(h<=9){
  455.      LCD_ShowString(105,128,200,16,24,"0");        //TIME
  456.      LCD_ShowString(117,128,200,16,24,g1);        //TIME
  457.     }else if(h>9&&h<=59){
  458.        LCD_ShowString(105,128,200,16,24,g1);        //TIME
  459.      }
  460.       
  461.      LCD_ShowString(130,68,200,16,24,a1);    //Mile_Sum
  462.      LCD_ShowString(130,98,200,16,24,b1);   //Mile_sin
  463.    //  LCD_ShowString(120,128,200,16,24,c1);  //Timer
  464.      LCD_ShowString(120,160,200,16,24,d1);  //Speed
  465.      LCD_ShowString(130,188,200,16,24,e1);  //Fre_Sum
  466.      LCD_ShowString(130,218,200,16,24,f1);  //Fre_Aver
  467. }  
  468.   

  469. void FRAME_INIT(void){
  470.     LCD_Clear(WHITE);
  471.     POINT_COLOR=BLACK ;
  472.     LCD_DrawLine(2,2,2,318);      //左右边界   
  473.     LCD_DrawLine(238,2,238,318);      
  474.     LCD_DrawLine(2,2,238,2);   // 上下边界
  475.     LCD_DrawLine(2,318,238,318);
  476.         
  477.    // LCD_DrawLine(0,70,238,70);
  478.         LCD_DrawLine(10,40,230,40);  //横一
  479.     //LCD_DrawLine(80,220,238,220);
  480.         LCD_DrawLine(10,190,230,190); // 横二
  481.     //LCD_DrawLine(80,70,80,318);   
  482.         LCD_DrawLine(87,45,87,185);   // 竖一  
  483.         LCD_DrawLine(120,200,120,310);   // 竖二
  484.         LCD_DrawLine(10,255,118,255); // 横三
  485.         
  486.         LCD_DrawLine(17,16,52,16);
  487.         LCD_DrawLine(17,16,17,31);
  488.         LCD_DrawLine(17,31,52,31);
  489.         LCD_DrawLine(52,16,52,21);
  490.         LCD_DrawLine(52,21,55,21);
  491.         LCD_DrawLine(55,21,55,26);
  492.         LCD_DrawLine(52,26,55,26);
  493.         LCD_DrawLine(52,26,52,31);

  494.         LCD_ShowString(10,50,200,24,24,"ASSIST");
  495.         
  496.         LCD_ShowString(100,50,200,24,24,"SPEED");
  497.         
  498.         LCD_ShowString(180,155,200,24,24,"KM/h");
  499.         
  500.         LCD_ShowString(11,200,200,16,16,"TIME");
  501.    
  502.         LCD_ShowString(55,221,200,16,24,":");
  503.    
  504.         LCD_ShowString(11,265,200,16,16,"MILE");
  505.         LCD_ShowString(85,295,200,16,16,"KM");
  506.         
  507.         LCD_ShowString(135,200,200,16,24,"FRE");
  508.         LCD_ShowString(185,275,200,16,24,"RPM");
  509. }


  510. void FRAME_INIT1(void){

  511.     LCD_Clear(WHITE);
  512.    
  513.     POINT_COLOR=BLACK ;
  514.     LCD_DrawLine(2,2,2,318);      //左右边界   
  515.     LCD_DrawLine(238,2,238,318);      
  516.     LCD_DrawLine(2,2,238,2);   // 上下边界
  517.     LCD_DrawLine(2,318,238,318);
  518.    
  519.      LCD_DrawLine(20,65,220,65);  // 第一线
  520.      LCD_DrawLine(20,95,220,95);
  521.      LCD_DrawLine(20,125,220,125);  
  522.      LCD_DrawLine(20,155,220,155);  
  523.      LCD_DrawLine(20,185,220,185);  
  524.      LCD_DrawLine(20,215,220,215);  
  525.      LCD_DrawLine(20,245,220,245);
  526.      LCD_DrawLine(20,275,220,275);
  527.    
  528.      LCD_DrawLine(20,65,20,245);  // 竖线
  529.      LCD_DrawLine(220,65,220,245);     
  530.      
  531.     LCD_ShowString(25,68,200,16,24,"Mile_Sum");  
  532.     LCD_ShowString(25,98,200,16,24,"Mile_Sin");  
  533.     LCD_ShowString(25,128,200,16,24,"Timer");
  534.     LCD_ShowString(127,128,200,16,24,":");        //TIME   
  535.     LCD_ShowString(25,158,200,16,24,"Speed");
  536.     LCD_ShowString(25,188,200,16,24,"Fre_Sum");
  537.     LCD_ShowString(25,218,200,16,24,"Fre_Aver");
  538.    
  539.     LCD_ShowString(200,72,200,16,16,"Km");  
  540.     LCD_ShowString(200,102,200,16,16,"Km");  
  541.     LCD_ShowString(190,132,200,16,16,"Min");  
  542.     LCD_ShowString(180,162,200,16,16,"Km/h");
  543.     LCD_ShowString(190,192,200,16,16,"RPM");
  544.     LCD_ShowString(190,222,200,16,16,"RPM");
  545. }


复制代码

原理图: 无
仿真: 无
代码(仅供参考): Bldc_Hall_STM32F103.7z (326.34 KB, 下载次数: 19)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:228452 发表于 2023-11-23 08:29 | 只看该作者
Can you post schematic ?
Thank you
回复

使用道具 举报

板凳
ID:640768 发表于 2023-11-26 09:19 | 只看该作者
mick32 发表于 2023-11-23 08:29
Can you post schematic ?
Thank you

在我的另一篇帖子里
回复

使用道具 举报

地板
ID:228452 发表于 2023-11-27 01:27 | 只看该作者
Do you have link available ?

  Thank you
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表