- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "key.h"
- #include "usmart.h"
- #include "malloc.h"
- #include "sdio_sdcard.h"
- #include "w25qxx.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "text.h"
- #include "touch.h"
- #include "usart3.h"
- #include "common.h"
- #include "driver.h"
- #include "beep.h"
- void display(int i,int f_data);
- void StepControl(u8 f_data);
- void ClockStepControl(u8 f_data);
- void ZeroStepControl(u8 f_data);
- void clock_display(int f_data);
- extern u16 SpeechData;
- int main(void)
- {
- u8 timex=0;
- u8 constate=0; //连接状态
- u8 r_data[2];
- u8 s_data[2];
- u8 data[10]={0};
- u16 t=999; //加速第一次获取链接状态
- u8 i=0;
- u8 j=0;
- u8 k=0;
- u8 Speech=0;
- //u8 m_data[1]={0};
-
-
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为115200
- usmart_dev.init(72); //初始化USMART
- LED_Init(); //初始化与LED连接的硬件接口
- KEY_Init(); //初始化按键
- LCD_Init(); //初始化LCD
- BEEP_Init(); //初始化蜂鸣器
- W25QXX_Init(); //初始化W25Q128
- tp_dev.init(); //初始化触摸屏
- usart3_init(115200); //初始化串口3
- TIM8_OPM_RCR_Init(999,72-1); //1MHz计数频率 单脉冲+重复计数模式
- Driver_Init(); //驱动器初始化
- my_mem_init(SRAMIN); //初始化内部内存池
- exfuns_init(); //为fatfs相关变量申请内存
- f_mount(fs[1],"1:",1); //挂载FLASH.
-
-
- set_lcd();//配置LCD屏幕
- atk_8266_test(); //进入ATK_ESP8266测试
- POINT_COLOR=RED;
- Show_Str(15,160,100,12,"1号分区:",12,0);
- Show_Str(15,180,100,12,"2号分区:",12,0);
- Show_Str(15,200,100,12,"3号分区:",12,0);
- Show_Str(15,220,100,12,"4号分区:",12,0);
- Show_Str(15,240,100,12,"5号分区:",12,0);
- Show_Str(15,260,100,12,"6号分区:",12,0);
- Show_Str(15,280,100,12,"7号分区:",12,0);
- Show_Str(15,300,100,12,"8号分区:",12,0);
- Show_Str(15,340,100,12,"定时状态:",12,0);
- Show_Str(15,360,100,12,"物品选择:",12,0);
- Show_Str(15,380,100,12,"是否提醒:",12,0);
- POINT_COLOR=BLUE;
- for(j=1;j<9;j++)
- {
- display(j,0);
- }
- //主循环
- while(1)
- {
- delay_ms(5);
- //Show_Str(90,350,100,12,m_data,12,0);
- if(USART_RX_STA==1&&Speech==0)
- {
- if(SpeechData==1)
- {
- LCD_Fill(90,160+0*20,190,160+0*20+20,WHITE);
- Show_Str(90,160+0*20,100,12,"钥匙",12,0);
- Control(1);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
-
-
-
- }
- else if(SpeechData==2)
- {
- LCD_Fill(90,160+0*20,190,160+0*20+20,WHITE);
- Show_Str(90,160+0*20,100,12,"无",12,0);
-
- Control(1);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
-
- }
-
- if(SpeechData==3)
- {
- //m_data[0]=SpeechData+0x30;
- LCD_Fill(90,160+1*20,190,160+1*20+20,WHITE);
- Show_Str(90,160+1*20,100,12,"药品",12,0);
- Control(2);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- }
- else if(SpeechData==4)
- {
- LCD_Fill(90,160+1*20,190,160+1*20+20,WHITE);
- Show_Str(90,160+1*20,100,12,"无",12,0);
-
- Control(2);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
-
- }
- else if(SpeechData==5)
- {
- LCD_Fill(90,160+2*20,190,160+2*20+20,WHITE);
- Show_Str(90,160+2*20,100,12,"充电宝",12,0);
- Control(3);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- }
- else if(SpeechData==6)
- {
- LCD_Fill(90,160+2*20,190,160+1*20+20,WHITE);
- Show_Str(90,160+2*20,100,12,"无",12,0);
-
- Control(3);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- }
- else if(SpeechData==7)
- {
- LCD_Fill(90,160+3*20,190,160+3*20+20,WHITE);
- Show_Str(90,160+3*20,100,12,"手机",12,0);
- Control(4);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- }
- else if(SpeechData==8)
- {
- LCD_Fill(90,160+3*20,190,160+3*20+20,WHITE);
- Show_Str(90,160+3*20,100,12,"无",12,0);
-
- Control(4);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- }
- else if(SpeechData==9)
- {
- LCD_Fill(90,160+4*20,190,160+4*20+20,WHITE);
- Show_Str(90,160+4*20,100,12,"笔",12,0);
- Control(5);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- }
- else if(SpeechData==10)
- {
- LCD_Fill(90,160+4*20,190,160+4*20+20,WHITE);
- Show_Str(90,160+4*20,100,12,"无",12,0);
-
- Control(5);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- }
-
- // if(SpeechData%2==0)
- // {
- // StepControl(SpeechData/2);
- // delay_ms(50);
- // display(SpeechData/2,0);
- // }
- // else
- // {
- // StepControl(SpeechData/2+1);
- // delay_ms(50);
- // display(SpeechData/2+1,SpeechData/2+1);
- // }
-
- USART_RX_STA=0;
- }
- if(USART3_RX_STA&0X8000) //接收到一次数据了
- {
- Speech=1;
- r_data[0]=USART3_RX_BUF[13];
- r_data[1]=USART3_RX_BUF[14];
- //将状态赋值给data数组
- switch(r_data[0])
- {
- case 1 :
- data[0]=r_data[1];
- break;
- case 2 :
- data[1]=r_data[1];
- break;
- case 3 :
- data[2]=r_data[1];
- break;
- case 4 :
- data[3]=r_data[1];
- break;
- case 5 :
- data[4]=r_data[1];
- break;
- case 6 :
- data[5]=r_data[1];
- break;
- case 7 :
- data[6]=r_data[1];
- break;
- case 8 :
- data[7]=r_data[1];
- break;
- case 9 :
- data[8]=r_data[1];
- break;
- }
-
- //显示
- if(r_data[0]==0x09)//定时服务
- {
- clock_display(data[8]);
- }
- else//非定时服务
- {
- switch(r_data[0])
- {
- case 1 :
- display(r_data[0],r_data[1]);
- break;
- case 2 :
- display(r_data[0],r_data[1]);
- break;
- case 3 :
- display(r_data[0],r_data[1]);
- break;
- case 4 :
- display(r_data[0],r_data[1]);
- break;
- case 5 :
- display(r_data[0],r_data[1]);
- break;
- case 6 :
- display(r_data[0],r_data[1]);
- break;
- case 7 :
- display(r_data[0],r_data[1]);
- break;
- case 8 :
- display(r_data[0],r_data[1]);
- break;
- case 9 :
- break;
- }
- }
-
- //控制
- if(r_data[0]!=0x09)//没有选择定时服务
- {
- if(r_data[1]!=0x00)//存
- {
- StepControl(r_data[0]);
- }
- else if(r_data[1]==0x00)//取
- {
- StepControl(r_data[0]);
- }
- }
-
- else if(r_data[0]==0x09)//选择定时服务
- {
- if((r_data[1]!=0x09)&&(r_data[1]!=0x00))
- {
- for(k=0;k<8;k++)//寻找空盒子
- {
- if(data[k]==0)
- break;
- }
- StepControl(k+1);//k+1就是选择的盒子
- }
- else if( r_data[1]==0x09)
- {
- ClockStepControl(k+1);//定时到
- BEEP=1; //蜂鸣器提醒
- delay_ms(300);//延时300ms
- BEEP=0;
- delay_ms(300);//延时300ms
- }
- else if(r_data[1]==0x00)
- {
- ZeroStepControl(k+1);//回原位置
- k=0;
- }
- }
-
- USART3_RX_STA=0;
-
- if(constate!='+')t=1000; //状态为还未连接,立即更新连接状态
- else t=0; //状态为已经连接了,10秒后再检查
- }
- if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
- {
- constate=atk_8266_consta_check();//得到连接状态
- if(constate=='+')Show_Str(30+40,95,200,12,"连接成功",12,0); //连接状态
- else Show_Str(30+40,95,200,12,"连接失败",12,0);
- t=0;
- }
- atk_8266_at_response(1);
- }
- }
- void display(int i,int f_data)
- {
- i=i-1;
- switch(f_data)
- {
- case 0 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"无",12,0);
- break;
-
- case 1 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"钥匙",12,0);
- break;
-
- case 2 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"药品",12,0);
- break;
-
- case 3 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"充电宝",12,0);
- break;
-
- case 4 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"手机",12,0);
- break;
-
- case 5 :
- LCD_Fill(90,160+i*20,190,160+i*20+20,WHITE);
- Show_Str(90,160+i*20,100,12,"笔",12,0);
- break;
-
- case 6 :
-
- break;
-
- case 7 :
-
- break;
-
- case 8 :
-
- break;
- case 9 :
- //Show_Str(90,340,100,12,"到时",12,0);
- break;
- }
- }
- void clock_display(int f_data)
- {
- Show_Str(90,340,100,12,"开",12,0);
- switch(f_data)
- {
- case 0 :
- LCD_Fill(90,360,190,380,WHITE);
- LCD_Fill(90,340,190,360,WHITE);
- Show_Str(90,360,100,12,"无",12,0);
- LCD_Fill(90,380,190,400,WHITE);
- break;
-
- case 1 :
- LCD_Fill(90,360,190,380,WHITE);
- Show_Str(90,360,100,12,"钥匙",12,0);
- break;
-
- case 2 :
- LCD_Fill(90,360,190,380,WHITE);
- Show_Str(90,360,100,12,"药品",12,0);
- break;
-
- case 3 :
- LCD_Fill(90,360,190,380,WHITE);
- Show_Str(90,360,100,12,"充电宝",12,0);
- break;
-
- case 4 :
- LCD_Fill(90,360,190,380,WHITE);
- Show_Str(90,360,100,12,"手机",12,0);
- break;
-
- case 5 :
- LCD_Fill(90,360,190,380,WHITE);
- Show_Str(90,360,100,12,"笔",12,0);
- break;
-
- case 6 :
-
- break;
-
- case 7 :
-
- break;
-
- case 8 :
-
- break;
- case 9 :
- Show_Str(90,380,100,12,"提醒",12,0);
- break;
- }
-
-
-
- }
- //控制电机转动
- void StepControl(u8 f_data)
- {
- switch(f_data)
- {
- case 1 :
- Control(1);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- break;
- case 2 :
- Control(2);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- break;
- case 3 :
- Control(3);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- break;
- case 4 :
- Control(4);
- delay_ms(1000);
- delay_ms(1000);
- Control(0);
- break;
- case 5 :
- Control(5);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- break;
- case 6 :
- Control(6);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- break;
- case 7 :
- Control(7);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- break;
- case 8 :
- Control(8);
- delay_ms(1000);
- delay_ms(1000);
- Control(9);
- break;
- case 9 :
- break;
- }
- }
- //控制电机转动,定时时间到
- void ClockStepControl(u8 f_data)
- {
- switch(f_data)//k+1就是选择的盒子
- {
- case 1 :
- Control(1);
- break;
- case 2 :
- Control(2);
- break;
- case 3 :
- Control(3);
- break;
- case 4 :
- Control(4);
- break;
- case 5 :
- Control(5);
- break;
- case 6 :
- Control(6);
- break;
- case 7 :
- Control(7);
- break;
- case 8 :
- Control(8);
- break;
- case 9 :
- break;
- }
- }
- //控制电机转动,定时时间到
- void ZeroStepControl(u8 f_data)
- {
- switch(f_data)//k+1就是选择的盒子
- {
- case 1 :
- Control(0);
- break;
- case 2 :
- Control(0);
- break;
- case 3 :
- Control(0);
- break;
- case 4 :
- Control(0);
- break;
- case 5 :
- Control(9);
- break;
- case 6 :
- Control(9);
- break;
- case 7 :
- Control(9);
- break;
- case 8 :
- Control(9);
- break;
- case 9 :
- break;
- }
- }
复制代码
最终程序.7z
(1.3 MB, 下载次数: 42)
|