毕业设计-基于89c51的自动断电保护系统单片机.doc
单片机系统课程设计单片机系统课 程 设 计成绩评定表设计课题 : 基于89C51的自动断电保护系统 学院名称 : 电气工程学院 专业班级 : 学生姓名 : 学 号 : 指导教师 : 设计地点 : 设计时间 : 指导教师意见:成绩: 签名: 年 月 日 单片机系统课 程 设 计课程设计名称: 基于89C51的自动断电保护系统 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计地点: 课程设计时间: 单片机系统 课程设计任务书学生姓名专业班级学号题 目课题性质工程设计课题来源选题指导教师 主要内容 (参数)利用89C51设计自动断电保护系统,实现以下功能:1、实现开机后自动供电;2、内部短路或超载时会自动断开电源;3、利用互感,通过采集电流来控制继电器的常开,常闭触头。4、采用警报,声音来提醒使用者来处理紧急事故任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:软件设计,编写程序。第7-8天:实验室调试。第9-10天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。主要参考资料1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006审查意见系(教研室)主任签字: 年 月 日 目录一、引言3二、总体方案设计4三、硬件电路设计53.1 单片机最小系统53.2 电流采样电路和继电器控制电路73.3 A/D采样电路83.4键盘和液晶显示电路103.5声光报警电路12四、系统软件设计124.1主程序设计124.2中断服务程序设计134.3部分主要子程序设计16五、系统调试18六、总结18参考文献:18附件A19附件B20一、引言随着家用电器的增多,人们也越来越关心用电器的保护和用电安全的问题。因此自动断电保护系统,逐步广泛应用于家庭用电器的保护设施,它能够实现开机后自动恢复供电功能。当内部电路短路,用电功率超过设定值时,自动断电保护系统就会自动断开用电器的供电回路,使用电器停止工作,能够防止用电器进一步的损坏,避免发生一些不必要的损失。该设计采用电流互感器,来采样线路上的电流值,然后与用户设定值进行比较,控制继电器的常闭点的断开与闭合, 从而控制用电器的供电回路的断开与闭合。同时该设计还提供了声光报警,用户可以及时的处理事故。用户还可以通过键盘来设置限制电流的大小,同时电流的采样值和设置值都会通过液晶显示器显示出来,以供用户方便的使用和观察。二、总体方案设计按照任务要求和系统设计要求,控制系统包括以下几个部分:1. 控制器。作为系统的核心元件,我们采用AT89C51单片机。2. 电流采样。通过一个互感器进行电流的采样,将线路上的大电流转换为小电流值进行采样。通过一个电阻将其转换成电压信号,方便单片机的读取。3. A/D转换。A/D转换芯片采用ADC0804八位模数转化器。A/D转换器可以把测得的模拟量转化成数字量输出,可以直接读取。4. 继电器。当电流超过设定值时,继电器断开,电路回路断开。继电器在电路中起到断电保护作用,是系统的安全保障。5. 声光报警。当电流值超过设定值时,进行报警6. 键盘。通过键盘可以设置限制电流大小。7. 液晶显示器显示。可以显示设置电流以及实时电流值大小。总体设计结构图如图2-1所示:图2-1 总体设计结构图三、硬件电路设计3.1 单片机最小系统微控制器采用AT89C51,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器。其主要特性如下:· 与MCS-51 兼容 · 4K字节可编程闪烁存储器 · 寿命:1000写/擦循环 · 数据保留时间:10年 · 全静态工作:0Hz-24MHz · 三级程序存储器锁定 · 128*8位内部RAM · 32可编程I/O线 · 两个16位定时器/计数器 · 5个中断源 · 可编程串行通道 · 低功耗的闲置和掉电模式 · 片内振荡器和时钟电路其最小系统主要包括复位电路,时钟电路。AT89C51芯片电路图如图3-1所示: 图3-1 AT89C51单片机芯片电路图复位电路图如图3-2所示:R1710KR161KC310uS0VCCRST图3-2 复位电路图复位电路与AT89C51的访问外部程序存储器控制引脚EA和复位信号输入引脚RST相连。此电路可以实现上电复位和手动复位,复位电路工作原理如上图所示,采用5V供电,+5V的VCC上电时,C3充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C3充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S0,C3放电,在10K电阻上出现电压,使得单片机复位。S0松手,C3又充电,几个毫秒后,单片机进入工作状态。每次启动都需要重新设置限制电流大小,否则则默认为初始设置10A。当微控制器运行发生错误时,可以对其手动复位,使其重新启动运行,再进行设置限制电流大小。时钟电路图如图3-3:图3-3 时钟电路图时钟电路接AT89C51的18和19引脚。X1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入;X2接外部晶振和微调电容的另一端;此电路采用12M晶振给单片机提供时钟信号。本设计时钟电路采用12M的晶振。晶振的作用是给单片机正常工作提供稳定的时钟信号。单片机的晶振并不是只能用12M,只要不超过20M就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M的就是好算时间,因为一个机器周期为12个时钟周期,所以这样用12M的话,一个时钟周期为1/12us,那么机器周期为1us即定时器计一次数就是1us了,电容范围在20-40pF之间,这里连接的是30pF的电容。机器周期=12*系统时钟周期。3.2 电流采样电路和继电器控制电路 电流采样电路,电路正常工作时继电器常闭触点闭合接通电流互感器,通过电流互感器按一定比例采样线路上的电流值大小,通过一个电阻,将电流信号转换为电压信号,方便单片机进行A/D转换,继电器控制电路,当线路上的电流值大于设定电流值时,将P2.4端口置1,控制导通的信号置于高电平,使三极管饱和导通即Q2形成通路,则继电器常闭点断开,用电器电路回路断开,则用电器停止工作。继电器两端单向并联一个二极管(负极接在VCC端,正极接在三极管集电极上),起到吸收电磁线圈断电后产生的反向电动势,保护三极管。电路图如图3-4所示: 图3-4 电流采样转换电路和继电器控制电路3.3 A/D采样电路A/D采样电路采用集成A/D转换器ADC0804 。ADC0804是一款8位、单通道、低价格A/D转换器,主要特点是:模数转换时间大约100us;方便TTL或CMOS标准接口;可以满足差分电压输入;具有参考电压输入端;内含时钟发生器;单电源工作时(05)V输入电压范围是05V;不需要调零。1.芯片参数:工作电压:+5V,即VCC=+5V。模拟转换电压范围:0+5V,即0Vin+5V。分辨率:8位,即分辨率为1/28=1/256,转换值介于0255之间。转换时间:100us(fCK=640KHz时)。转换误差:±1LSB。参考电压:2.5V,即Vref=2.5V。2.各个引脚名称及作用:Vin(+)、Vin(-):两个模拟信号输入端,可以接收单极性、双极性和差模输入信号。DB0-DB7:具有三态特性数字信号输出端,输出结果为八位二进制结果。CLKIN:时钟信号输入端。CLKR:内部时钟发生器的外接电阻端,与CLK端配合可由芯片自身产生时钟脉冲,其频率计算方式是:fck=1/(1.1RC)。CS:片选信号输入端,低电平有效。WR:写信号输入端,低电平启动AD转换。RD:读信号输入端,低电平输出端有效。INTR:转换完毕中断提供端,AD转换结束后,低电平表示本次转换已完成。VREF/2:参考电平输入,决定量化单位。VCC:芯片电源5V输入。AGND:模拟电源地线。DGND:数字电源地线。ADC0804外围电路如图3-5所示:VCC20INTR5DB018DB117DB216DB315DB414DB513DB612DB711CS1RD2WR3CLK IN4CLK OUT19REF/29IN+6IN-7AGND8DGND10R1510kR1210kR1410kR131kC1110412ADINRe210kVCCVCCCSDARDWRVCCDB1DB2DB3DB4DB5DB6DB7DB8ADC0804图3-5 ADC0804外围电路图3-5为ADC0804外围电路原理图,其中,VCC=5V,因此ADC转换的参考电压为VCC的值,即5V。IN-接地,而IN+通过插座ANIN连接滑动变阻器Re2的输出,因此IN+的电压输入范围为0V5V,正好处于参考电压范围内。引脚CS、WR和RD分别连接单片机的12,17以及16脚,而DB0DB7连接单片机的P1脚。3.4键盘和液晶显示电路 液晶显示电路采用带中文字库的12864液晶显示器。带中文字库的128X64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ASCII 字符 集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4 行16×16 点 阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶 显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。12864 液晶具有如下的特性:1 提供 8 位,4 位并行接口及串行接口可选2 并行接口适配 M6800 时序3 自动电源启动复位功能4 内部自建振荡源64×16 位字符显示 RAM(DDRAM 最多 16 字符×4 行,LCD 显示范围 16×2 行)(改为半角输入)2M 位中文字型 ROM(CGROM) ,总共提供 8192 个中文字型(16×16 点阵)16K 位半宽字型 ROM(HCGROM),总共提供 126 个西文字型(16×8 点阵)64×16 位字符产生 RAM(CGRAM)15×16 位总共 240 点的 ICON RAM(ICONRAM) 液晶显示电路如图3-6所示:图3-6 液晶显示电路键盘电路采用3个独立的按键,一个功能切换键、一个加按键、一个减按键通过这三个按键可以来合理的设置限制电流的数值。键盘电路与单片机的连接电路图如图3-7所示: S1S2S3SDASCL18B20图3-7 键盘电路与单片机的连接电路图3.5声光报警电路声光报警电路,采用三极管驱动音频放大器实现音频报警,当采样电流值大于电流设定值时,单片机P2.3引脚即FM端口产生100HZ的方波信号,控制Q1的通断,实现蜂鸣器报警;单片机P3.0端口变成高电平,则发光二极管点亮,实现报警功能。此装置具有以下优点:1、 在远距离是可以通过声音及时通知2、 在近距离可以通过视听觉做出反应3、 在嘈杂的环境中可以通过视觉通知4、 两种器件配合更加安全可靠电路图如图3-8所示:图3-8声光报警电路四、系统软件设计软件设计包括主程序,中断服务程序等其它子程序4.1主程序设计主程序是系统上电或复位后首先要执行的程序,主程序主要完成系统的初始化、扫描显示、扫描键盘,A/D转换等工作。主程序上电自动复位,也可手动复位;主程序执行时,分别进行键盘扫描,A/D转换,以及液晶显示。主程序流程图如图4-1所示:图4-1 主程序流程图当系统上电或者手动复位时,首先进行系统初始化,设置堆栈地址,定时器0工作方式,中断触发方式以及其它系统初始化。然后启动定时器和A/D转换。然后进行不停的扫描键盘和显示。4.2中断服务程序设计外部中断服务程序流程图如图4-2所示:图4-2 外部中断服务程序流程图当A/D转换结束时,ADC0804模数转换器INTR引脚输出一个低电平信号,使AT89C51产生外部中断,进入外部中断服务程序。首先保护现场,然后读取AD值,进行数据的转换然后存储,并与设定的电流值进行大小比较,如果超过设定值,则继电器断开,用电器回路断开,并置1报警标志位。恢复现场,中断返回。 定时器0中断服务程序流程图如图4-3所示:图4-3 定时器0中断服务程序流程图定时器设置为10ms定时,每10ms中断一次,进入中断之后,首先保护现场,重装初值,判断是否处在报警状态,如果是,取反P2.4口,驱动扬声器进行声音报警。如果没有处于报警状态在判断是否到1S,到1S,则重置1S计数初值,启动A/D转换然后恢复现场,中断返回,如果不到1S,则直接恢复现场,中断返回。4.3部分主要子程序设计系统主要子程序主要包括键盘子程序、键盘扫描子程序,显示子程序。(1)键盘子程序设计键盘子程序设计,采用三个独立按键来设置限制电流值的大小,第一次按下键1,启动限制电流大小的设置,最大限制电流处的液晶光标闪烁,按第二下键1液晶光标不再闪烁,表示调节结束。按键2,则实现限制电流的增加,最大限制电流20A;按键3,则实现限制电流的减小,最小限制电流为0A。(2)键盘扫描子程序设计流程图如图4-4所示: 图4-4 键盘扫描子程序设计流程图(3)显示子程序设计系统上电后,即开始在默认的最大限制参考电流的第一行设置限制电流,第二行为系统测量电流即:CIV:20ACTV:00A(CIV:current limit value 限制电流值。 CTV:current test value测试电流值)显示子程序设计流程图如图4-5所示:图4-5 显示子程序设计流程图五、系统调试由于硬件的限制,我们不能对互感器电流采样部分电路的测试,但是通过直接给ADC0804一个模拟信号进行了以下测试。1、上电开始默认显示正常。2、按键S1功能切换键、按键S2数值增键、按键S1数值减键正常。3、上下限最值测试正常。4、A/D转换结果测试正常。5、声光报警装置测试正常。六、总结通过本次的单片机课程设计,使我更好的掌握了单片机的使用,更好地理解了单片机内部的数据存储,中断和定时器的应用,单片机外部电路的接口技术,数据总线的运用,也更深入的了解了汇编语言,熟悉了汇编指令的功能以及程序的编写。让我知道想设计好一个完整稳定的系统,需要考虑很多的细节,并不是那么容易,对我以后进入工作起到很大的帮助。参考文献:1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006附件A附件B程序:ORG 0000HLJMP MAINORG 0003HLJMP TSORG 000BHLJMP T_0ORG 0030HMAIN: MOV SP,#3FH;设置堆栈 MOV 60H,#0;采集数据显示缓冲区 MOV 70H,#10;设置数据显示缓冲区 MOV R0,#60H MOV R1,#70H MOV R6,#50 MOV R7,#200;1S计数值 CLR 20H;报警状态标志位 CLR 21H;设置数据标志位 CLR P2.3;音频报警 CLR P2.4;继电器 CLR P3.0;LED MOV TH0,#0F6H;定时器0装初值 MOV TL0,#3CH SETB IT0;外部中断触发方式设置 MOV IE,#83H;开总中断,外部中断0,定时器中断0 SETB TR0;启动定时器 MOV A,#0 MOV DPTR,#8000H;片选ADC0804 MOVX DPTR,A;启动ADLOOP: LCALL DISPLAY;调用显示 LCALL KEY;扫描键盘 LJMP LOOPKEY: PUSH ACC;保护现场 PUSH PSW PUSH DPH PUSH DPL LCALL KEY_VALUE JB 21H,KEY0_0;判断是否处于设置数据状态KEY0: CJNE A,#01H,RETURN;判断键值 LCALL DISPLAY;调用显示延时,消抖 CJNE A,#01H,RETURN LCALL KEY_VALUE JNZ KEY0;等键释放 SETB 21H;设置数据状态标志位置1 LJMP RETURN;返回KEY0_0: CJNE A,#01H,KEY1;判断键值 LCALL DISPLAY;调用显示延时消抖 CJNE A,#01H,KEY1 LCALL KEY_VALUE JNZ KEY0_0;等键释放 CLR 21H;设置完成,清除标志位 LJMP RETURN;返回KEY1: CJNE A,#02H,KEY2;判断键值 LCALL DISPLAY;调用显示延时,消抖 CJNE A,#02H,KEY2 LCALL KEY_VALUE JNZ KEY1;等键释放 INC 70H;设置数据缓冲区加1 CJNE R1,#20,RETURN;判断是否到最大值20 MOV 70H,#0;是,归0 LJMP RETURN;返回KEY2: CJNE A,#04H,RETURN;判断键值 LCALL DISPLAY;调用显示延时,消抖 CJNE A,#04H,RETURN LCALL KEY_VALUE JNZ KEY2;等键释放 DEC 70H;设置数据缓冲区加1 CJNE R1,#0,RETURN;判断是否到最小值0 MOV 70H,#20;是,变为20RETURN: POP DPL;恢复现场 POP DPH POP PSW POP ACC RETKEY_VALUE:;读键值子程序 MOV DPTR,#09002H;送键盘列码地址 MOV A,#00H MOVX DPTR,A;扫描键盘 MOV DPTR,#08001H;送行码地址 MOVX A,DPTR ANL A,#0FH;读键值 RET DISPLAY: RS EQU P3.5 R/W EQU P3.6 E EQU P3.4 PSB EQU P3.7 DO-D7 EQU P0 ORG 0000H AJMP MAIN ORG 0100H;以下是主程序,进行初始化MAIN:MOV SP,#60H MOV A,#00111000B ;功能设置指令,8位接口,显示两行,5*7字符 LCALL WriteIR ;调写指令寄存器子程序MOV A,#00001110B ;显示开关控制指令,显示器开,光标开,光标不闪烁 LCALL WriteIRMOV A,#00000110B ;输入方式设置指令,字符不动,光标自动右移一格LCALL WriteIRMOV A,#00000001B ;清屏指令,将DDRAM数据全部填入“空白”LCALL WriteIRMOV A,#10000000B ;DDRAM地址设置指令,写入显示地址为第1行第1位ACALL WriteIR MOV DPTR, #TAB1 ;指向TAB1表首 ACALL STRING ;调字符串处理子程序MOV A,#11000000B ;DDRAM地址设置指令,写入显示地址为第2行第1位ACALL WriteIR MOV DPTR, #TAB2 ;指向TAB2表首 ACALL STRING ;调字符串处理子程序 SJMP $ ;检查忙碌子程序CheckBusy:PUSH ACC LOOP:CLR RS ;选择指令寄存器SETB RW ;选择读模式MOV D0-D7,#0FFH ;P0口写1,准备写入SETB E ;使能LCDMOV A D0-D7 ;将LCD的D0D7由P0口送A,以便查第7位BF是否为0CLR E ;禁止LCDJB ACC.7,LOOP ;判断由LCD读入第7位BF是否为1,若为1表示LCD忙ACALL DELAY ;调延时子程序POP ACCRET;写入IR寄存器子程序WriteIR:PUSH ACCACALL CheckBusy ;调检查忙碌子程序CLR E ;禁止LCDCLR RS ;选择指令寄存器CLR RW ;选择写模式STEB E ;使能LCDMOV D0-D7,A ;将控制指令写入LCDSETB E ;使能LCDCLR E ; 禁止LCDPOP ACCRET;写入DR寄存器子程序WriteIR:PUSH ACCACALL CheckBusy ;调检查忙碌子程序CLR E ;禁止LCDSETB RS ;选择数据寄存器CLR RW ;选择写模式STEB E ;使能LCDMOV D0-D7,A ;将控制指令写入LCDSETB E ;使能LCDCLR E ; 禁止LCDPOP ACCRET;以下是字符串处理子程序STRING:PUSH ACCLOOP1:MOV A,#00HMOVC A,A+DPTRJZ PROCACALL WriteDDRINC DPTRAJMP LOOP1 PROC: POP ACC RET;以下是2.5ms延时子程序DELAY: MOV R5,#5D2 :MOV R4 , #248D1 :DJNZ R4,D1 DINZ R5,D2 RETTAB1:DB 43H,49H,56H,3AH,32H,30H,41H,00H; CIV:20A的代码,00H表示结束TAB2:DB 43H,54H,56H,3AH,30H,30H,41H,00H; CTV:00AD代码,00H表示结束DELAY:;延时函数 MOV R6, #50DELAY_LOOP: DJNZ R6,DELAY_LOOP RETTS: PUSH ACC;保护现场 PUSH PSW PUSH DPH PUSH DPL MOV DPTR,#8000H;AD片选 MOVX A,DPTR;读取AD值 MOV B,#5;数据转换 DIV AB MOV B,#2 MUL AB MOV B,#5 DIV AB MOV R0,A;送入采样数据显示缓冲区 SETB C CJNE A,70H,NEXT;判断是否达到报警值NEXT: JNC NEXT0;是,转到NEXT0 CLR 20H;清除报警标志位,正常工作 CLR P1.1;清除报警,继电器正常 CLR P1.2 LJMP BACK;返回NEXT0: SETB 20H;报警标志位置1 SETB P1.1;继电器断开 SETB P1.2;LED亮 LJMP BACK;返回T_0: PUSH ACC;保护现场 PUSH PSW PUSH DPH PUSH DPL MOV TH0,#0F6H;重装初值 MOV TL0,#3CH JB 20H,NEXT1;判断报警标志位,是1,转到NEXT1NEXT2: DJNZ R7,BACK;判断是否够1S,不到,返回 MOV R7,#200;重置1S计数初值 MOV A,#0;启动AD MOV DPTR,#8000H MOVX DPTR,ABACK:;中断返回函数 POP DPL;恢复现场 POP DPH POP PSW POP ACC RETINEXT1: CPL P1.0;扬声器驱动 LJMP NEXT2;跳转到NFTX2,判断是否到1S25