在激光标线器的设计中,涉及指令的设置与脉冲的输出。为此需要对LPC824breakout进行适当的扩展,如按键等,图1是使用原单片机开发板所制作的效果。 由于先前已解决了OLED屏的显示问题,可参见如下网页的介绍:https://www.nxpic.org.cn/module/forum/thread-606762-1-1.html 这里主要介绍一下参数设置和脉冲模拟的实现方法。 图1 扩展键入功能 根据单片机开发板的线路连接,K4是与P0.23相连,K3是与P0.24相连,K2是与P0.25相连,K1是与P0.26相连。为此,将相关引脚的定义为: GPIOSetDir(LPC_GPIO_PORT->PIN0, 23, 0);//K4 GPIOSetDir(LPC_GPIO_PORT->PIN0, 24, 0);//K3 GPIOSetDir(LPC_GPIO_PORT->PIN0, 25, 0);//K2 GPIOSetDir(LPC_GPIO_PORT->PIN0, 26, 0);//K1 其中K4、K3为数值选择键,K2为数值移位键,K1为确认键。 实现参数设置的程序如下: - num=0;
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 23)==0) //K4 +
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 23)==0);
- num++;
- OLED_ShowNum(88,4,num,2,16);
- }
-
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 24)==0) //K3 -
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 24)==0);
- num--;
- OLED_ShowNum(88,4,num,2,16);
- }
-
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 25)==0) //K2 *10
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 25)==0);
- num=num*10;
- OLED_ShowNum(88,4,num,2,16);
- }
-
- if(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 26)==0)
- {
- while(GPIOGetPinValue(LPC_GPIO_PORT->PIN0, 26)==0);
- // 转入脉冲输出程序
- }
复制代码脉冲是驱动步进电机运动的基础,为此在实际扩展步进电机前需对脉冲的输出功能进行模拟验证,其方法就是以输出的脉冲来控制红色的指示灯闪亮,其执行效果如图2所示。 实现脉冲模拟的程序如下: - OLED_ShowCHinese(54,6,22); //显示:运行状态
- OLED_ShowCHinese(72,6,23);
- for(i=0;i<num;i++) // 脉冲输出
- {
- if(j==1) GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 15, 0 ); // 脉冲指示
- else GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 16, 0 );
- Delay_1ms(5000);
- Delay_1ms(5000);
- if(j==1) GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 15, 1 );
- else GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 16, 0 );
- Delay_1ms(5000);
- Delay_1ms(5000);
- }
- OLED_ShowCHinese(54,6,24); //显示:完成状态
- OLED_ShowCHinese(72,6,25);
- s=s+num; // 更新当前位置
- OLED_ShowNum(88,2,s,2,16);
- OLED_ShowString(72,4,": 0 ",16);
- }
复制代码 当然这只是激光标线器的基本功能,要真正达到设计目标还需解决正反向移动、回原点、到边界、自动回零等处理。 图2 模拟脉冲输出
|