基于stm32的银行排队叫号机设计

这是一篇最近做的课设,选题要求如下:

设计任务: 模拟银行排队业务, 能提供三种业务, 服务代码首字
母分别为 A、 B、 C, 要求:
1、 用按键+1 表示新增一个客户, -1 表示减少一个客户。
2、 能对三种业务排队情况分别进行统计, 例如 A 业务当前有八个客户正在等待, 液晶屏显示 A08。 客户完成服务后相应队列统计值减 1。

使用了正点原子的stm32精英板,显示用的是正点原子的ALIENTEK OLED 模块。自己又加上了正点原子的ATK-ESP8266 WIFI模块来通过手机进行控制和信息交互。
基础要求逻辑并不复杂,自己写了几个函数完成相关操作,关于OLED的使用可以到B站上找正点原子的视频看。关于WIFI模块的使用我是使用指令控制的,使用的是server模式,即WiFi模块当主机,手机为从机。这个模块有相关的资料,使用usart串口进行通信,把资料研究一下使用起来并不是很难。需要的也可以找我要。我QQ:2254786469
程序里有的东西是以前做东西剩下的,因为对本次实验无影响,我也就没删掉,希望大家不要对其感到困惑。
关于WIFI模块,主函数前面的发送的一些指令完全是初始化配置,配置模式,联网,ip地址等。我把整个工程文件也附下。以供大家有需要的参考。
难点在于WIFI模块的使用,因为没有视频讲解,大家可以右键选择点到函数的定义去研究。
我把工程文件上传了,大家可以在在到我的主页找到并免费下载。

附上一下和通过WIFI模块手机通信的图片,不好意思,发现没截屏,嘿嘿。需要详细了解的私信或者加我QQ联系我吧。

把主函数附下:

#include "sys.h"
#include "delay.h"
#include "usart.h" 
#include "led.h"
#include "oled.h"
#include "stdlib.h"
#include "lcd.h"  
#include "key.h"     
#include "usmart.h" 
#include "malloc.h"
#include "sdio_sdcard.h"
#include "ff.h"    
#include "w25qxx.h"    
#include "exfuns.h"   
#include "text.h"	
#include "touch.h"		
#include "usart3.h"
#include "common.h" 
#include "adc.h"
#include "lsens.h"
#include "timer.h"
 

 u8 a1,a2,b1,b2,c1,c2,t;	

void draw_A(u8 row){
	u8 a;
	for(a=0;a<=127;a++){
	if(a<36){
		OLED_DrawPoint(a,row,1);
	         }
	else{
		OLED_DrawPoint(a,row,0);
	}
	            }
           }
void draw_B(u8 row){
	u8 a;
	for(a=0;a<=127;a++){
    if(45<a&&a<82){
		OLED_DrawPoint(a,row,1);
	         }
	  else{
		   OLED_DrawPoint(a,row,0);
	}
	            }}
           
void draw_C(u8 row){
	u8 a;
	for(a=0;a<=127;a++){
    if(a>91){
		OLED_DrawPoint(a,row,1);
	         }
	  else{
		   OLED_DrawPoint(a,row,0);
	}
	            }				}			
void indicator(){//指示当前操作的业务,在上面画条线
 if(t==0) {
 draw_A(36);
 draw_A(37);}
 else if(t==1) {
 draw_B(36);
 draw_B(37);}
 else{
 draw_C(36);
 draw_C(37);}
}


void addition_A(){
if (a1<'9') a1++;
else {
	if (a2<'9'){
	a2++;
	a1='0';    }
	else {
		a1='0';
		a2='0';}	
}
OLED_ShowChar(24,40,a1,24,1);//显示ASCII字符
OLED_ShowChar(12,40,a2,24,1);//显示ASCII字符	   
OLED_Refresh_Gram();}
                 
void addition_B(){
if (b1<'9') b1++;
else {
	if (a2<'9'){
	b2++;
	b1='0';    }
	else {
		b1='0';
		b2='0';
	     }
	
}
OLED_ShowChar(70,40,b1,24,1);//显示ASCII字符
OLED_ShowChar(58,40,b2,24,1);//显示ASCII字符	   
OLED_Refresh_Gram();
}

void addition_C(){
if (c1<'9') c1++;
else {
	if (c2<'9'){
	c2++;
	c1='0';    }
	else {
		c1='0';
		c2='0';
	     }
	
}
OLED_ShowChar(116,40,c1,24,1);//显示ASCII字符
		OLED_ShowChar(104,40,c2,24,1);//显示ASCII字符	   
		OLED_Refresh_Gram();
}

void subtract_A(){
if (a1<'1'&& a2<'1') a1=='0';//个位十位都等于0
else {
	if (a2>'0'&& a1<'1'){//个位等于0,十位大于零
	a2--;
	a1='9';    }
	else {//都大于0或十位等于0,个位大于0
		a1--;
	     }	
      } 
OLED_ShowChar(24,40,a1,24,1);//显示ASCII字符
OLED_ShowChar(12,40,a2,24,1);//显示ASCII字符	   
OLED_Refresh_Gram();}
                 
void subtract_B(){
if (b1<'1'&& b2<'1') b1=='0';//个位十位都等于0
else {
	if (b2>'0'&& b1<'1'){//个位等于0,十位大于零
	b2--;
	b1='9';    }
	else {//都大于0或十位等于0,个位大于0
		b1--;
	     }	
      }  
OLED_ShowChar(70,40,b1,24,1);//显示ASCII字符
OLED_ShowChar(58,40,b2,24,1);//显示ASCII字符	   
OLED_Refresh_Gram();}

void subtract_C(){
if (c1<'1'&& c2<'1') c1=='0';//个位十位都等于0
else {
	if (c2>'0'&& c1<'1'){//个位等于0,十位大于零
	c2--;
	c1='9';    }
	else {//都大于0或十位等于0,个位大于0
		c1--;
	     }	
      }  
OLED_ShowChar(116,40,c1,24,1);//显示ASCII字符
		OLED_ShowChar(104,40,c2,24,1);//显示ASCII字符	   
		OLED_Refresh_Gram();}

void key_press(u8 a){
	if (a==0) ;
	else{
	 if (a==1){
	  if(t==0) addition_A();
		else if(t==1) addition_B();
		else addition_C();
		  
	         }
	 else if(a==2){
	  if(t==0) subtract_A();
		else if(t==1) subtract_B();
		else subtract_C();
		  }
	 else{//按下KEY3
	
		if(t==2) t=0;
		else t++;	
	 	 indicator();
	 OLED_Refresh_Gram();} 
	}}

	

	 
	
void mode(){
u8 s,m;
	if(USART3_RX_STA&&((int)USART3_RX_BUF[0]>0)){
			s=USART3_RX_BUF[11];
		 	m=USART3_RX_BUF[12];
if((s=='A')&&(m=='+')){addition_A();atk_8266_send_cmd("AT+CIPSEND=0,10","H",50);
		      delay_ms(100);	
			u3_printf("A排队成功\n");}
if((s=='A')&&(m=='-')){subtract_A();delay_ms(100);}
if((s=='B')&&(m=='+')){addition_B();atk_8266_send_cmd("AT+CIPSEND=0,10","H",50);
		      delay_ms(100);	
			u3_printf("B排队成功\n");}
if((s=='B')&&(m=='-')){subtract_B();delay_ms(100);}
if((s=='C')&&(m=='+')){addition_C();atk_8266_send_cmd("AT+CIPSEND=0,10","H",50);
		      delay_ms(100);	
			u3_printf("C排队成功\n");}
if((s=='C')&&(m=='-')){subtract_C();delay_ms(100);}
USART3_RX_STA=0;}}
 

 int main(void)
 {	 
		
	 

	 
	delay_init();	    	 //延时函数初始化	  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	

 	LED_Init();		  			//初始化与LED连接的硬件接口
	KEY_Init();					//初始化按键
	

	 uart_init(115200);	 	//串口初始化为115200
	usart3_init(115200);		//初始化串口3 
	TIM3_PWM_Init(899,0);	 

	Lsens_Init(); 			//初始化光敏传感?
	
	OLED_Init();			//初始化OLED      
   
	t=0;
  a1='0';
  a2='0';
	b1='0';
  b2='0';
	c1='0';
  c2='0';
	 
	 
 	OLED_ShowString(0,40,"A00",24);
	 
 	OLED_ShowString(46,40,"B00",24);  
	 
	OLED_ShowString(92,40,"C00",24);  
	
	indicator();
  
	OLED_Refresh_Gram();		//更新显示到OLED 
	 
	 
	  
		atk_8266_send_cmd("AT+CWMODE=1","H",50);
		delay_ms(700);
		USART3_RX_STA=0;
		
		atk_8266_send_cmd("AT+RST","H",50);
		delay_ms(4000);
		USART3_RX_STA=0;
		
		//atk_8266_send_cmd("AT+CWJAP=\"HQU.501\",\"1815232036\"","H",50);
		//delay_ms(5000);
		//atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"192.168.0.4\",2100","H",50);//"AT+CIPSTART=\"TCP\",\"192.168.0.4\",2100"
		//elay_ms(2000);
		
		atk_8266_send_cmd("AT+CIPMUX=1","H",50);
		delay_ms(700);
		USART3_RX_STA=0;
		atk_8266_send_cmd("AT+CIPSERVER=1,8080","H",50);
		delay_ms(700);
		USART3_RX_STA=0;
		atk_8266_send_cmd("AT+CIFSR","H",50);
		delay_ms(1500);
					
			USART3_RX_STA=0;
	
	 
	while(1){ 
		
mode();
	key_press(KEY_Scan(0));
		delay_ms(10);}
 
}

`

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值