基于AT89C51单片机智能小区电子门控制系统的设计

收藏和点赞,您的关注是我创作的动力

概要

  主要论述了智能小区电子门控制系统的基本原理、结构和设计过程。按照经济实用的原则,以每单元8户的标准,对智能小区电子门控制系统进行设计,系统主要包括处理器、访客端和住户端三大部分。控制系统的微处理器采用单片机,具体型号为Atmel公司的AT89C51。系统按模块化的思想进行设计,设计了访客端键盘部分、住户端键盘部分、音频电路部分,电源电路部分、继电器驱动部分和单片机复位部分。在本系统中,采用可编程并行接口芯片8255A对单片机进行I/O口的扩展,以满足系统众多接口的需要。设计中,每个住户端都配备通话键、开门键、麦克风和扬声器,访客端配备8个访问按钮、扬声器和麦克风,使住户可以与访客进行简单的交流,以方便住户确认访客的身份,这样的设计可以满足简单实用性的要求。
关键字:电子门;单片机;控制系统

一、硬件电路设计

1硬件电路整体结构

在这里插入图片描述

图2-1 硬件电路整体结构框图
  在本设计中,按照设计的要求,遵循经济使用的原则,首先对系统进行整体结构的设计。
  首先,根据设计要求并结合实际,确定系统主要有四大部分组成,即住户端、微处理器、访客端和电源电路。
  系统的核心部分为微处理器,主要负责处理各种请求信号,控制系统的各种操作,实现系统的正常功能。在本设计中采用AT89C51单片机实现处理功能。
访客端电路用于访客向住户发出访问请求,并进行语音的交流,以便表明身份活得住户的进入允许。主要包括对应于各个住户的访问请求按钮、麦克风和扬声器。其中按钮部分用于发送访问信号到对应的住户,麦克风和扬声器用于和住户的信息交流。
  电源电路部分主要为整个系统提供电源。系统在设计上采用220V AC输入,经过系统内部的降压、整流、稳压和滤波等环节后供给整个系统使用,保证系统的正常运行。

2 电源部分设计

  电源是各种电子设备必不可少的重要组成部分。单片机系统一般需要一个稳定的工作电压才能可靠工作,其性能的优劣直接关系到整个电子系统的可靠性和稳定性,以及电磁兼容性。
在本系统中,AT89C51单片机需要的供电电源是5V,通话电路需要的电源是12V。在对电源进行设计时,主要是针对这两种电压来设计。
  系统电源由交流220V转变而来,在本设计中采用线性稳压器件(78XX系列的线性稳压器件),实现电压调节和稳压的作用,将较高的直流电压转变为系统所需要的工作电压。其基本流程框图如图2-13所示。
在这里插入图片描述

图2-13 系统电源基本流程图
  以上设计的思路是:使用变压器把220V的交流市电转换成低压交流电源,然后通过整流电路把交流电路整流成直流电源,然后通过滤波后使用稳压器件转换成所需要的直流电源。
这种方法是最常用的传统方法。其优点是:线性稳压电源的输出稳定性好,输出电压的纹波小,所使用器件数量少,且成本低。电源的设计在设计好主板后,确定主板所消耗的功率后进行。
在实际的设计中,电源的设计步骤如下:
  先用可调电源调试主板,把可调电源调到系统所需要的电压值。(可调电源最好是带有电压和电流指示的;另外,还要有短路保护,以防止调试中短路)。
测试主板在各种情况下所需要的电流值,一定要测试到主板所需要的最大电流值。
根据电流电压值,计算负载所消耗的功率。
根据负载所消耗的功率,选择稳压器件,估算变压器的功率,选择其他电容及元件。同时,要主意散热设计。
  在本系统中,电源部分的电路图如图2-14所示。
在这里插入图片描述

图2-14 系统电源电路
  本设计按照负载为200mA/5V进行设计。第一部分是变压器;第二部分是整流桥;第三部分是滤波电容;第四部分是稳压器件,本电路采用LM7805和LM7812,分别输出5V和12V的电压,第五部分是纹波滤波电容。对各部分说明如下:
(1)变压器
  变压器的作用是把220V的交流电压转换成较低的交流电压。在本设计中的变压器的输出设为20V。变压器有好多种,有E型,也有R型。E型比较常见,价格便宜,但导磁率较低,比较容易发热,有时还会有噪声。R型变压器价格比E型高,但体积小、体型薄、重量轻、磁漏小,因此发热量低,效率比较高,特别是励磁电流小,空载损耗低,噪音极小,输出功率大。采用R型变压器不需要有较大的余量,通常采用1.5倍余量。在成本允许的情况下,最好采用这种方案。
(2)整流桥
  整流桥的作用是把变压器输出的低压交流电源变换成直流电源。当交流电源的正半周加入整流桥时,电流从整流桥的1脚进入2脚然后经负载从整流桥的4脚进入,经3脚流回变压器;当交流电源的负半周加入整流桥时,电流从整流桥的3脚进入2脚然后经负载从整流桥的4脚进入,经1脚流回到变压器。无论输入怎么变化,在负载上得到的电流都是从左到右,得到了一个直流电源,因此加在负载上的电压是一个直流电压。
整流桥的选择主要考虑的选择参数有耐压和电流两个主要参数。不用整流桥时可以用4只二极管组合。
(3)滤波电容
  在整流桥的后面使用了3个电容C9、C10和C11,这些电容成为滤波电容。滤波电容的作用是把波动的直流电源过滤成平滑的直流电源。
  在电源中滤波电容主要使用电解电容,因为只有电解电容才可以做成廉价的大容量电容。电解电容的作用主要是低频交流滤波。大电容由于容量大,所以体积比较大,通常采用多层卷绕的方法制成。这就导致了电容的分布电感较大。电感对高频信号的阻抗是很大的,所以大电容的高频性能不好。而一些小电容刚好相反,由于容量小,因此体积可以做的很小,而且使用平板电容结构。这样小容量电容就有很小的分布电感,因此具有了很好的高频性能。但是由于容量小,所以对低频信号的性能不好。所以为了让低频、高频信号都能较好的通过,就采用一个大电容再并上一个小电容的方式。在本电路中采用两个100uF的大电容并联上一个小电容的方式,可以达到比较好的效果。
(4)线性稳压器件
  电源经电容滤波后,成为平直的但并不稳定的电源。稳压器件的作用就是把不稳定的直流电变为稳定的直流电。常用的稳压器件是一个三端器件,如图16所示。
  其中1号引脚是输入引脚,直接连接到滤波电容的输出端(正端);2号引脚GND接电源地线,在这里是滤波电容的负端;3号引脚是稳压输出端,在这个引脚输出的是稳定的直流电压。
  根据电压的不同,稳压器件分为很多的系列。在本电路中需要使用的是5V、12V两个系列的器件,在此选用较为常用的LM7805和LM7812两个型号的器件。 除了电压方面,选择稳压器件还要考虑输出电流,根据单片机系统所需要的电流决定所使用的型号。较小的电流可以使用贴片器件,而较大的电流可以使用则需要考虑散热的问题。直插式的稳压器件可以使用散热片。在本电路中,LM7805和LM7812都使用散热片散热。第三个考虑的因素是稳压器件的输入电压和输出电压的差值,如果输入电压比输出电压大很多,则稳压器件容易发热并浪费电能;如果输入电压和输出电压相差不大,则有可能造成输出电压不稳定。对于LM7805,如果输入小于7V,当输出有大的电流波动时,将造成输出电压不稳定。一般情况下,LM7805的输入电压比输出大4V以上时,其输出是比较稳定的。另外要考虑的就是稳压器件的耐压值,78系列的耐压值一般不超过40V。所以在本电路中选用20V的电压值作为输入是可以满足稳压器件的需要的。
(5)稳压器件后面的滤波电路
  在图14中,稳压器件的前面使用了三个滤波电容,后面也使用了三个滤波电容,这三个的作用也是滤波。和前面的三个电容不同的是,前面的电容主要针对整流输出的电源波动,作用是滤除脉动电源的波峰,是电源更为平滑;而后面的这三个电容作用不同,他们主要是防止负载波动引起的电源波动,也可以滤除有稳压器件和负载引起的噪声。
后面的三个电容总容量要比前面的三个电容的总容量小,可以是前面电容的1/10~1/20,同时也需要设计一个0.1uF或更小的的电容以滤除高频干扰。

二、程序流程图

系统功能主要由主函数和各类功能函数具体实现。采取模块化的程序设计方法,进行系统总体流程设计以及具体功能设计。
本系统的软件在设计中,先确定主程序的基本流程,然后确定实现具体功能的子程序的基本流程。最后用C演编写程序,并通过Keil和Proteus软件进行调试和仿真验证。

2.1 系统程序设计

2.1.1 程序设计的基本流程图

访客到达后,按下对应要访问住户的按键,单片机接通对应住户端的扬声器。住户选择接通语音电路后,双方可以进行对话交流。通过语音交流,住户可以选择允许或者不允许访客进入本单元。
主程序的流程图如下图所示。
在这里插入图片描述

图3-1 主程序流程图
键盘扫描子程序流程图如图3-2所示。
在这里插入图片描述

图3-2 键盘扫描子程序
音乐播放子程序基本流程图3-3。
在这里插入图片描述

图3-3 音乐子程序流程图

三、 主要代码

部分调试程序
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
extern void start_t2imer(void);
unsigned char scankey;
bit Timerout=0;
bit keypress;
#define KR0    P1_0
#define KR1    P1_1
#define KR2    P1_2
#define KR3    P1_3
#define KC0    P1_4
#define KC1    P1_5
#define KC2    P1_6
#define KC3    P1_7
#define KBD_PORT  P1
#define FSM_INIT    0X00
#define FSM_WAIT_PRESS  0X01
#define FSM_VERFY1      0X02
#define FSM_VERFY2      0X03
#define FSM_WAIT_RELESE 0X04
#define KBD_VAL_VAILD   0X80
sbit Y=P1^3;
sbit Speaker=P3^7;
static unsigned char bdata StateREG;
sbit m=StateREG^0;
unsigned char code  *data MYmusic;
unsigned char data l;

void delay(void);

unsigned char code music[30]=
 {0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,
 0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0x15,0xFB,0x04,0xFA,0x67,0xFE,0x85
 };

 unsigned char code Mmusic[]=
 {0xc4,0x14,0x32,0x44,0x44,0x52,0x52,0x44,0x32,0x32,
  0x14,0x14,0x12,0x12,0x32,0x42,0x54,0x54,0x4F,0xC4,
  0x12,0x32,0x44,0x42,0x72,0x58,0x42,0x32,0x34,0x14,
  0x12,0x32,0x34,0x12,0x12,0x1F,0xFF
 };


 void main()
 {
 	unsigned int data j;
	unsigned char data i;
	unsigned char data k;
	unsigned char data p11;
	unsigned char data p33;
	TMOD=0x01;
	IE=0x82;
		while(1)
		{
		j=0;
		m=0;
			p11=P1;
			 p33=P3;
			while(Y==0)
			{
				for(i=0;i<5;i++)
				{
                delay();
				}
			 
			 while(*(Mmusic+j)!=0xFF)
			 {
			 k=*(Mmusic+j)&0x0F;
			 l=*(Mmusic+j)>>4;
				if((p11!=P1)||((p33&0x0F)!=(P3&0x0F)))
				{
				goto NEXT;

				}
             TH0=music[2*l];
			TL0=music[2*l+1];
			TR0=1;
			if((music[2*l]==0xff)&&(music[2*l+1]==0xff))
			{
				TR0=0;
			}
			for(i=k;i>0;--i)
				{
					delay();
					
				}
             TR0=0;
			j++; 
			 }
		NEXT: ;
			}
		}
	unsigned char fsm_key=0;
	unsigned char kbd_col;
	unsigned char kbd_row;
	unsigned char key_val;
	IE=0X40;
	start_t2imer();
	EA=1;       /* Enable interrupts */
	while(1){
		if(Timerout){
			Timerout=0;
			switch(fsm_key){
				case FSM_INIT:
					KR0=1;
					KR1=1;
					KR2=1;
					KR3=1;
					fsm_key=FSM_WAIT_PRESS;
					break;
				case FSM_WAIT_PRESS:
					if(keypress){
						key_val=0;
						if(KC0){
							KC0=1;
							kbd_col=1;
						}
						else if(KC1){
							KC1=1;
							kbd_col=2;
						}
						else if(KC2){
							KC2=1;
							kbd_col=3;
						}
						else if(KC3){
							KC3=1;
							kbd_col=4;
						}
						else{
							fsm_key=FSM_INIT;
						}

						kbd_row =KBD_PORT;
	                    kbd_row >>=4;
						if(kbd_row){
							if(KR0){
								kbd_row=0;
								fsm_key=FSM_VERFY1;
							}
							else if(KR1){
								kbd_row=4;
								fsm_key=FSM_VERFY1;
							}
							else if(KR2){
								kbd_row=8;
								fsm_key=FSM_VERFY1;
							}
							else if(KR3){
								kbd_row=12;
								fsm_key=FSM_VERFY1;
							}
							else{
								fsm_key=FSM_INIT;
							}
						}
						else{
							fsm_key=FSM_INIT;
						}
					}
					break;
				case FSM_VERFY1:
					switch(kbd_row){
						case 0:
							if(KR0)	fsm_key=FSM_VERFY2;
							else fsm_key=FSM_INIT;
							break;
						case 4:
							if(KR1)	fsm_key=FSM_VERFY2;
							else fsm_key=FSM_INIT;
							break;
						case 8:
							if(KR2)	fsm_key=FSM_VERFY2;
							else fsm_key=FSM_INIT;
							break;
						case 12:
							if(KR3)	fsm_key=FSM_VERFY2;
							else fsm_key=FSM_INIT;
							break;
						default:
							fsm_key=FSM_INIT;
							break;
					}
					break;
				case FSM_VERFY2:
					switch(kbd_row){
						case 0:
							if(KR0)	key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
							break;
						case 4:
							if(KR1)	key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
							break;
						case 8:
							if(KR2)	key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
							break;
						case 12:
							if(KR3)	key_val=(kbd_row+kbd_col)|KBD_VAL_VAILD;
							break;
						default:							
							break;
					}
					KR0=1;
					KR1=1;
					KR2=1;
					KR3=1;
					fsm_key=FSM_WAIT_RELESE;
					break;
				case FSM_WAIT_RELESE:
					if(!keypress){
						fsm_key=FSM_INIT;
					}
					break;
				default:
					fsm_key=FSM_INIT;
					break;
			}
		}
	}

 }



void timer0() interrupt 1 using 1
{
	TH0=music[2*l];
	TL0=music[2*l+1];
	Speaker=!Speaker;
	
}

void delay(void)
{
#pragma ASM
		MOV	R3,#02H
	D1: MOV R2,#7DH
	D2: MOV R1,#0F8H
		DJNZ R1,$
		DJNZ R2,D2
		DJNZ R3,D1
#pragma ENDASM

}
}

四、 内容截图

在这里插入图片描述

五、 总结

  本文按照课题要求,智能小区电子门控制系统进行了设计。
  硬件部分本系统以AT89C51单片机为核心,分别进行了并行I/O口的设计、矩阵式键盘的设计、音频通话电路的设计、继电器驱动电路的设计、电源电路的设计以及复位电路的设计。
  软件部分以模块化设计的思想,按照系统的要求,并结合实硬件电路进行具体化设计和调试。本系统的软件部分用C语言编程实现,并通过Keil uVision 进行编译和调试。最终通过嵌入式软硬件仿真电路Proteus装载程序,对整个系统进行了仿真验证。
  通过最终的验证,本设计符合课题的最初要求。

五、 文章目录

目 录
摘要 II
Abstract III
1绪论 1
1.1研究背景和意义 1
1.2国内外技术现状 1
1.3本课题的研究内容 3
2 门控系统的硬件电路设计 4
2.1硬件电路整体结构 4
2.2AT89C51单片机 5
2.2.1 51系列单片机 5
2.2.2 AT89C51单片机的特点及工作原理 6
2.3 可编程并行接口芯片8255A 10
2.3.1引脚说明 11
2.3.2.工作方式选择 12
2.4键盘接口设计 13
2.4.1. 键盘输入的特点 13
2.4.2按键的确认 14
2.4.3.键盘接口 14
2.4.4键盘的工作方式 18
2.5音频电路的设计 19
2.5.1 LM324运算放大器 20
2.5.2 音频电路设计 21
2.5.3 通话电路的控制 21
2.6开门继电器的驱动 22
2.7电源部分设计 24
3系统软件的设计 28
3.1 系统程序设计 28
3.1.1 程序设计的基本流程图 28
4系统的抗干扰设计 32
4.1 干扰的分类及抗干扰的几大原则 32
4.2 硬件抗干扰设计 32
4.3软件抗干扰设计 33
5总结与展望 35
5.1 工作总结 35
5.2 工作展望 35
参考文献 36
附录A 37
附录B 38
致谢 47

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值