基于STM32单片机的语音IC卡停车管理系统

1、系统功能介绍

  • 1.在welcome界面,放置IC卡,此时会开始记录停车时间
  • 2.按下KEY1按键,会提示放置IC卡,放置IC卡后,会进入扣费界面(系统会根据程序中设置的单价与停车时间进行计算,之后扣费)
    • 2.1 扣费成功:记录时间清零
    • 2.2 扣费失败:语音提示余额不足,此时停车时间继续记录
  • 3.按下KEY0按键,会提示放置IC卡,放置IC卡后,会显示当前余额。
    • 3.1 在此界面按下KEY0,余额每次增加10
    • 3.2 在此界面按下KEY1,余额每次减104.KEY2按键时退出按键
  • 5.系统会语音提示"欢迎停车"、“请放置IC卡”、"余额不足"等语音信息

2、资料下载

3、系统电路介绍

3.1、STM32单片机最小系统设计

  • STM32的最小系统的硬件组成主要有:电源电路、复位电路、时钟电路、调试接口电路、启动电路。

  • 电源 : 一般是3.3V输入作为STM32芯片的工作电压,实际中很多采用LDO将5V转换为3.3V进行供电,另外电路上还要加多个0.01uf去耦电容对输入电压进行滤波,稳定输入电压。

  • 复位:STM32中有三种复位方式,分别为:上电复位、手动复位、程序自动复位。上电复位是指芯片根据外部搭建的复位电路,在上电的时候进行的复位;手动复位是指通过外部的复位电路自己手动进行复位;程序复位是在软件中通过代码对STM32芯片进行的复位。

  • 单片机最小系统电路图如下图所示

  • 实物图:

3.2、RC522 RFID射频电路设计

  • RC522 刷卡模块是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员,是NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片。

  • RC522模块(射频读写器)向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在这个电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接受读写器的数据。

  • 电路原理图

  • 实物图

3.3、OLED显示电路设计

  • OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

  • 该模块采用8*2的2.52排针与外部连接,总共16个管脚,在16条线中,我们只用了15条,有一条是悬空的。15条线中,电源和地线占了2条,还剩下13条信号线。在不同的模式下,需要的信号线的数目是不同的,在8080模式下,需要全部的13条。

  • OLED控制器为SSD1306,也就是说:裸屏由SSD1306驱动,这也是一种较为广泛使用的led驱动芯片。

  • OLED显示电路设计如下图所示:

  • 实物图:

3.4、语音播报电路设计

  • TTS(Text-to-Speech)是一种将文本内容转换成语音的技术。它允许计算机能够将书面文字转换为可听的人类语音,从而为用户提供更多选择和灵活性。TTS技术采用自然语言处理、数字信号处理和语音合成等技术,将电子文字转化为口头发音,并通过扬声器、耳机或其他设备播放出来。

  • 电路原理图:

  • 实物图:

4、程序设计

4.1、系统初始化

//=========================================================
//	函数名称:	DeviceInit
//
//	函数功能:	初始化设备
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void DeviceInit(void) {
	uart_init(115200);	//波特率115200  串口1调试使用
	
	//语音使用到的功能模块
	usart3_init(9600);	//初始化串口2为:9600,波特率.  
	
	//定时播种使用
	TIM2_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms   

  //按键初始化
  KEY_Init();

	//OLED初始化
	I2C_Configuration();		
	OLED_Init();
	OLED_Fill(0x00);//全屏灭
	OLED_ShowStr(30,3,"Welcome",2);	
  
  //RC522初始化
  Rc522IoInit();
  PcdReset();//复位RC522
  PcdAntennaOn();//开启天线发射 
  
  //参数初始化
  DeviceParamInit(&device);
  printf("init ok----\r\n");
	
}

4.2、程序运行函数

//=========================================================
//	函数名称:	DeviceRun
//
//	函数功能:	系统运行函数
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		 
//==========================================================
void DeviceRun(void) {

  DeviceReadICCard(&device);
  DeviceGetKey(&device);
  DeviceICChongzhi(&device);
  DeviceICKouFei(&device);
  DeviceWelcome(&device);
}

4.3、获取IC卡号

//==========================================================
//	函数名称:	ReadICCard
//
//	函数功能:	 读取IC卡的卡号
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		
//==========================================================
static bool DeviceReadICCard(Device *c_this) {
  
    if(PcdRequest(0x52, c_this->temp_)==MI_OK) {  //读取到卡
      if(PcdAnticoll(c_this->uid_)==MI_OK) {      //卡号获取成功
        if(((c_this->uid_[0] == c_this->ic_card_[c_this->ic_num].idCard[0]) && (c_this->uid_[2] == c_this->ic_card_[c_this->ic_num].idCard[2]) && c_this->uid_[1] == c_this->ic_card_[c_this->ic_num].idCard[1])) {//匹配卡号
            if(c_this->jiemian_ != 0) {
              c_this->ic_card_[c_this->ic_num].is_read_ = 1;
              OLED_CLS();
            } else {
              if(c_this->ic_card_[c_this->ic_num].time_start_ == 0) {
                //语音播报 欢迎停车
                u3_printf("欢迎停车\r\n");
              }
              c_this->ic_card_[c_this->ic_num].time_start_ = 1;
            }
          return true;
        }
      }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值