某校一次·實訓的題目
上傳出來分享一下
是600脈沖每轉的傳感器
*正交編碼器模塊
*輸入引腳PB->6 PB->7
*2倍頻上升沿、下降沿均捕捉,所得數值為編碼器本身分辨率x2
*數值由串口1打印出來,接上液晶也會顯示結果
單片機源程序如下:
- #include "STM32F1.h"
- u16 Parameter = 600; //設置編碼器線數
- u16 Count,flag=0;//
- int one_s=0,rpm = 0,rpmx = 0,j = 0,f = 0,i = 0,k=0;
- int main(void)
- {
- SystemInit(); //System init.
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- delay_init(72);//Delay init.
- Lcd_Init();
- TIM4_Init(); //初始化TIM4編碼器模式
- LED_Init();
- TIM3_Int_Init(5999,7199);//每半秒刷新一次,計算出轉速
- LCD_LED_SET;//通過IO控制背光亮
- Lcd_Clear(BRRED);//清屏
-
- DisplayButtonDown(0,75,128,100);
- DisplayButtonUp(0,75,128,100); //x1,y1,x2,y2
- DisplayButtonUp(15,38,113,58); //x1,y1,x2,y2
- Gui_DrawFont_GBK16(16,0,BLUE,BRRED, "基于單片機的"); //點
- Gui_DrawFont_GBK16(36,20,BLUE,BRRED, "轉速表"); //點
- Gui_DrawFont_GBK16(20,40,RED,BRRED, "單位:轉/min"); //點
- Gui_DrawFont_GBK16(20,110,GREEN,BRRED, "方向:"); //點
- Gui_DrawFont_GBK16(90,80,BLUE,BRRED, "."); //點
- LCD_ShowNum24(10,80,0,5,RED); //預顯示正數部分
- LCD_ShowNum24(106,80,0,1,RED); //預顯示小數部分
-
- for(;;)//一直讀取數據
- {
- k++;
- if(k>50)//LED閃動,為了好玩
- {k=0;
- LED=!LED;
- }
- if (0x11==TIM4->CR1) //判斷正反 由CR1寄存器顯示
- Gui_DrawFont_GBK16(68,110,RED,BRRED, "正");
- else
- Gui_DrawFont_GBK16(68,110,RED,BRRED, "反");
- if(i != rpmx)//轉速刷新 if語句是為了在數據不變的情況下使LCD不更新 減少刷新 使其更美觀
- {
- i=rpmx;
- LCD_ShowNum24(10,80,i,5,RED); //顯示正數部分
- LCD_ShowNum24(106,80,i,1,RED); //顯示小數部分
- }
- }
- }
復制代碼
所有資料51hei提供下載:
增量式編碼器.rar
(308.76 KB, 下載次數: 29)
2019-1-27 10:49 上傳
點擊文件名下載附件
|