提示:记录2022年4月做的毕设4
基于STM32的智能点餐系统,主控使用STM32F103C8T6核心板
系统启动后,会有“MyPro”这个WiFi,用手机网络助手连接上,
ip地址:192.168.1.1 ,端口8080
引脚连接:
ESP8266: EN B0
RST B1
RX B10
TX B11
OLED: D0 PA5(SCL1)
D1 PA7(SDA1)
RES PB7
DC PA4
CS PA6
//前台代码
int main(void)
{
while(1)
{
while(systeminit)
{
//OLED_Clear();
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES:
OLED_Clear();
table();
table_num++;
break;
case KEY2_PRES:
OLED_Clear();
table_num--;
table();
break;
case KEY1_PRES:
systeminit=0;
OLED_ShowString(20,6,"Waiting...",16);
delay_ms(1000);
OLED_Clear();
show_page1();
break;
case KEY0_PRES:
break;
}
}
else delay_ms(2);
}
/*****************************************************/
//以下是选菜界面
/*****************************************************/
while(!systeminit)
{
key3=Yu_Scan(0); //得到键值
if(key3)
{
switch(key3)
{
case YuYin1_PRES:
send_dat(1);
food1++;
break;
case YuYin2_PRES:
send_dat(2);
food2++;
break;
case YuYin3_PRES:
send_dat(3);
food3++;
break;
case YuYin4_PRES:
send_dat(4);
food4++;
break;
case YuYin5_PRES:
send_dat(5);
food5++;
break;
case YuYin6_PRES:
send_dat(6);
food6++;
break;
}
}
else delay_ms(1);
/*****************************************************/
//以下是更新数量,标题,价格
/*****************************************************/
if(!jiezhang)
{
show_caption();
switch(page)
{
case 1:
OLED_ShowNum(74,3,food1,1,16);
OLED_ShowNum(74,6,food2,1,16);
OLED_ShowNum(110,3,food1_m,2,16);
OLED_ShowNum(110,6,food2_m,2,16);
break;
case 2:
OLED_ShowNum(74,3,food3,1,16);
OLED_ShowNum(74,6,food4,1,16);
OLED_ShowNum(110,3,food3_m,2,16);
OLED_ShowNum(110,6,food4_m,2,16);
break;
case 3:
OLED_ShowNum(74,3,food5,1,16);
OLED_ShowNum(74,6,food6,1,16);
OLED_ShowNum(110,3,food5_m,2,16);
OLED_ShowNum(110,6,food6_m,2,16);
break;
}
}
/*****************************************************/
//以下是按键
/*****************************************************/
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES:
if(page==1)
{
switch(choose)
{
case 1 :
food1++;
send_dat(1);
//ESP8266_SendString ( DISABLE, send_str1, strlen ( send_str1 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food2++;
send_dat(2);
//ESP8266_SendString ( DISABLE, send_str2, strlen ( send_str2 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==2)
{
switch(choose)
{
case 1 :
food3++;
send_dat(3);
//ESP8266_SendString ( DISABLE, send_str3, strlen ( send_str3 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food4++;
send_dat(4);
//ESP8266_SendString ( DISABLE, send_str4, strlen ( send_str4 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==3)
{
switch(choose)
{
case 1 :
food5++;
send_dat(5);
//ESP8266_SendString ( DISABLE, send_str5, strlen ( send_str5 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food6++;
send_dat(6);
//ESP8266_SendString ( DISABLE, send_str6, strlen ( send_str6 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
break;
case KEY2_PRES:
if(page==1)
{
switch(choose)
{
case 1 :
food1--;
send_dat(7);
//ESP8266_SendString ( DISABLE, send_str7, strlen ( send_str7 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food2--;
send_dat(8);
//ESP8266_SendString ( DISABLE, send_str8, strlen ( send_str8 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==2)
{
switch(choose)
{
case 1 :
food3--;
send_dat(9);
//ESP8266_SendString ( DISABLE, send_str9, strlen ( send_str9 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food4--;
send_dat(10);
//ESP8266_SendString ( DISABLE, send_str10, strlen ( send_str10 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==3)
{
switch(choose)
{
case 1 :
food5--;
send_dat(11);
//ESP8266_SendString ( DISABLE, send_str11, strlen ( send_str11 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food6--;
send_dat(12);
//ESP8266_SendString ( DISABLE, send_str12, strlen ( send_str12 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
break;
case KEY1_PRES:
page++;
if(page>3)page=1;
if(page==1)
{
show_page1();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
break;
}
else if(page==2)
{
show_page2();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
else if(page==3)
{
show_page3();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
break;
case KEY0_PRES:
page--;
if(page<1)page=3;
if(page==3)
{
show_page1();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
break;
}
else if(page==2)
{
show_page2();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
else if(page==3)
{
show_page3();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
break;
}
}
else delay_ms(2);
/*****************************************************/
//以下是按键
/*****************************************************/
key2=KEY_Scan2(0); //得到键值
if(key2)
{
switch(key2)
{
case WKUPUP_PRES:
choose++;
if(choose>2)choose=1;
switch(choose)
{
case 1 :
OLED_Clear();
if(page==1)show_page1();
else if(page==2)show_page2();
else if(page==3)show_page3();
OLED_ShowString(106,3,"*",16);
break;
case 2 :
OLED_Clear();
if(page==1)show_page1();
else if(page==2)show_page2();
else if(page==3)show_page3();
OLED_ShowString(106,6,"*",16);
break;
}
break;
case KEY22_PRES:
jiezhang=1;
if(jiezhang)
{
OLED_Clear();
show_page4();
LED_F=1;
delay_ms(1000);delay_ms(1000);
LED_F=0;
}
break;
case KEY11_PRES:
OLED_Clear();
table();
food1=0;food2=0;food3=0;food4=0;food5=0;food6=0;
jiezhang=0;
table_num=1;
systeminit=1;
break;
case KEY00_PRES:
LED=!LED;
break;
}
}
else delay_ms(2);
/*****************************************************/
//以下是ESP8266向PC发送数据,每1s发送一次
/*****************************************************/
if(esp_flag==1)
{
esp_flag=0;
//LED=!LED;
//类似于c语言中向屏幕打印的printf
//这里是将第二、三个参数打印到第一个参数的字符串中
ESP8266_SendString ( DISABLE, send_str, strlen ( send_str ), ( ENUM_ID_NO_TypeDef ) 0 );
}
/*****************************************************/
//以下是接收ESP8266数据
/*****************************************************/
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
revStr=strEsp8266_Fram_Record .Data_RX_BUF;
if(strstr(revStr, ":c"))
continue;
strtok(revStr, ":");
revStr=strtok(NULL, ":");
// 这里判断缓存内
if(revStr!=NULL)
{
if(*revStr=='M')
{
OLED_Clear();
food1_change=!food1_change;
show_page1();
}
else if(*revStr=='N')
{
OLED_Clear();
food2_change=!food2_change;
show_page1();
}
}
}
}
}
void show_caption(void)
{
//名称、数量、价格
OLED_ShowCHinese(2,0,46);
OLED_ShowCHinese(18,0,47);
OLED_ShowCHinese(48,0,48);
OLED_ShowCHinese(64,0,49);
OLED_ShowCHinese(96,0,44);
OLED_ShowCHinese(112,0,45);
}
void Show_Chinese(void)
{
OLED_ShowCHinese(0,3,8);
OLED_ShowCHinese(18,3,11);
OLED_ShowCHinese(64,3,9);
OLED_ShowCHinese(82,3,11);
OLED_ShowCHinese(0,6,10);
OLED_ShowCHinese(18,6,11);
OLED_ShowCHinese(64,6,12);
OLED_ShowCHinese(82,6,13);
}
void show_page1()
{
OLED_Clear();
show_caption();
//鱼香肉丝/麻婆豆腐
if(food1_change>=1)
{
OLED_ShowCHinese(0 ,3,8);
OLED_ShowCHinese(18,3,9);
OLED_ShowCHinese(36,3,10);
OLED_ShowCHinese(54,3,11);
}
else
{
OLED_ShowCHinese(0 ,3,34);
OLED_ShowCHinese(18,3,35);
OLED_ShowCHinese(36,3,36);
OLED_ShowCHinese(54,3,37);
}
//辣子鸡丁/红烧茄子
if(food2_change>=1)
{
OLED_ShowCHinese(0 ,6,12);
OLED_ShowCHinese(18,6,13);
OLED_ShowCHinese(36,6,14);
OLED_ShowCHinese(54,6,15);
}
else
{
OLED_ShowCHinese(0 ,6,40);
OLED_ShowCHinese(18,6,41);
OLED_ShowCHinese(36,6,42);
OLED_ShowCHinese(54,6,43);
}
}
void show_page2()
{
OLED_Clear();
show_caption();
OLED_ShowCHinese(0 ,3,16);
OLED_ShowCHinese(18,3,17);
OLED_ShowCHinese(36,3,18);
OLED_ShowCHinese(54,3,19);
OLED_ShowCHinese(0 ,6,20);
OLED_ShowCHinese(18,6,21);
OLED_ShowCHinese(36,6,22);
OLED_ShowCHinese(54,6,23);
}
void show_page3()
{
OLED_Clear();
show_caption();
OLED_ShowCHinese(0 ,3,24);
OLED_ShowCHinese(18,3,25);
OLED_ShowCHinese(36,3,26);
OLED_ShowCHinese(54,3,27);
OLED_ShowCHinese(0 ,6,28);
OLED_ShowCHinese(18,6,29);
OLED_ShowCHinese(36,6,30);
OLED_ShowCHinese(54,6,31);
}
void show_page4()
{
OLED_Clear();
//点餐系统
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,1);
OLED_ShowCHinese(96,0,6);
OLED_ShowCHinese(112,0,7);
//x号总价
OLED_ShowNum(2,3,table_num,3,16);
OLED_ShowCHinese(32,3,39);
OLED_ShowCHinese(50,3,32);
OLED_ShowCHinese(68,3,33);
OLED_ShowString(94,3,":",16);
count = food1*food1_m + food2*food2_m + food3*food3_m + food4*food4_m + food5*food5_m + food6*food6_m;
OLED_ShowNum(84,3,count,4,16);
}
void table()
{
//点餐系统
OLED_Clear();
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,1);
OLED_ShowCHinese(96,0,6);
OLED_ShowCHinese(112,0,7);
OLED_ShowCHinese(20,3,38);
OLED_ShowCHinese(40,3,39);
OLED_ShowNum(80,3,table_num,4,16);
}
//联系我
//承接stm32单片机、STC系列单片机设计、嵌入式
//问题联系QQ:2424644692
//某宝店铺,搜:“晖亿科创”
链接: 提取码:vqv0