某校一次·实训的题目
上传出来分享一下
是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)
|