重新认识敏子

    元旦那两天,一直在被敏子灌输那首听起来相当有感觉的《一言难尽》,有迪克牛仔版的,当然,更好听的还是敏子自己那富有特色的版本。借用敏子经常说的两个字来形容,那就是“迷人”!
   
    由于我的包里带了一个mp3,所以我一直有把这迷人的音符录下来的冲动,无奈那张过于舒服的温床,因为那是觉主的床,所以自然很特别的舒服,躺上去,是打死也不愿意爬起来的,因而错过了把那迷人的音符永久性地记录下来的机会。
   
    想起一个并不是太合适的比喻:浴缸。用来比喻那张我仅仅睡过两天的床。敏子却开玩笑地说,在他的床上拨点水就成浴缸了。
   
    发现该重新认识这个一直自称为不能远行的人,虽然一起生活了四年,也许是集体的共性暂时掩盖了某些本来属于他自己的性格。看他对有些事情的用心程度,难免自愧不如。或许是我一直没有发现而已,但是,他确实有这样的一面。
这是主函数#include <stm32f10x.h> #include <led.h> #include <usart.h> #include <delay.h> #include <PID.h> #include <button4_4.h> #include <stdlib.h> #include <math.h> #include <math.h> #include <Timer.h> #include <PWM.h> #include <Serial.h> #include <Motor.h> #include <Encoder.h> #include <OLED.h> #include <menu.h> int menu2; int menu3; int Target_Position = 0, Reality_Position = 0; int main(void) { SystemInit(); delay_init(72); LED_Init(); LED_On(); Button4_4_Init(); OLED_Init(); ADCInit(); Motor_Init(); Serial_Init(); Encoder_Init(); delay_ms(1000); MenuSystem_Init(); while(1) { // ´¦Àí²Ëµ¥ÏµÍ³ MenuSystem_Process(); } } 然后菜单系统如下:#include "menu.h" // È«¾Ö±äÁ¿¶¨Òå MenuState currentMenu = MENU_MAIN; int menu1_flag = 1; // Ò»¼¶²Ëµ¥Ñ¡Ôñ int menu2_flag = 1; // ¶þ¼¶²Ëµ¥Ñ¡Ôñ float targetSpeed = 0; float actualSpeed = 0; float targetAngle = 0; float actualAngle = 0; uint16_t lightValue = 0; uint8_t speedLevel = 0; uint8_t alarmTriggered = 0; const float MAX_SPEED = 1000.0; // ×î´óÔÊÐíתËÙ (RPM) // ³õʼ»¯²Ëµ¥ÏµÍ³ void MenuSystem_Init(void) { currentMenu = MENU_MAIN; menu1_flag = 1; menu2_flag = 1; alarmTriggered = 0; OLED_Clear(); } // ´¦Àí²Ëµ¥ÏµÍ³ void MenuSystem_Process(void) { switch(currentMenu) { case MENU_MAIN: MenuMain_Handler(); break; case MENU_SERIAL_SUB: MenuSerialSub_Handler(); break; case MENU_LIGHT_SUB: MenuLightSub_Handler(); break; case MENU_SPEED_CTRL: MenuSpeedControl_Handler(); break; case MENU_POS_CTRL: MenuPositionControl_Handler(); break; case MENU_LIGHT_DISPLAY: MenuLightSensor_Handler(); break; case MENU_SPEED_DISPLAY: MenuMotorSpeed_Handler(); break; } // ¼ì²é²¢´¦Àí±¨¾¯ if(alarmTriggered) { HandleAlarm(); } } // ±¨¾¯´¦Àí void HandleAlarm(void) { if(alarmTriggered) { Motor_Control(0); // Í£Ö¹µç»ú OLED_ShowString(1, 1, "ALARM! OVERSPEED"); // µÈ´ýÓû§È·ÈÏ uint8_t key; do { key = Button4_4_Scan(); delay_ms(100); } while(key != KEY_ENTER); alarmTriggered = 0; // ·µ»ØÖ÷²Ëµ¥ currentMenu = MENU_MAIN; OLED_Clear(); } } // Ö÷²Ëµ¥´¦Àíº¯Êý void MenuMain_Handler(void) { uint8_t key = Button4_4_Scan(); if(key != 0) { switch(key) { case KEY_UP: menu1_flag = (menu1_flag == 1) ? 2 : 1; break; case KEY_DOWN: menu1_flag = (menu1_flag == 1) ? 2 : 1; break; case KEY_ENTER: if(menu1_flag == 1) { currentMenu = MENU_SERIAL_SUB; menu2_flag = 1; } else { currentMenu = MENU_LIGHT_SUB; menu2_flag = 1; } OLED_Clear(); break; } } Display_MainMenu(); delay_ms(50); } // ´®¿Ú¿ØÖÆ×Ӳ˵¥´¦Àíº¯Êý void MenuSerialSub_Handler(void) { uint8_t key = Button4_4_Scan(); if(key != 0) { switch(key) { case KEY_UP: menu2_flag = (menu2_flag == 1) ? 2 : 1; break; case KEY_DOWN: menu2_flag = (menu2_flag == 1) ? 2 : 1; break; case KEY_ENTER: if(menu2_flag == 1) { currentMenu = MENU_SPEED_CTRL; targetSpeed = 0; actualSpeed = 0; } else { currentMenu = MENU_POS_CTRL; targetAngle = 0; actualAngle = 0; } OLED_Clear(); break; case KEY_BACK: currentMenu = MENU_MAIN; OLED_Clear(); break; } } Display_SerialSubMenu(); delay_ms(50); } // ¹âÃô¿ØÖÆ×Ӳ˵¥´¦Àíº¯Êý void MenuLightSub_Handler(void) { uint8_t key = Button4_4_Scan(); if(key != 0) { switch(key) { case KEY_UP: menu2_flag = (menu2_flag == 1) ? 2 : 1; break; case KEY_DOWN: menu2_flag = (menu2_flag == 1) ? 2 : 1; break; case KEY_ENTER: if(menu2_flag == 1) { currentMenu = MENU_LIGHT_DISPLAY; } else { currentMenu = MENU_SPEED_DISPLAY; } OLED_Clear(); break; case KEY_BACK: currentMenu = MENU_MAIN; OLED_Clear(); break; } } Display_LightSubMenu(); delay_ms(50); } // PIDËÙ¶È¿ØÖÆ´¦Àíº¯Êý void MenuSpeedControl_Handler(void) { static uint8_t time_count; uint8_t key = Button4_4_Scan(); uint8_t RxData; // ´¦Àí´®¿ÚÊý¾Ý if (Serial_GetRxFlag() == 1) { RxData = Serial_GetRxData(); Serial_SendByte(RxData); } // ¶¨Ê±¸üÐÂPID¿ØÖÆ time_count++; delay_ms(10); if(time_count >= 5) { // »ñÈ¡±àÂëÆ÷Öµ²¢¼ÆËãËÙ¶È actualSpeed = ((Encoder_Get() * 60 * 20) / 150); // PID¿ØÖÆ uint32_t TIM2_CCR = PosPID(actualSpeed); TIM_SetCompare3(TIM2, TIM2_CCR); time_count = 0; // ¼ì²éÊÇ·ñ³¬ËÙ if(actualSpeed > MAX_SPEED) { alarmTriggered = 1; } } // ´¦Àí·µ»Ø°´¼ü if(key == KEY_BACK) { currentMenu = MENU_SERIAL_SUB; Motor_Control(0); OLED_Clear(); } Display_SpeedControl(); } // PIDλÖÿØÖÆ´¦Àíº¯Êý void MenuPositionControl_Handler(void) { uint8_t key = Button4_4_Scan(); if(key == KEY_BACK) { currentMenu = MENU_SERIAL_SUB; Motor_Control(0); OLED_Clear(); } Display_PositionControl(); delay_ms(50); } // ¹âÃô´«¸ÐÆ÷ÏÔʾ´¦Àíº¯Êý void MenuLightSensor_Handler(void) { uint8_t key = Button4_4_Scan(); // ¶ÁÈ¡¹âÃô´«¸ÐÆ÷Öµ lightValue = Get_Adc_Average(ADC_Channel_1, 10) * 100 / 4095; OLED_ShowNum(74, 47, lightValue, 3); // ¸ù¾Ý¹âÕÕÉèÖÃËٶȵµÎ» if(lightValue < 33) { speedLevel = 1; Motor_Control(300); } else if(lightValue < 66) { speedLevel = 2; Motor_Control(600); } else { speedLevel = 3; Motor_Control(900); } // ¼ì²éÊÇ·ñ³¬ËÙ if(actualSpeed > MAX_SPEED) { alarmTriggered = 1; } // ´¦Àí·µ»Ø°´¼ü if(key == KEY_BACK) { currentMenu = MENU_LIGHT_SUB; Motor_Control(0); OLED_Clear(); } Display_LightSensor(); delay_ms(50); } // µç»úËÙ¶ÈÏÔʾ´¦Àíº¯Êý void MenuMotorSpeed_Handler(void) { uint8_t key = Button4_4_Scan(); // »ñȡʵ¼ÊËÙ¶È actualSpeed = ((Encoder_Get() * 60 * 20) / 150); // ¼ì²éÊÇ·ñ³¬ËÙ if(actualSpeed > MAX_SPEED) { alarmTriggered = 1; } // ´¦Àí·µ»Ø°´¼ü if(key == KEY_BACK) { currentMenu = MENU_LIGHT_SUB; OLED_Clear(); } Display_MotorSpeed(); delay_ms(50); } // ÏÔʾº¯ÊýʵÏÖ void Display_MainMenu(void) { OLED_ShowChinese(2, 4, 75); // ´® OLED_ShowChinese(2, 6, 76); // ¿Ú OLED_ShowChinese(2, 8, 39); // ¿Ø OLED_ShowChinese(2, 10, 40);// ÖÆ OLED_ShowChinese(3, 4, 77); // ¹â OLED_ShowChinese(3, 6, 78); // Ãô OLED_ShowChinese(3, 8, 39); // ¿Ø OLED_ShowChinese(3, 10, 40);// ÖÆ // ÏÔʾѡÔñ±ê¼Ç OLED_ShowString(2, 1, (menu1_flag == 1) ? ">" : " "); OLED_ShowString(3, 1, (menu1_flag == 2) ? ">" : " "); } void Display_SerialSubMenu(void) { OLED_ShowChinese(2, 2, 79); // ËÙ OLED_ShowChinese(2, 4, 80); // ¶È OLED_ShowChinese(2, 6, 40); // ¿Ø OLED_ShowChinese(2, 8, 39); // ÖÆ OLED_ShowChinese(3, 2, 81); // λ OLED_ShowChinese(3, 4, 82); // Öà OLED_ShowChinese(3, 6, 40); // ¿Ø OLED_ShowChinese(3, 8, 39); // ÖÆ // ÏÔʾѡÔñ±ê¼Ç OLED_ShowString(2, 1, (menu2_flag == 1) ? ">" : " "); OLED_ShowString(3, 1, (menu2_flag == 2) ? ">" : " "); OLED_ShowString(1, 1, "SERIAL CTRL"); } void Display_LightSubMenu(void) { OLED_ShowChinese(2, 2, 83); // ´« OLED_ShowChinese(2, 4, 84); // ¸Ð OLED_ShowChinese(2, 6, 85); // Æ÷ OLED_ShowChinese(2, 8, 86); // Öµ OLED_ShowChinese(3, 2, 87); // µç OLED_ShowChinese(3, 4, 88); // »ú OLED_ShowChinese(3, 6, 79); // ËÙ OLED_ShowChinese(3, 8, 80); // ¶È // ÏÔʾѡÔñ±ê¼Ç OLED_ShowString(2, 1, (menu2_flag == 1) ? ">" : " "); OLED_ShowString(3, 1, (menu2_flag == 2) ? ">" : " "); OLED_ShowString(1, 1, "LIGHT SENSOR"); } void Display_SpeedControl(void) { OLED_ShowString(1, 1, "SPEED CONTROL"); OLED_ShowString(2, 1, "Target:"); OLED_ShowNum(2, 8, (uint16_t)targetSpeed, 4); OLED_ShowString(2, 13, "RPM"); OLED_ShowString(3, 1, "Actual:"); OLED_ShowNum(3, 8, (uint16_t)actualSpeed, 4); OLED_ShowString(3, 13, "RPM"); OLED_ShowString(4, 1, "<BACK>"); } void Display_PositionControl(void) { OLED_ShowString(1, 1, "POSITION CONTROL"); OLED_ShowString(2, 1, "Target:"); OLED_ShowNum(2, 8, (uint16_t)targetAngle, 4); OLED_ShowString(2, 13, "deg"); OLED_ShowString(3, 1, "Actual:"); OLED_ShowNum(3, 8, (uint16_t)actualAngle, 4); OLED_ShowString(3, 13, "deg"); OLED_ShowString(4, 1, "<BACK>"); } void Display_LightSensor(void) { OLED_ShowString(1, 1, "LIGHT SENSOR"); OLED_ShowString(2, 1, "Value:"); OLED_ShowNum(2, 8, lightValue, 4); OLED_ShowString(3, 1, "Speed Level:"); OLED_ShowNum(3, 14, speedLevel, 1); OLED_ShowString(4, 1, "<BACK>"); } void Display_MotorSpeed(void) { OLED_ShowString(1, 1, "MOTOR SPEED"); OLED_ShowString(2, 1, "Speed:"); OLED_ShowNum(2, 8, (uint16_t)actualSpeed, 4); OLED_ShowString(2, 13, "RPM"); OLED_ShowString(3, 1, "Max:"); OLED_ShowNum(3, 6, (uint16_t)MAX_SPEED, 4); OLED_ShowString(3, 11, "RPM"); OLED_ShowString(4, 1, "<BACK>"); } 解读这段程序,然后没有开启我的串口模式
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值