电子系统设计
学校:学院:班级:组员:数字定时器
实验报告
城市轨道交通学院 通信工程 1
前 言
在电子技术飞速发展的今天,电子产品逐渐趋向人性化和智能化。人们人们为了实现这一目的而引入了单片机。单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机已在广阔的计算机应用领域中表现得淋漓尽致电器因此,单片机已成为电子类工作者必须掌握的专业技术之一。
这次实验,我们组是以单片机为核心设计一个数字定时器。在实验过程中,我们开始了解电系统设计的和基本理念,基本规则和基本流程;在不断完善设计的过程中,我们逐步丰富和巩固自己的理论知识,培养积极思考解决问题的习惯并充分地发挥自己动手实验操作的能力。
可以说这次实验将我们所学的《单片机原理与应用》以及《电子系统设计》两门课程进行了有机的结合。通过解决实际问题,我们对原理有了更深刻的理解,对于应用有了更广泛的接触。另外实验中我们学会使用Proteus和Keil两款软件进行单片机电路的仿真以及程序的编写及联调。这些都为我们以后的课程设计乃至工作研究奠定了厚实的基础。
这次的实验中,我们以单片机实现计时和倒计时功能,由LED 显示剩余时间,显示格式为 XX(分),精确到1分的整数倍。虽然接触到的功能模块较多,包括接口模块、中断模块、存储模块、控制模块和显示模块等,但仍然只是单片机这门学问的皮毛,在以后的学习中我们还需要不断汲取知识,不断地将理论与实
2
践结合。
本次实验有本小组4位组员共同完成,张强强负责,朱宇翔负责,吴易洲负责, 3
编者注 肖伟健负责。
目 录
第1部分 实验概述
1.1 设计要求…………………………………………………… 1.2 数字定时器系统的基本理论……………………………… 1.3 设计方案…………………………………………………… 1.4 硬件电路工作原理………………………………………… 第2部分 程序设计
2.1 整体结构…………………………………………………… 2.2 资源分配…………………………………………………… 2.3 程序流程…………………………………………………… 2.4 程序编写…………………………………………………… 第3部分 仿真验证
3.1 Keil 与Proteus联调仿真………………………………… 3.2 实物连接仿真……………………………………………… 第4部分 实验总结
4.1 问题分析…………………………………………………… 4.2 小结…………………………………………………………
4
第1部分 实验概述
1.1实验要求
1定时时间的设置范围为1~99min,开机上电后隐含值为10min。 2 使用0.5英寸红色LED数码管显示时间。 3 定时时间可以用按键或其他方式输入。
4 定时器控制一个交流220V,1A的用电设备,上电是不允许用电设备瞬间通电。
5 定时时间设定后,启动计时,用电设备通电,同时显示器逐分倒计时。 6 计时到0分时,切断用电设备电源。 7由用电设备提供+12V电源。 8尽量减少器件成本。
1.2 数字定时器系统的基本理论
本设计将采用89C51单片机,89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机自带5个中断,两个16位定时器32个I/O口,可擦除只读存储器可以反复擦除多次,功能相当强大。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
5
1.3 方案设计
数字定时器系统的基本组成如图1所示。
晶振复位电路 单片机 控制器 显示电路 键盘电路 继电器电路 图1 数字定时系统电路的原理框图
数字定时系统电路的原理框图 根据设计任务与要求,可初步将系统分为五大功能模块:主电路、按键电路、显示电路、继电器电路。进一步细说,主电路选用AT89C51作为中央处理器,系统采用12MHZ的晶振;按键控制电路由两个个按键(启动键(start)、时间设定键 (set))组成,采用三个独立开关,按键按下产生一个脉冲信号;显示电路由二位8段共阴极数码管和一个9位100欧姆上拉排阻组成,位选,个位和十位由P0输出,段选由P1输出;继电器电路由一个继电器和一个用电器(灯泡)组成,通过电路与P3.0相连。当P3.0输出高电平时,继电器不吸合,灯亮。
6
1.4 硬件电路的工作原理
1.4.1单片机最小系统的设计模块
硬件连接说明:本系统以AT89C51单片机为核心。单片机采用内部振荡的方式。100欧姆排阻与一个2位8段共阴LED数码显示管相连。从P0口输出LED数码管的字形码,从P0口输出LED数码管的位选码,高电平有效。2个功能按键和P3.2和P3.3口相连,按键另一端接地,当按键按下,产生一个脉冲信号。继电器电路则与P3.0口相连,当P3.0口输出高电平时,用电器工作。 1.4.2晶振复位电路设计
由于单片机内部振荡方式电路简单,时钟信号比较稳定,是独立的单片机应用系统的首选,故本设计采用内部振荡方式,采用12MHZ的晶振。复位电路通过电解电容和电阻形成振荡电路,通过开关按键来形成复位。数字定时系统电路的晶振复位电路图如图2所示。
图2 数字定时系统电路的晶振电路图 1.4.3定时中断
本设计电路采用定时器T0产生定时中断,由于本设计需要0.1s的基本时间,故选择其工作在定时方式1下。这时定时器T0是一个16位的计时器,由它产生50ms的基本定时中断,20次中断后将得到1s的时间,每60s设定时间减1。 1.4.4按键电路
按键电路由两个独立按键组成。独立式按键占用I/O口线较多,适用于按键较少的情况。矩阵式键盘占用的I/O口相对较少,适用于按键很多的情况。本实验共
7
设置2个按键,每个按键分别完成设置和开始的功能。其电路连接图如图3所
示。
图3 按键电路图
1.4.5 继电器电路
继电器电路将采用P3.0口驱动,根据实验要求,当按下开始键后,P3.0变为高电平,继电器开关断开,用电器工作,直到计时结束数码管全灭时P3.0口输出变为低电平,继电器吸合,用电器被断开,工作结束。其电路连接图如图4所示。
图4 继电器电路图
8
1.4.6显示电路
对于显示电路,本设计采用2位8段共阴极LED数码管显示。上电显示隐含上电时间10min。两位数码管在亮灭间闪烁显示,观察到数码管在1,0间跳转。当数码管闪烁显示时,表示系统处于等待状态。此时按SET设置键,我们能够增加倒计时的时间,时间范围为1-99min。我们按下START开始键后数码管停止闪烁,定时器开始倒计时。我们能看到数码管逐分倒计时,直到计时结束,数码管全灭。其显示电路图如图5所示。
图5 显示电路图
9
第2部分 程序设计
2.1 整体程序结构
硬件电路采用动态扫描方式,编程时要不停的扫描。
由于只有两位LED数码管,且扫描频率为50Hz,所以每个数码管点亮时间为10 ms。本实验采用最常用的主程序流程图。主程序执行它初始化以后,即进入循环扫描程序。其他所有的功能模块如设置时间输入,计时等都以中断方式切入。
2.2 资源分配
硬件资源分配如下:
INT0 功能键SET,边沿触发 INT1 功能键STRAT,边沿触发 P1.0-P1.7 LED段码输出,高电平有效
P0.0 LED数码管分十位阴极,低电平有效 P0.1 LED数码管分个位阴极,低电平有效 P3.0 继电器驱动输出,低电平有效
T0 16位计时器,系统时钟,10ms中断一次T1 16位计时器,计时时钟,0.1s中断一次
2.3 程序流程图
开始 10 初始化 主程序 初值化 显示扫描
数字定时器主程序流程图
显示时间 11 十位 个位
取整 取余
除以10
P1 P0
数字定时器显示子程序流程图
CLK
装载初值 12 该位LED闪烁
N
Y
N
Y
N
Y
计时时钟程序流程图
/*************************
* 按下set键,启动时间加1,数码管闪烁显示;
* 按下start键,默认10,按过set键则是显示值,不闪烁,*倒计时显示剩余时间,时间到,灯灭,数码管显示 “--”
13
***********************/ #include #define uchar unsigned char #define uint unsigned int uchar time_count;//定时器溢出计数 uchar time_sec;//定时 秒 uchar time_min;//定时 分 uchar time_set;//设定启动时间 uchar time_left; uchar display_type; sbit output=P3^0; sbit led0=P0^0; sbit led1=P0^1; uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管段码表 void DelayMS(uint ms) { uchar t; while(ms--)for(t=0;t<120;t++); } void DisplaySet()//未启动时,闪烁显示 { led0=0; //十位 P1=DSY_CODE[time_set/10]; DelayMS(200); led0=1; //个位 led1=0; P1=DSY_CODE[time_set%10]; DelayMS(200); led1=1; 14 } void DisplayStart()//启动后,减小延时,不闪烁,显示剩余时间 { led0=0; //十位 P1=DSY_CODE[time_left/10]; DelayMS(10); led0=1; led1=0; //个位 P1=DSY_CODE[time_left%10]; DelayMS(10); led1=1; } void initial()//初始化 { time_count=0; time_sec=0; time_min=0; time_set=10; time_left=10; led0=1; //共阴,数码管全灭 led1=1; P1=0; P2=0; display_type=0; IE=0x87;//开中断 IT0=1; IT1=1; TMOD=0x01; //定时器 0 工作方式 1 TH0=0x3c; //定时50ms TL0=0xb0; } 15 void main()//主函数 { output=0; intial(); while(1) { switch(display_type) { case 0: DisplaySet(); break; case 1: DisplayStart(); break; case 2: led0=0; led1=0; P1=0x00; break; default: break; } } } void key_settime()interrupt 0 //外部中断0 { time_set++; if(time_set==100)//设置时间范围10~99分钟 time_set=10; display_type=0; time_left=time_set; } void key_start() interrupt 2 //外部中断1子程序 16 //开始键按下,启动定时器 { TR0=1;//启动定时器0 display_type=1; EX0=0; //屏蔽外部中断,按键无用;参照IE寄存器 EX1=0; output=1; } void timer0_min() interrupt 1 //单位为分钟 定时器0中断子程序 { TH0=0x3c; TL0=0xb0; //定时器重载初值 time_count++; if(time_count==20)//溢出20次,即定时20*50ms=1s { time_sec++; time_count=0; } if(time_sec==60) //1min { time_min++; time_sec=0; time_left=time_set-time_min; } if(time_min==time_set) //定时时间到,启动完成,关定时器,开外部中断 { output=1; TR0=0;//关定时器 IE=0x87;//开中断 display_type=2; time_count=0; time_sec=0; time_min=0; time_set=9; } } 17 6.系统调试和结果分析 采用proteus仿真,建立电路图如图6 图6仿真电路图 6.1仿真结果如下 上电后LED数码管显示隐含上电时间10min,闪烁显示程序处于等待状态。 18 图7隐含上电十分钟闪烁显示图 到相应的程序执行。 此时,主程序不断调用显示子程序以及按键电路情况,当检测到有键按下后,转.1当设置键被按下后,程序进入调时设置状态。按下SET键,可以将当前的计数单位值加1,直到加到99为最大值。按到最大值后继续按从1开始。设置时,数码管闪烁显示,为等待状态。 图8设置定时时间图 2.STRAT键按下后程序开始减1计数直到0,数码管逐分倒计时,同时继电器断开,220v用电器工作,直到计数值到0后,继电器吸合,用电器电源被切断停止工作。 19 图9倒计时用电器工作图 图10计时结束图 6.2实物结果如下 本实验实物采用学生用单片机开发板完成,图中连线全部采用排线连接这样节省了焊接这个步骤,使我们设计实验更加灵活方便。通过烧入软件,将程序设计所编好的代码烧入到单片机学习板中。由于继电器驱动220v用电器存在安全隐患,所以我们组在实物电路时采用继电器驱动右下角的单个led发光二级管。得到结果如下四图所示。 20 隐含上电十分钟闪烁显示图 设置定时时间图 21 倒计时led数码管被点亮图 计时结束图 7.问题和结论 本设计是一个采用了由内部振荡的时钟方式、程控扫描方式的独立式键盘、 22 动态显示LED数码管和继电器控制用电器电路组成的系统。因此该系统使用的电子器件少、外围电路简单,定时精准,使用的I/O少,系统消耗的功耗小,剩余的I/O口多便于扩展其他功能。但是另一方面,本系统由于使用了两个独立按键和动态显示的LED数码管,所以对CPU的使用率相对较高。 本实验在设计中出现了几个问题,但最终通过我和组员的讨论得到了解决。首先问题出现在开始在主程序的循环中没有添加调用显示子程序的语句,导致在没有按键按下的情况下LED数码管没有显示。当在主程序循环检测按键的过程中添加了调用显示子程序的语句后就解决了这一问题。其次在继电器电路设计的时候我们遇到了仿真后继电器不工作的问题,一是我们选择的继电器规格不正确,二是仿真时我们设计的电路是继电器在低电平的状态下继电器吸合,而我们程序中最后3.0的输出的是高电平导致继电器不工作。我们通过修改程序和选择适当的继电器(5v)解决了上面的问题。最后是我们做的实物电路,由于刚开始学习单片机对开发板也不是很了解,导致我们在进行实物设计时老是数码管显示出问题,并且伴随蜂鸣器发出杂音。我们通过了解实物开发板的内部构造,拔出了三个跳线帽,解决了我们的问题。经过了多次修改我们的实验终于成功了,得到了按照实验要求的相应结果。 23 因篇幅问题不能全部显示,请点此查看更多更全内容