基于STM32的教学楼电子打铃器课程设计.docx
《基于STM32的教学楼电子打铃器课程设计.docx》由会员分享,可在线阅读,更多相关《基于STM32的教学楼电子打铃器课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
![基于STM32的教学楼电子打铃器课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/17/3c30f07d-97f1-48a1-a768-2a588d817724/3c30f07d-97f1-48a1-a768-2a588d8177241.gif)
基于STM32的教学楼电子打铃器课程设计
工业微控制器
课程设计
题目:
教学楼电子打铃器设计
院系名称:
电气工程学院
专业班级:
学生姓名:
学号:
指导教师:
成绩:
指导老师签名:
日期:
引言
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效的方法就是理论与实践并重,本文用STM32单片机设计的一个电子打铃系统。
本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用STM32单片机,使用5V电源供电,并且在按键的作用下可以进行调时,调分,复位功能。
计时数据的更新在计算机C语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。
1系统概述
1.1设计任务
用STM32设计一个教学楼电子打铃器。
1.2设计要求
(1)设置至少3种打铃模式,例如正常模式、周末模式、考试模式等;
(2)能够通过按键设置打铃时间和每种模式的打铃次数等参数;
(3)设置的参数能够掉电存储;
(4)具有LED显示接口。
2方案设计与论证
2.1单片机芯片选择方案
stm32是一个低功耗,高性能32位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器。
主要性能有:
与MCS-51单片机产品兼容、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。
2.2作息时间控制钟系统概述:
本设计是一个具有打铃功能的作息时间控制钟。
它利用STM32单片机的自带的时基计时,进行年历计算,并用的蜂鸣器驱动模块将它打出来;在进行时间计算,分每加一时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。
由七段显示驱动模块、蜂鸣器驱动模块和按钮控制模块三部分组成,四个按键用于报时及校正时间。
现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。
本设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。
2.3设计要求:
①利用单片机组成一个电子打铃器。
②按照学校上下课铃声次序设定定时间
③用一个蜂鸣器模拟电铃,正常模式和周末模式响铃1.8s考试模式时响铃3.6s。
④通过LED可以正常显示
2.4单片机总体设计思路
(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘
(2)进行软件设计,利用单片机的系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;
(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能;
(4)设计打铃执行机构,完成自动打铃功能。
2.5各功能模块程序实现原理分析
该模块由蜂鸣器驱动模块,LED模块和按钮控制模块组成。
且都通过STM32来实现。
1蜂鸣器驱动模块
采用压电式蜂鸣器,压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
2按钮控制模块
四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。
3LED模块
题目的要求只需用一个LED灯便可以显示传输是否在运行,故只接两个LED灯,LED0为显示传输是否运行的指示灯,SYS为系统是否有电源进行供电的指示灯。
3STM32性能介绍及硬件设计
3.1STM32单片机性能介绍
STM32它拥有的资源包括:
48KBSRAM、256KBFLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口及51个通用IO口,该芯片性价比极高。
各个引脚说明如下
PA0作用1,按键KEY_UP2,可以做待机唤醒脚(WKUP)3,可以接DS18B20传感器接口(P2设置)
PA1作用1,NRF24L01接口IRQ信号2,接HS0038红外接收头(P2设置)
PA2作用作为W25Q64的片选信号
PA3作用作为SD卡接口的片选脚
PA4作用作为NRF24L01接口的CE信号
PA5作用作为W25Q64、SD卡和NRF24L01接口的SCK信号
PA6作用作为W25Q64、SD卡和NRF24L01接口的MISO信号
PA7作用作为W25Q64、SD卡和NRF24L01接口的MOSI信号
PA8作用作为接DS0LED灯(红色)
PA9作用作为串口1TX脚,默认连接CH340的RX(P4设置)
PA10作用作为串口1RX脚,默认连接CH340的TX(P4设置)
PA11作用作为接USBD-引脚
PA12作用作为接USBD+引脚
PA13作用作为JTAG/SWD仿真接口,没接任何外设
PA14作用作为JTAG/SWD仿真接口,没接任何外设
PA15作用作为1,JTAG仿真口(JTDI)2,PS/2接口的CLK信号3,接按键KEY1
3.2电子打铃系统硬件设计
该程序所需要的主电路图,蜂鸣器电路图,电源电路图以及LED电路图以及LCD外部接线图依次如下图所示
图1.1主电路图如下图
图1.2蜂鸣器电路图如下图
图1.3电源电路图如下图
图1.4LED电路图如下图
图1.5LCD外部接线图如下图
4系统程序
4.1主程序设计如下
主程序流程设计图如下图:
YN
NY
图1.5主程序流程设计图
如图1.5所示主程序开始初始化后,如没有按键按下时,则为正常模式,,继续向下执行对打铃时间的比较,时间正确的话则打铃1.8s;若有按键按下;再次判断是否为考试模式,是则向下进行时间比较,时间正确则打铃3.6s;若判断非考试模式则为周末模式,周末模式打铃1.8s。
继而循环,并再次执行主程序。
4.2主程序内容
#include"led.h"
#include"delay.h"
#include"sys.h"
#include"usart.h"
#include"lcd.h"
#include"timer.h"
#include"key.h"
externu8zhou,hour,min,sec;
u8t,i,shijian=0,a=50;
u32zcdlsj[5]={
//30600,36000,37800,43200,52200,57600,59400,64800//´ËΪÕý³£µÄ½Ìѧ¥´òÁåʱ¼ä
1,5,10,20,25//ÒÔ´Ë5¸öʱ¼ä½øÐзÂÕæ
};
u32zmdlsj[3]={
//30600,43200,64800//´ËΪÖÜĩģʽÏ´òÁåʱ¼ä
};
u32zcksdlsj[4]={
//32400,39600,54000,61200//´ËΪ¿¼ÊÔģʽÏ´òÁåʱ¼ä
};
intmain(void)
{delay_init();
LED_Init();
KEY_Init();
LED1=0;
TIM3_Int_Init(10000,7199);
while
(1)
{
t=KEY_Scan(0);
if(t==KEY_ts_PRES)
{a=100;
}
if(t==KEYzc_PRES)
{if(zhou<=5)
{shijian=(hour*60*60+min*60+sec);
for(i=0;i<=4;i++)
{if(shijian==zcdlsj[i])
{
PDout
(2)=1;
delay_ms(a*10);
delay_ms(a*10);
delay_ms(a*10);
PDout
(2)=0;
}}}
else
{shijian=(hour*60*60+min*60+sec);
for(i=0;i<=2;i++)
{if(shijian==zczmdlsj[i])
{
PDout
(2)=1;
delay_ms(a*10);
delay_ms(a*10);
delay_ms(a*10);
PDout
(2)=0;}
}
}}
elseif(t==KEYks_PRES)
{
shijian=(hour*60*60+min*60+sec);
for(i=0;i<=3;i++)
{if(shijian==ksdlsj[i])
{
PDout
(2)=1;
delay_ms(a*10);
delay_ms(a*10);
delay_ms(a*10);
PDout
(2)=0;}
}}
}
4.3定时器中断函数以及按键程序
定时器中断函数程序如下
voidTIM3_IRQHandler(void)//TIM3ÖжÏ
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!
=RESET)
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
sec++;
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
min=0;
hour++;
if(hour>=24)
{
hour=0;
zhou++;
if(zhou>=7)
{
zhou=1;
}
}
}
}
}
}
按键程序如下:
#defineKEYzcGPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//读取按键正常模式
#defineKEYksGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//读取按键考试模式
#defineKEY_tsGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键调节时间
#defineKEYzc_PRE