赞
踩
目录
前段时间花3天时间做的大创项目智能药箱,做完总结一下。
主界面:
时钟设置:
、
服药设置:
出药测试:
短信测试:
- #include "stm32f4xx.h"
- #include "usart.h"
- #include "delay.h"
- #include "servo.h"
- #include "motor.h"
- #include "thumb.h"
- #include "worm.h"
- #include "stepmotor.h"
- #include "infrared.h"
- #include "ds18b20.h"
- //#include "exti.h"
- #include "key.h"
- #include "LD3320.h"
- #include "jetson.h"
- #include "rubbish.h"
- #include "voice.h"
- #include "rtc.h"
-
- #include "usmart.h"
- //#include "lcd.h"
- //#include "sram.h"
- //#include "malloc.h"
- //#include "w25qxx.h"
- //#include "sdio_sdcard.h"
- //#include "ff.h"
- //#include "exfuns.h"
- //#include "fontupd.h"
- #include "text.h"
- //#include "touch.h"
- #include "usart3.h"
- #include "sim800c.h"
- /*********************************************************************************************************
- * 全局变量
- *********************************************************************************************************/
-
-
- /*********************************************************************************************************
- * 函数声明
- *********************************************************************************************************/
- void tablet(int medicine_count)//药片
- {
- int i;
- for(i=0;i<medicine_count;i++)
- {
- set_Angle_2(0);//药片 TIM4 通道2 B7
- delay_ms(1000);
- set_Angle_2(100);//胶囊 TIM4 通道2 B7
- delay_ms(2000);
- }
-
- }
- void pill_1(int medicine_count)//药丸1
- {
- int i;
- for(i=0;i<medicine_count;i++)
- {
- TIM_SetCompare1(TIM4,800);//药丸1 TIM4 通道1 B6
- delay_ms(1000);
- set_Angle_1(70);//药丸1 TIM4 通道1 B6
- delay_ms(2000);
- }
- }
- void pill_2(int medicine_count)//药丸2
- {
- int i;
- for(i=0;i<medicine_count;i++)
- {
- TIM_SetCompare4(TIM4,700);//药丸2 TIM4 通道4 B9
- delay_ms(1000);
- set_Angle_4(80);//药丸2 TIM4 通道4 B9
- delay_ms(2000);
- }
- }
- void capsule(int medicine_count)//胶囊
- {
- int i;
- for(i=0;i<medicine_count;i++)
- {
- set_Angle_3(0);//药片 TIM4 通道3 B8
- delay_ms(1000);
- set_Angle_3(100);//药片 TIM4 通道3 B8
- delay_ms(2000);
- }
- }
- void Medicien(int medicine_box,int medicine_count)
- {
- switch(medicine_box)
- {
- case(1):pill_1(medicine_count);break;
- case(2):tablet(medicine_count);break;
- case(3):capsule(medicine_count);break;
- case(4):pill_2(medicine_count);break;
- }
- }
- void Medicien_star(void)
- {
- int i;
- if(page==16)
- {
- while(page==16);
- }
- if(page==17)
- {
- while(page==17)
- {
- if(medicine_flag==7)
- {
- for(i=0;i<8;i+=2)
- {
- Medicien(medicinebuf[i],medicinebuf[i+1]);
- }
- page=0;
- break;
- }
- }
- }
- if(page==18)
- {
- pill_1(2);
- tablet(2);
- capsule(2);
- pill_2(2);
- page=0;
- }
- }
-
-
- int main(void)
- {
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- delay_init(168);
- uart_init(9600); //串口初始化为9600
- usart3_init(115200); //初始化串口3
-
- KEY_Init();
- TIM4_PWM_Init();
- My_RTC_Init(); //初始化RTC
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKE UP中断,1秒钟中断一次
- set_Angle_1(70);//药丸1 TIM4 通道1 B6
- set_Angle_2(100);//胶囊 TIM4 通道2 B7
- set_Angle_3(100);//药片 TIM4 通道3 B8
- set_Angle_4(80);//药丸2 TIM4 通道4 B9
- delay_ms(1000);
- while(1)
- {
- switch(page)
- {
- case 0:break;
- case 1:main_interface_show();break;
- case 2:rtc_show_set();break;
- case 7:voice_IO(1);break;
- // case 8:play_back();break;
- // case 9:play_back();break;
- // case 10:play_back();break;
- // case 11:play_back();break;
-
- case 16:Medicien_star();break;
- case 17:Medicien_star();break;
- case 18:pill_1(2);
- tablet(2);
- capsule(2);
- pill_2(2);page=1;break;
- case 19:voice_IO(7);break;
- case 20://usmart_dev.init(168);//初始化USMART
- sim800c_test(1);break;
- case 21:sim800c_test(2);break;
- }
- }
- }
-
-
-
-
- void USART1_IRQHandler(void) //串口1中断服务程序
- {
- u8 Res;
- #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
- OSIntEnter();
- #endif
- if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
-
- if((USART_RX_STA&0x8000)==0)//接收未完成
- {
- if(USART_RX_STA&0x4000)//接收到了0x0d
- {
- if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
- else USART_RX_STA|=0x8000; //接收完成了
- }
- else //还没收到0X0D
- {
- if(Res==0x0d)USART_RX_STA|=0x4000;
- else
- {
- USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
- USART_RX_STA++;
- if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
- }
- }
- }
- if((page==5||page==6)&&time_flag<=3)
- {
- timebuf[time_flag]=Res;
-
- time_flag++;
- }
- else if((page==10)&&tea_flag<=4)
- {
- teabuf[tea_flag]=Res;
- if(teabuf[0]<10)
- {
- page=teabuf[0];
- }
- tea_flag++;
- }
- else if((page==17)&&tea_flag<=7)
- {
- medicinebuf[medicine_flag]=Res;
-
- medicine_flag++;
- }
- else if(page!=5&&page!=6&&page!=10&&page!=17)
- {
- switch(Res)
- {
- case 0x01:page=1;break;
- case 0x02:page=2;break;
- case 0x03:page=3;break;
- case 0x04:page=4;break;
- case 0x05:page=5;break;
- case 0x06:page=6;break;
- case 0x07:page=7;break;
- case 0x08:page=8;break;
- case 0x09:page=9;break;
- case 0x0a:page=10;break;
- case 0x0b:page=11;break;
- case 0x0c:page=12;break;
- case 0x0d:page=13;break;
- case 0x0e:page=14;break;
- case 0x10:page=16;break;
- case 0x11:page=17;break;
- case 0x12:page=18;break;
- case 0x13:page=19;break;
- case 0x14:page=20;break;
- case 0x15:page=21;break;
- case 0x16:page=22;break;
- case 0x17:page=23;break;
- case 0x18:page=24;break;
- case 0x19:page=25;break;
- }
- }
-
-
- }
- #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
- OSIntExit();
- #endif
- }
- #endif
这个工程是基于正点原子的SMI600短信模块测试程序,工程代码我已经打包好上传,有需要的小伙伴可以在评论区留言。
程序代码工程链接:基于STM32F407的HMI USART串口屏智能药箱设计.zip
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。