当前位置:   article > 正文

第九届全国大学生机械设计创新大赛基于STM32F407的HMI USART串口屏智能药箱设计_stm32药箱代码

stm32药箱代码

目录

前言

一、屏幕设计

二、stm32部分代码

1.main.c

2.usart.c

 3.其余代码

总结:程序工程+屏幕文件链接




前言

前段时间花3天时间做的大创项目智能药箱,做完总结一下。


一、屏幕设计

主界面:

时钟设置:

 

服药设置:

出药测试:

短信测试:


二、stm32部分代码


1.main.c

  1. #include "stm32f4xx.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "servo.h"
  5. #include "motor.h"
  6. #include "thumb.h"
  7. #include "worm.h"
  8. #include "stepmotor.h"
  9. #include "infrared.h"
  10. #include "ds18b20.h"
  11. //#include "exti.h"
  12. #include "key.h"
  13. #include "LD3320.h"
  14. #include "jetson.h"
  15. #include "rubbish.h"
  16. #include "voice.h"
  17. #include "rtc.h"
  18. #include "usmart.h"
  19. //#include "lcd.h"
  20. //#include "sram.h"
  21. //#include "malloc.h"
  22. //#include "w25qxx.h"
  23. //#include "sdio_sdcard.h"
  24. //#include "ff.h"
  25. //#include "exfuns.h"
  26. //#include "fontupd.h"
  27. #include "text.h"
  28. //#include "touch.h"
  29. #include "usart3.h"
  30. #include "sim800c.h"
  31. /*********************************************************************************************************
  32. * 全局变量
  33. *********************************************************************************************************/
  34. /*********************************************************************************************************
  35. * 函数声明
  36. *********************************************************************************************************/
  37. void tablet(int medicine_count)//药片
  38. {
  39. int i;
  40. for(i=0;i<medicine_count;i++)
  41. {
  42. set_Angle_2(0);//药片 TIM4 通道2 B7
  43. delay_ms(1000);
  44. set_Angle_2(100);//胶囊 TIM4 通道2 B7
  45. delay_ms(2000);
  46. }
  47. }
  48. void pill_1(int medicine_count)//药丸1
  49. {
  50. int i;
  51. for(i=0;i<medicine_count;i++)
  52. {
  53. TIM_SetCompare1(TIM4,800);//药丸1 TIM4 通道1 B6
  54. delay_ms(1000);
  55. set_Angle_1(70);//药丸1 TIM4 通道1 B6
  56. delay_ms(2000);
  57. }
  58. }
  59. void pill_2(int medicine_count)//药丸2
  60. {
  61. int i;
  62. for(i=0;i<medicine_count;i++)
  63. {
  64. TIM_SetCompare4(TIM4,700);//药丸2 TIM4 通道4 B9
  65. delay_ms(1000);
  66. set_Angle_4(80);//药丸2 TIM4 通道4 B9
  67. delay_ms(2000);
  68. }
  69. }
  70. void capsule(int medicine_count)//胶囊
  71. {
  72. int i;
  73. for(i=0;i<medicine_count;i++)
  74. {
  75. set_Angle_3(0);//药片 TIM4 通道3 B8
  76. delay_ms(1000);
  77. set_Angle_3(100);//药片 TIM4 通道3 B8
  78. delay_ms(2000);
  79. }
  80. }
  81. void Medicien(int medicine_box,int medicine_count)
  82. {
  83. switch(medicine_box)
  84. {
  85. case(1):pill_1(medicine_count);break;
  86. case(2):tablet(medicine_count);break;
  87. case(3):capsule(medicine_count);break;
  88. case(4):pill_2(medicine_count);break;
  89. }
  90. }
  91. void Medicien_star(void)
  92. {
  93. int i;
  94. if(page==16)
  95. {
  96. while(page==16);
  97. }
  98. if(page==17)
  99. {
  100. while(page==17)
  101. {
  102. if(medicine_flag==7)
  103. {
  104. for(i=0;i<8;i+=2)
  105. {
  106. Medicien(medicinebuf[i],medicinebuf[i+1]);
  107. }
  108. page=0;
  109. break;
  110. }
  111. }
  112. }
  113. if(page==18)
  114. {
  115. pill_1(2);
  116. tablet(2);
  117. capsule(2);
  118. pill_2(2);
  119. page=0;
  120. }
  121. }
  122. int main(void)
  123. {
  124. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  125. delay_init(168);
  126. uart_init(9600); //串口初始化为9600
  127. usart3_init(115200); //初始化串口3
  128. KEY_Init();
  129. TIM4_PWM_Init();
  130. My_RTC_Init(); //初始化RTC
  131. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  132. RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKE UP中断,1秒钟中断一次
  133. set_Angle_1(70);//药丸1 TIM4 通道1 B6
  134. set_Angle_2(100);//胶囊 TIM4 通道2 B7
  135. set_Angle_3(100);//药片 TIM4 通道3 B8
  136. set_Angle_4(80);//药丸2 TIM4 通道4 B9
  137. delay_ms(1000);
  138. while(1)
  139. {
  140. switch(page)
  141. {
  142. case 0:break;
  143. case 1:main_interface_show();break;
  144. case 2:rtc_show_set();break;
  145. case 7:voice_IO(1);break;
  146. // case 8:play_back();break;
  147. // case 9:play_back();break;
  148. // case 10:play_back();break;
  149. // case 11:play_back();break;
  150. case 16:Medicien_star();break;
  151. case 17:Medicien_star();break;
  152. case 18:pill_1(2);
  153. tablet(2);
  154. capsule(2);
  155. pill_2(2);page=1;break;
  156. case 19:voice_IO(7);break;
  157. case 20://usmart_dev.init(168);//初始化USMART
  158. sim800c_test(1);break;
  159. case 21:sim800c_test(2);break;
  160. }
  161. }
  162. }


2.usart.c

  1. void USART1_IRQHandler(void) //串口1中断服务程序
  2. {
  3. u8 Res;
  4. #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
  5. OSIntEnter();
  6. #endif
  7. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
  8. {
  9. Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
  10. if((USART_RX_STA&0x8000)==0)//接收未完成
  11. {
  12. if(USART_RX_STA&0x4000)//接收到了0x0d
  13. {
  14. if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
  15. else USART_RX_STA|=0x8000; //接收完成了
  16. }
  17. else //还没收到0X0D
  18. {
  19. if(Res==0x0d)USART_RX_STA|=0x4000;
  20. else
  21. {
  22. USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
  23. USART_RX_STA++;
  24. if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
  25. }
  26. }
  27. }
  28. if((page==5||page==6)&&time_flag<=3)
  29. {
  30. timebuf[time_flag]=Res;
  31. time_flag++;
  32. }
  33. else if((page==10)&&tea_flag<=4)
  34. {
  35. teabuf[tea_flag]=Res;
  36. if(teabuf[0]<10)
  37. {
  38. page=teabuf[0];
  39. }
  40. tea_flag++;
  41. }
  42. else if((page==17)&&tea_flag<=7)
  43. {
  44. medicinebuf[medicine_flag]=Res;
  45. medicine_flag++;
  46. }
  47. else if(page!=5&&page!=6&&page!=10&&page!=17)
  48. {
  49. switch(Res)
  50. {
  51. case 0x01:page=1;break;
  52. case 0x02:page=2;break;
  53. case 0x03:page=3;break;
  54. case 0x04:page=4;break;
  55. case 0x05:page=5;break;
  56. case 0x06:page=6;break;
  57. case 0x07:page=7;break;
  58. case 0x08:page=8;break;
  59. case 0x09:page=9;break;
  60. case 0x0a:page=10;break;
  61. case 0x0b:page=11;break;
  62. case 0x0c:page=12;break;
  63. case 0x0d:page=13;break;
  64. case 0x0e:page=14;break;
  65. case 0x10:page=16;break;
  66. case 0x11:page=17;break;
  67. case 0x12:page=18;break;
  68. case 0x13:page=19;break;
  69. case 0x14:page=20;break;
  70. case 0x15:page=21;break;
  71. case 0x16:page=22;break;
  72. case 0x17:page=23;break;
  73. case 0x18:page=24;break;
  74. case 0x19:page=25;break;
  75. }
  76. }
  77. }
  78. #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
  79. OSIntExit();
  80. #endif
  81. }
  82. #endif

 3.其余代码

这个工程是基于正点原子的SMI600短信模块测试程序,工程代码我已经打包好上传,有需要的小伙伴可以在评论区留言。



总结:程序工程+屏幕文件链接

程序代码工程链接:基于STM32F407的HMI USART串口屏智能药箱设计.zip

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/578065
推荐阅读
相关标签
  

闽ICP备14008679号