前言
💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
资料获取
文章底部名片,详细资料联系我。
设计介绍
STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位、支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。此款控制芯片在完成单片机课程的学习后上手较为容易,在医疗器械中应用广泛,具有很好的学习、实验研究价值。
一、STM32的主要优点:
(1)使用ARM最新的、先进架构的Cortex-M3内核
(2) 优异的实时性能
(3) 杰出的功耗控制
(4) 出众及创新的外设
(5) 最大程度的集成整合
(6) 易于开发,可使产品快速将进入市场
二、STM32——最佳的平台选项
对于使用同一平台进行多个项目开发而言,STM32是最
佳的选择:
(1) 从仅需少量的存储空间和管脚应用到需要更多的存储空间和管脚的应用
(2) 从苛求性能的应用到电池供电的应用
(3) 从简单而成本敏感的应用到高端应用
(4) 全系列脚对脚、外设及软件的高度兼容性,给您带来全方位的灵活性。您可以在不必修改您原始框架及软件的条件下,将您的应用升级到需要更多存储空间或精简到使用更少存储空间/ 或改用不同的封装的规格。
功能介绍
STM32单片机银行医院柜台叫号系统语音播报26
本系统由STM32F103C8T6单片机、LCD12864液晶、语音播报、按键及电源组成。
1、本系统默认最多3个排队客户,排队客户按下取号按键后,LCD1602液晶显示取号总数(为1、2或3),
2、柜员(非VIP)按下呼叫按键后
音播报:1号到1号窗口,液晶显示1号到1号窗口。
再次按下,语音播报:2号到2号窗口,液晶显示2号到2号窗口。
再次按下语音播报,3号到3号窗口,液晶显示3号到30窗口。
如果没有取号,则不进行播报及显示,取几个号才会播报几个。
3、柜员(VIP)按下VIP呼叫按键后,语音播报:VIP到VIP窗口。
4、液晶每次只显示一个呼号信息,语音播报1次呼号信息。
设计程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
//#include "adc.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include "lcd12864.h"
unsigned char rekey = 0;//防止按键按下
unsigned char disFlag=0;//定时更新显示
unsigned char count = 0;//取号计数
unsigned char yuyinFlag = 0;//语音播报
void yyReportReadAdd(unsigned int yyAdd) ;
int main(void)
{
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
// uart2_init(9600) ;
TIM3_Int_Init(499,7199);//50ms
yy_rest=0; //yyxp(语音芯片的简写,下同)的复位脚为高电平//
delay_us(300); //持续 200us//
yy_rest=1; //然后复位脚置零//
delay_us(300);
Lcd12864_initGPIO();//初始化显示
Init_ST7920();
ClrScreen();
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
LCD_PutString(2,1,"欢迎使用",8);
LCD_PutString(0,2,"取号:00",8);
LCD_PutString(0,3,"窗口空闲",8);
LCD_PutString(0,4,"窗口空闲",8);
delay_ms(1000);
while(1)
{
if(disFlag==1) //显示
{
disFlag = 0;
if(count == 1)//显示取号
{
LCD_PutString(0,2,"取号:01",8);
}
else if(count == 2)
{
LCD_PutString(0,2,"取号:02",8);
}
else if(count == 3)
{
LCD_PutString(0,2,"取号:03",8);
}
}
if((key1==0)||(key2==0)||(key3==0)) //检测到按键按下
{
if(rekey == 0)//防止重复按下
{
delay_ms(10);
if(key1==0)//确认按键按下
{
rekey =1;
if(count < 3)
count++;
}
else if (key2==0)//数值按键处理
{
rekey =1;
if(yuyinFlag < count)//语音播报小于取号数
{
yuyinFlag++;//语音播报标志
if(yuyinFlag == 1)
{
LCD_PutString(0,3,"请01号到01号窗口",16);
yyReportReadAdd(89);//播报地址语音
}
else if(yuyinFlag == 2)
{
LCD_PutString(0,3,"请02号到02号窗口",16);
yyReportReadAdd(90);//播报地址语音
}
else if(yuyinFlag == 3)
{
LCD_PutString(0,3,"请03号到03号窗口",16);
yyReportReadAdd(91);//播报地址语音
}
}
}
else if (key3==0) //出水按键
{
rekey =1;
LCD_PutString(0,4,"请VIP 到 VIP窗口",16);
yyReportReadAdd(99);//播报地址语音//**All notes can be deleted and modified**//
}
}
}
else
{rekey =0 ;} //防止重复按下
}
}
void yyReportReadAdd(unsigned int yyAdd) //语音播报地址
{
yy_rest=0; //yyxp(语音芯片的简写,下同)的复位脚为高电平//
delay_us(300); //持续 200us//
yy_rest=1; //然后复位脚置零//
delay_us(300);
yy_rest=0; //yyxp(语音芯片的简写,下同)的复位脚为高电平//
delay_us(300); //持续 200us//
yy_rest=1; //然后复位脚置零//
delay_us(300);
while(yyAdd>0) //若 等于 0 则不工作,若大于 0 则继续自减//
{
yy_data=0; //data 脚位为高电平//
delay_us(300); //持续 100us//
yy_data=1; //然后置零//
delay_us(300); //持续 100us 这三句的意思就是发从一个 100us 的脉冲(高低各 100us)//
yyAdd--; //z 自减完成后开始播放对应的语音(因为 z 是几就播放第几段)//
}
delay_ms(5);
}
具体实现截图
设计获取
文章下方名片联系我即可~
精彩专栏推荐订阅:在下方专栏👇🏻
毕业设计精品实战案例
收藏关注不迷路!!
🌟文末获取设计🌟