基于单片机的教室电子打铃器
1、设计方案
1.1设计任务要求
要求按学校上下课铃响铃次序设计电子打铃器。其中,上下课作息表如下:
表1.1教室作息表 | |
---|---|
内容 | 时间 |
第1节课 | 8:00-8:45 |
第2节课 | 8:55-9:40 |
第3节课 | 10:00-10:45 |
第4节课 | 10:55-11:40 |
第5节课 | 2:30-3:15 |
第6节课 | 3:25-4:10 |
第7节课 | 4:30-5:15 |
第8节课 | 5:25-6:10 |
1.2设计方案选择
该电子自动打铃器的单片机外设框图如下,它主要包含了单片机最小系统、LCD1602、按键驱动、蜂鸣器驱动以及DS1302实时时钟等。
3. 硬件设计
3.1仿真部分
3.1.1 AT89C51单片机最![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/05d216e6f294ffab8f84bcc6db5c990a.png)
3.2 DS1302时钟电路
3.3 LCD1602显示电路
3.2 PCB设计
4. 部分代码
main.c
#include "lcd1602.h"
#include "DS1302.h"
#include "key.h"
#define uint unsigned int
#define uchar unsigned char
sbit LED0=P2^0;
int run_end_flag=0;
extern struct ds1302_ ds1302_data;
// 8:00 8:55 10:00 10:55 3:00 3:55 5:00 5:55
unsigned char code alarmTime[8][3] = {
{0x08,0x00,0x00},
{0x08,0x55,0x00},
{0x10,0x00,0x00},
{0x10,0x55,0x00},
{0x15,0x00,0x00},
{0x15,0x55,0x00},
{0x17,0x00,0x00},
{0x17,0x55,0x00}
}; //存储每节课打铃时间
unsigned char currentLesson = 0; // 当节课索引
int key_FLAG=0;
char page_FLAG=0;
void main()
{
BUZZ=1;
IE=0x81;
led=0;
init();
DS1302_Init();
delay(3);
DS1302_Write_Reg(0x8e,0X00);
delay(3);
DS1302_Write_Reg(0x80,0x55);
delay(3);
DS1302_Write_Reg(0x82,0x59);
delay(3);
DS1302_Write_Reg(0x84,0x07);
delay(3);
clear_lcd();
while(1)
{
// BUZZ=!BUZZ;
if(key_page_change==0)
{
delay(2);
if(key_page_change==0)
{
clear_lcd();
page_FLAG=!page_FLAG;
while(key_page_change==0);
}
}
if(page_FLAG==0)
{
DisplayTime();
ring_flag=judge_ring(ds1302_data.hour,ds1302_data.minute,ds1302_data.second);
if(ring_flag&&run_end_flag==0)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
}
else
{
SET_PARA_page();
}
// LED0=!LED0;
delay(1);
}
}
char judge_ring(u8 hour,u8 min,u8 sec)
{
int i=0;
for(;i<8;i++)
{
if(hour==alarmTime[i][0]&&min==alarmTime[i][1]&&sec<0x10)
{
run_end_flag=0;
return 1;
}
}
return 0;
}
int cnt=0;
int ring_cnt=0;
void ring_isr(void ) interrupt 1
{
cnt++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(cnt==3)
{
BUZZ=~BUZZ;
ring_cnt++;
cnt=0;
if(ring_cnt>4)
{
run_end_flag=1;
BUZZ=0;
ring_cnt=0;
TR0=0;
}
}
}
4.实物测试效果
上电测得,实时日期时间显示如下:
当实时时间到达下课时间,蜂鸣器部分便会发出声响,至此课设完成。