(末尾附文件)
3.1系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机电路+RFID模块电路+蜂鸣器报警电路+LCD1602液晶显示电路+电源电路组成。
1、RFID卡刷卡一次,液晶5秒倒计时,再刷卡一次,增加5秒倒计时,一共可以刷5次。
2、时间到,蜂鸣器长鸣报警。
3.1.2系统总体结构
本系统具体框图如下图所示:
模块电路的设计
3.2.1 STC89C52单片机核心系统电路设计
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
一、STC89C52主要特性如下:
(1)8K字节程序存储空间;
(2)512字节数据存储空间;
(3)内带4K字节EEPROM存储空间;
(4)可直接使用串口下载。
二、STC89C52主要参数如下:
(1)增强型8051单片机,6时钟/机器周期和12 时钟/机器周期可以任意选择,指令代码完全兼容传统8051;
(2)工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机);
(3)工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作 频率可达48MHz;
(4)用户应用程序空间为8K字节;
(5)片上集成512 字节RAM;
(6)通用I/O 口(32个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O口用时,需加上拉电阻;
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片;
(8)具有EEPROM功能;
(9)共3个16 位定时器/计数器。即定时器T0、T1、T2;
(10)外部中断4路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒;
(11)通用异步串行口(UART),还可用定时器软件实现多个UART;
(12)工作温度范围:-40~+85℃(工业级)/0~75℃(商业级);
(13)PDIP封装。
三、STC89C52单片机相关引脚说明:
(1)VCC:供电电压。
(2)GND:接地。
(3)P3.0 RXD(串行输入口)
(4)P3.1 TXD(串行输出口)
(5)P3.2 /INT0(外部中断0)
(6)P3.3 /INT1(外部中断1)
(7)P3.4 T0(记时器0外部输入)
(8)P3.5 T1(记时器1外部输入)
(9)P3.6 /WR(外部数据存储器写选通)
(10)P3.7 /RD(外部数据存储器读选通)
(11)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(12)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
(13)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(14)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(15)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
(16)XTAL2:来自反向振荡器的输出。
LCD1602液晶显示模块电路设计
LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。
一、LCD1602主要技术参数如下:
(1)显示容量为16×2个字符;
(2)芯片工作电压为4.5~5.5V;
(3)工作电流为2.0mA(5.0V);
(4)模块最佳工作电压为5.0V;
(5)字符尺寸为2.95×4.35(W×H)mm。
二、LCD1602采用标准的14脚,其接口的引脚说明如下:
(1)第1脚:VSS为地电源。
(2)第2脚:VDD接5V正电源。
(3)第3脚:V0为液晶显示器对比度调整端。
(4)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
(5)第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
(6)第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
(7)第7~14脚:D0~D7为8位双向数据线。
(8)第15~16脚:空脚
蜂鸣器报警电路(低电平有效)设计
有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012来驱动,只要单片机控制引脚为低电平,蜂鸣器就会鸣叫报警,反之则不鸣叫,可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。电阻为限流电阻,保护作用。
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include
#include
#include "delay.h"
#include "rc522.h"
#include "1602.h"
sbit buzzer =P1^1; //引脚定义
/********************/
unsigned char cardTab[4]={0x52,0x80,0xe3,0x73}; //该出修改有效卡ID号
/********************/
unsigned char UID[5]; //暂存卡号
unsigned char Temp[4] ; //中间变量
unsigned long time_20ms; //定时计数
char dis0[16]; //显示数组变量
bit disFlag; //显示更新标志
unsigned int timelater =0; //时间延时计数
unsigned char timesNum =0; //防止抖动计数
unsigned char startFlag = 0; //开始计数标志
void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void main (void)
{
Init_Timer0(); //定时器0初始化
UART_Init();
LCD_Init(); //初始化液晶
buzzer = 0;
DelayMs(200); //延时有助于稳定
buzzer = 1;
LCD_Clear();
LCD_Write_String(0,0,"My Designer !");//显示第一行
uartSendStr("ready ok!",9);
PcdReset();//复位RC522
PcdAntennaOn();//开启天线发射
timesNum = 3;
while (1) //主循环
{
if(PcdRequest(0x52,Temp)==MI_OK)
{
if(PcdAnticoll(UID)==MI_OK)
{
uartSendByte(0x00);
uartSendStr(UID,4);//上报卡号
uartSendByte(0x00);
if((UID[0]==cardTab[0])&&(UID[1]==cardTab[1])) //确定卡 通过
{
if(timesNum>2) //防止抖动大于1s后刷卡有效
{
startFlag++; //开始计数
if(startFlag<6) //开始计数标志最多计数5次
{
timelater=timelater+5;//时间延时
}
buzzer =0; //刷卡成功标志
DelayMs(10);
buzzer =1;
timesNum = 0; //清楚消抖计数
}
}
}
}
if(disFlag == 1) //定时更新显示
{
sprintf(dis0,"Time:%02d s",timelater);//打印要显示的数据
LCD_Write_String(0,1,dis0);//显示第二行
disFlag = 1; //清除标志
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
time_20ms++;
if(time_20ms%10==0) //定时显示
{disFlag =1;timesNum++;}
if(time_20ms%48==0) //1s定时
{
if(startFlag != 0) //刷卡成功标志
{
if(timelater>0) //延时计数时间--
{timelater--;}
else
{buzzer=0;startFlag=0;} //时间到进入下次循环
}
}
}
.
链接:https://pan.baidu.com/s/1BfuZgerapvL-UCI2p65hGg
提取码:dd93
.