文档库 最新最全的文档下载
当前位置:文档库 › 基于STM32的教学楼电子打铃器课程设计

基于STM32的教学楼电子打铃器课程设计

基于STM32的教学楼电子打铃器课程设计
基于STM32的教学楼电子打铃器课程设计

工业微控制器

课程设计

题目: 教学楼电子打铃器设计

院系名称:电气工程学院

专业班级:

学生姓名:

学号:

指导教师:

目录

引言 (1)

1系统概述 (1)

1.1设计任务 (1)

1.2设计要求 (1)

2 方案设计与论证 (1)

2.1单片机芯片选择方案 (2)

2.2 作息时间控制钟系统概述 (2)

2.3设计要求: (2)

2.4单片机总体设计思路 (2)

2.5各功能模块程序实现原理分析 (3)

3 STM32性能介绍及硬件设计 (3)

3.1 STM32单片机性能介绍 (3)

3.2电子打铃系统硬件设计 (4)

4 系统程序 (8)

4.1主程序设计如下 (8)

4.2 主程序内容 (9)

4.3 定时器中断函数以及按键程序如图 (10)

5 调试仿真 (12)

心得体会 (15)

参考文献: (16)

引言

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效的方法就是理论与实践并重,本文用STM32单片机设计的一个电子打铃系统。

本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用STM32单片机,使用5V电源供电,并且在按键的作用下可以进行调时,调分,复位功能。计时数据的更新在计算机C语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。

1系统概述

1.1设计任务

用STM32设计一个教学楼电子打铃器。

1.2设计要求

(1)设置至少3种打铃模式,例如正常模式、周末模式、考试模式等;

(2)能够通过按键设置打铃时间和每种模式的打铃次数等参数;

(3)设置的参数能够掉电存储;

(4)具有LED显示接口。

2 方案设计与论证

2.1单片机芯片选择方案

stm32是一个低功耗,高性能32位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写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 按钮控制模块

四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。

3 LED模块

题目的要求只需用一个LED灯便可以显示传输是否在运行,故只接两个LED灯,LED0为显示传输是否运行的指示灯,SYS为系统是否有电源进行供电的指示灯。

3 STM32性能介绍及硬件设计

3.1 STM32单片机性能介绍

STM32它拥有的资源包括:48KB SRAM、256KB FLASH、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_UP 2,可以做待机唤醒脚(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 作用作为接 DS0 LED 灯(红色)

PA9 作用作为串口 1 TX 脚,默认连接 CH340 的 RX(P4 设置)

PA10 作用作为串口 1 RX 脚,默认连接 CH340 的 TX(P4 设置)

PA11 作用作为接 USB D-引脚

PA12 作用作为接 USB D+引脚

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.4 LED电路图如下图

图1.5 LCD外部接线图如下图

4 系统程序

4.1主程序设计如下

主程序流程设计图如下图:

图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"

extern u8 zhou,hour,min,sec;

u8 t,i,shijian=0,a=50;

u32 zcdlsj[5]={

// 30600,36000,37800,43200,52200,57600,59400,64800//′??a?y3£μ??ì?§?¥′òá?ê±??1,5,10,20,25//ò?′?5??ê±????DD·???

};

u32 zmdlsj[3]={

// 30600,43200,64800//′??a?ü???£ê???′òá?ê±??

};

u32 zcksdlsj[4]={

// 32400,39600,54000,61200//′??a??ê??£ê???′òá?ê±??

};

int main(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; }

}

}}

else if(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 定时器中断函数以及按键程序

定时器中断函数程序如下

void TIM3_IRQHandler(void) //TIM3?D??

{

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;

}

}

}

}

}

}

按键程序如下:

#define KEYzc GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)// 读取按键正常模式#define KEYks GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)// 读取按键考试模式#define KEY_ts GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)// 读取按键调节时间#define KEYzc_PRES 1 // 正常模式按下

#define KEYks_PRES 2 // 考试模式按下

#define KEY_ts_PRES 3 // 调节时间按下

void KEY_Init(void);// 初始化

u8 KEY_Scan(u8 mode); // 按键扫描函数

#endif

//KEYzc_PRES 正常模式按下

//KEYzm_PRES 周末模式按下

//KEYts_PRES 调节时间模式按下

u8 KEY_Scan(u8 mode)

{

static u8 key_up=1;// 按键按松开标志

if(mode)key_up=1; // 支持连按′

if(key_up&&(KEYzc==0||KEYks==0||KEY_ts==1))

{

delay_ms(10);// 去抖动

key_up=0;

if(KEYzc==0)return KEYzc_PRES;

else if(KEYks==0)return KEYks_PRES;

else if(KEY_ts==1)return KEY_ts_PRES;

}else if(KEY_ts==0|KEYzc==1|KEYks==1)key_up=1;

return 0;// 无按键按下

}

5 调试仿真

为保证程序的正常运行,通过软件进行仿真,由于正常情况下时间过长所以选用1s 5s 10s 20s 25s五个时间段进行模拟仿真,方便查验结果是否正确。仿真结果如下图所示:

图1.6 5s时打铃的程序程序仿真图如上图

图1.7 10s时打铃的程序仿真图如上

图1.8 20s时打铃的程序仿真图如上图

打铃时长如下图

图1.10 正常模式下打铃的时长仿真图如上图

通过仿真结果发现该程序能够按照程序预定的分别在1s 5s 10s 20s 25s进行打

铃,且打铃时间为设置的1.8s,证明该程序没有问题。

心得体会

本系统被广泛用于学校等相似的教育机构,设计比较简单。经过一学期的学习,使我对STM32有了初步的认识,了解了一些软件编程的技巧。经过这次的课程设计,使我学会了课堂上学不到的知识,颇有一番感受,对于单片机有了更深的了解,也温习了电路的基本设计思路和原理,掌握了单片机的设计步骤,知道这门课程在工作中的重要性。由于知识点不够精通,所以经常出现问题,在程序设计中出现了太多问题,但是经过仔细排查修改了错误。通过这次课程设计加深了学生对所学课程理论的理解,扩展了教学中的实验内容和要求,积累了实践体验和经验,让我们提前感受到毕业设计的大致过程,进而能顺利进入毕业设计,提高毕业设计质量和学生实际应用能力,总之还是取得了很多的经验。

参考文献:

1 《电子技术基础:模拟部分》北京高等教育出版社康华光1999

2 《基于STM32的嵌入式设计》》机械工业出版社卢有亮2014

3 《STM32库开发实战指南》机械工业出版社刘火亮2014

相关文档