基于单片机的定时插座设计-精品内容摘要:
,一般情况下它们大多工作在 5V 甚至更低。 驱动电流在 mA 级以下。 而要把它用于一些大功率场合,比如继电器驱动,显然是不行的。 所以就要有一个环节来衔接,这个环节就是所谓的“功率驱动”。 继电器驱动就是一个典型的、简单的功率驱动 环节。 图中三极管 8050 有两个作用:一个是起放大作用,一个是起开关作用(严格来讲开关作用是放大作用的极限情况)。 P1 处连接的是单片机的 口。 口给出高电平时,三极管处于导通状态,并起放大作用,这样,继电器就能得到足够的驱动电流来正常工作。 当 口给出低电平时,三极管不工作,继电器因没电流通过而不工作。 二极管 4148 起到保护作用。 发光二极管 LED0 用于指示继电器是处于导通状态(灯亮)还是处于断开状态(灯灭)。 继电器驱动电路如图 所示。 第 17 页 图 继电器驱动电路 键盘电路 本设 计采用了独立键盘设计,只是用了 5 个独立案件与单片机 IO 口连接,利用简单的逻辑方式实现了人机交互界面。 该界面操作简单,便于控制。 人机界面在软件设计板块中将详细介绍。 独立键盘电路如图 所示。 图 键盘电路 插座电源控制电路 由于电源的通断并不频繁所以本设计才用了价格相对较低的继电器做为插座电源的控制电路器件。 由单片机的一个 I/O 口经过三极管控制继电器的通断,从而控制插座的通断电。 插座电源控制电路如图 所示。 第 18 页 图 插座电源控制电路 报警电路 本设计报警电路由单片机 I/O 口经三极管控制蜂鸣器进行报警。 报警电路如图。 图 报警电路 第 19 页 第五章 系统软件设计 本章详细介绍了各个模块的软件设计流程以及部分源代码,包括了时钟程序、人机界面以及主程序。 开发环境 STC89C51 单片机软件开发平台为 Keil uvision4 C51,仿真环境为 Protues,下载软件为 STC_ISP。 Keil C51 是 美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( uVision)将这些部分组合在一起。 运行Keil 软件需要 WIN9 NT、 WIN20 WINXP 等操作系统。 Protues 软件是英国 Labcenter electronics 公司出版的 EDA 工具软件。 它不仅具有其它EDA 工具软件的仿真功能,还能仿真单片机及外围器件。 它是目前最好的仿真单片机及外围器件的工具。 虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。 Proteus 是世界上著名的 EDA 工具 (仿真软件 ),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到 PCB 设计,真正实现了从概念到产品的完整设计。 是目前世界上唯一将电路仿真软件、 PCB 设计软件和虚拟模型 仿真软件三合一的设计平台,其处理器模型支持 8051 、 HC11 、PIC10/12/16/18/24/30/DsPIC3 AVR、 ARM、 8086 和 MSP430 等, 2020 年即将增加 Cortex和 DSP 系列处理器,并持续增加其他系列处理器模型。 在编译方面,它也支持 IAR、 Keil和 MPLAB 等多种编译。 STCISP 是一款 单片机 下载编程烧录 软件 ,是针对 STC 系列单 片机而设计的,可下载 STC89 系列、 12C2052 系列和 12C5410 等系列的 STC 单片机,使用简便,现已被广泛使用。 各模块程序设计 主程序流程图 在本次设计中,主程序主要是在单片机的控制下,建立人机操作界面,对设定时间进行储存分析,驱动液晶显示出相关信息,并通过对比分析定时时间与时钟,控制继电器的通、断,从而达到控制插座的通、断电。 在这个过程中,单片机首先进行初始化,包括设置单片机各个端口的方向,各个变量的初始化,液晶显示初始化、继电器断开以及单片机振荡频率的校准等。 整个系统软件设计 的流程图如图 所示。 第 20 页 开 始液 晶 、 定 时 器 初 始 化建 立 人 机 界 面进 入 键 盘 循 环 扫 描键 值 判 断 与 控 制定 时 时 间 与 现 实 时 间 对 比通 断 电 判 断 通 电断 电 图 主程序流程图 main() { TMOD=0x01。 ET0=1。 TR0=1。 EA=1。 shi=1,fen=0,miao=0,a=1,b=1,c=0,d=0,e=0,f=0。 power=0。 //开电源 lcd_init()。 // 初始化 LCD delay(1)。 disp_later(0,0,1SET 2AL 3SAL,16)。 //显示第一个界面 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 while(1) { if(teep==0) //每秒变化一次 { disp_time(6,1,shi,fen,miao)。 } 第 21 页 if(miao==60) { miao=0。 fen++。 if(fen==60) { fen=0。 shi++。 if(shi==24) { shi=0。 } } } if(k1==0) //设置现在时间 { EA=0。 lcd_cmd(0x01)。 //清屏 disp_later(0,0,K2:H K3:M K4:O,14)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 while(1) { while(k2==0) { delay(10)。 if(k2==1) { shi++。 if(shi==24) shi=0。 disp_time(6,1,shi,fen,miao)。 } } while(k3==0) { delay(10)。 第 22 页 if(k3==1) { fen++。 if(fen==60) fen=0。 disp_time(6,1,shi,fen,miao)。 } } if(k4==0) { EA=1。 lcd_cmd(0x01)。 //清屏 disp_later(0,0,1SET 2AL 3SAL,16)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 break。 } } } if(k2==0) //显示闹铃时间 { lcd_cmd(0x01)。 disp_later(0,0,start:,6)。 //显示:开始时间 disp_time(6,0,a,b,c)。 disp_later(0,1,delay:,6)。 //显示:持续时间 disp_time(6,1,c,d,e)。 delay(500)。 lcd_cmd(0x01)。 //清屏 disp_later(0,0,1SET 2AL 3SAL,14)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 } while(k3==0) //设置闹铃时间 { delay(10)。 if(k3==1) { 第 23 页 lcd_cmd(0x01)。 //清屏 disp_later(0,0,K2:H K3:M K4:O,14)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,a,b,c)。 while(1) { while(k2==0) { delay(10)。 if(k2==1) { a++。 if(a==24) a=0。 disp_time(6,1,a,b,c)。 } } while(k3==0) { delay(10)。 if(k3==1) { b++。 if(b==60) b=0。 disp_time(6,1,a,b,c)。 } } if(k4==0) { lcd_cmd(0x01)。 //清屏 disp_later(0,0,1SET 2AL 3SAL,16)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 break。 } } } 第 24 页 } if(k4==0) { lcd_cmd(0x01)。 disp_later(0,0,start:,6)。 //显示:开始时间 disp_time(6,0,a,b,c)。 disp_later(0,1,delay:,6)。 //显示:持续时间 disp_time(6,1,d,e,f)。 delay(10)。 while(k4==1) { while(k1==0) { delay(10)。 if(k1==1) { a++。 if(a==24) a=0。 disp_time(6,0,a,b,c)。 } } while(k2==0) { delay(10)。 if(k2==1) { b++。 if(b==60) b=0。 disp_time(6,0,a,b,c)。 } } while(k3==0) { delay(10)。 if(k3==1) { 第 25 页 d=d+5。 if(d==60) { d=0。 c++。 if(c==24) c=0。 } disp_time(6,1,c,d,e)。 } } if(k4==0) { ling=1。 nao()。 power=0。 //开电源 disp_later(0,0,1SET 2AL 3SAL,16)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 break。 } } } if(ling==1) { if(shi==a+c) { if(fen==b+d) { power=1。 //关电源 lcd_cmd(0x01)。 //清屏 disp_later(0,0,TIME OVER,9)。 nao()。 nao()。 nao()。 lcd_cmd(0x01)。 //清屏 第 26 页 disp_later(0,0,1SET 2AL 3SAL,16)。 disp_later(0,1,TIME:,5)。 disp_time(6,1,shi,fen,miao)。 ling=0。 } } }。基于单片机的定时插座设计-精品
相关推荐
项命令,此时可以选择 stepover 、step into 和 step out 命令执行程序 (可以用快捷键 F F11 和ctrl+F11),执行的效果是单 句执行、进入子程序执行和跳出子程序执行。 在执行了 start / restart debuging 命令后,在 debug 菜单基于单片机的室内电热水器控制系统设计 10 的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等
econd3=0。 } else { for(i=0。 ikeycount。 i++) { if(getps[i]!=ps[i]) { i=keycount。 errorflag=1。 rightflag=0。 second3=0。 goto a。 } } errorflag=0。 rightflag=1。 a: i=keycount。 } } temp=temp amp。 0x0f。
口是一个具有内部上拉电阻的 8 位双向 I/O 口, P1 输出缓冲器能驱动个 TTL 逻辑电平。 对 P1 端口写 “1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。 作输为入使用时,被输入信号拉低的引脚由于内部上拉电阻的原因,将输出电流 IIL。 此外, 和 分别作定时器 /计数器 2 的外部计数输入( )和时器 /计数器 2 的触发输入( ),具体如表 31 所示。 在 flash
E D+ 5 V 图 报警电路 13 三 系统软件设计 主程序流程图 图 工作流程:调用初始化程序,对单片机进行初始化设置;调用 A\D转换子程序,开始 初始化 调用模数转换子程序 调用显示子程序 调用调温子程序 调用报警子程序 返回 14 对由传感测量电路采集的模拟信号进行模数转换变成数字信号。 调用显示子程序,经AT89C51 控制数字信号在 LED数码管上显示。 调用调温子程序
图所示。 从图可见, 即使在稳定负载条件下 CF 输出频率仍然随时间变化,这种频率的变化是由瞬时有功功率信号中的 cos(2ωt)成分引起的。 CF 输出频率能高达 F1 和 F2 输出频率的2048 倍。 CF 能以较高的频率输出,是因为在对瞬时有功功率进行累加完成频率转换的过程中,采用了较短的累加世间。 较短的累加世间意味着减弱了对 cos(2ωt)的平均作用
控电路图。 桂林电子科技大学信息科技学院毕业设计 (论文 )说明书 第 7 页 共 32 页 图 22 单片机主控电路图 温 湿度模块电路设计分析 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器 ,传感器内部是由一个电阻式感湿元件和一个 NTC测温元件组成。 单线制串行接口,使系统集成变得简易快捷。 超小的体积、极低的功耗,其中信号传输距离可达 20米以上。 ( 1)