简易电子表课程设计报告.docx
《简易电子表课程设计报告.docx》由会员分享,可在线阅读,更多相关《简易电子表课程设计报告.docx(33页珍藏版)》请在冰点文库上搜索。
简易电子表课程设计报告
一、设计目的………………………………………………………………1
二、方案论证………………………………………………………………1
2.1方案论证与设计…………………………………………………1
2.1.1.控制部分的方案选择…………………………………………1
2.1.2显示部分的方案选择…………………………………………1
2.1.3系统基本方案选择和论证……………………………………1
2.2单片机原理…………………………………………………………2
2.3LED显示数码管……………………………………………………2
三、器件简述…………………………………………………………………3
3.1主要单元电路器件…………………………………………………3
3.1.1单片机主控制模块……………………………………………3
3.1.2按键电路模块…………………………………………………4
3.1.3时钟电路………………………………………………………5
3.2其他元器件…………………………………………………………6四、结构设计………………………………………………………………6
4.1显示部分设计………………………………………………………6
4.2整体设计…………………………………………………………6
4.3系统软件设计………………………………………………………7
4.3.1程序流程图……………………………………………………7
4.3.2软件调试………………………………………………………10
五、实验测试………………………………………………………………10
5.1硬件测试……………………………………………………………11
5.1软件测试……………………………………………………………11
5.2测试结果分析与结论………………………………………………11
六、课程设计小结…………………………………………………………11
七、参考文献…………………………………………………………………12
附录A…………………………………………………………………………13
附录B…………………………………………………………………………14
附录C…………………………………………………………………………22
第一章设计目的
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要的
作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
本课程设计是基单片机原理与接口技术的简单应用。
运用所学的单片机原理和接口技术知识完成数字电子表的设计。
电子表已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使电子表具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
尽管目前市场上已有现成的电子表集成电路芯片出售,价格便宜、使用也方便,但鉴于电子表电路的基本组成包含了数字电路的主要组成部分,因此进行电子表的设计是必要的,用汇编设计电子表显示程序,要求根据输入程序显示电子表画面。
研究电子表及扩大其应用,有着非常现实的意义。
第二章方案论证
2.1方案论证与设计
2.1.1.控制部分的方案选择
1)用可编程逻辑器件设计。
可采用ALTERA公司的FLEX10K系列PLD器件。
设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。
但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。
从成本上来讲,用可编程逻辑器件来设计也没有什么优势。
2)用STC16位单片机设计。
STC16位单片机有丰富的中断源和时基,方便本实验的设计。
它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。
I/O口功能也比较强大,方便使用。
用STC16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。
这些都方便对设计进行扩展,使设计更加完善,成本也相对低一些。
2.1.2显示部分的方案选择
LED数码管显示方案
虽然液晶显示效果出众,可以运用菜单项来方便操作,但是在显示时,特别是使用秒表功能时扫描速度跟不上,屏幕会有明显的闪烁。
而且由于61板的存储空间有限,液晶显示就不能与语音播抱程序同时实现。
这些大大影响了电子万年历的性能。
相比液晶显示,采用8段数码管既经济实惠,在效果上也可以加入语音报时功能,操作比较液晶显示来说虽然略显繁琐,但总体也还可以做到比较人性化
2.1.3系统基本方案选择和论证
1.单片机芯片的选择方案
采用89C52芯片作为硬件核心,采用FlashROM,内部具有8KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
2.显示模块选择方案和论证:
方案一:
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.
方案二:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。
所以采用了LED数码管作为显示。
3.时钟芯片的选择方案和论证:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
如果要求的场合较严格,可以考虑使用ds1302时钟芯片。
这里采用11.0592MHZ晶振实现。
4.键盘的选择方案和论证:
方案一:
矩阵式键盘节约口线,适用于键盘较多的场所,但程序比较复杂
方案二:
独立式键盘程序编写比较简单,灵活,在按键较多的情况下占用口线较多,本课题中只有三个按键,所以本方案更适用于该设计。
5.电路设计最终方案决定
综上各方案所述,对此次作品的方案选定:
采用STC89C52作为主控制系统;11.0592MHZ晶振提供时钟;三个独立式按键;LED数码管动态扫描作为显示。
2.2单片机原理
单片机就是简化的微型计算机。
CPU中本身自带存储器ROM和RAM。
CPU片内也有总线。
IC(集成电路)技术是将电路通过特殊工艺做在一块硅基片上封装成芯片,比如CPU,片外存储器等等。
将单片机CPU(比如C52系列),晶振,存储器,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等通过PCB工艺(比如SMT贴片,或者插装)做在环氧树脂板上。
这样才是一个完整的单片(做在一块PCB板上)的微型计算机。
2.3LED显示数码管
常见的LED显示具有清晰明亮的特点。
是显示接口也是绝大多数单片机应用系统必备的部件之一。
发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。
它由若干个发光二极管按一定的规律排列而成。
当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。
1.显示器的结构
常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。
1位显示器由8个发光二极管组成,其中7个发光二极管a~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。
图1
第三章器件简述
3.1主要单元电路的器件
3.1.1单片机主控制模块
AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
如图所示。
1.内部结构
按功能分为8部分:
CUP,程序存储器,数据存储器,时钟电路,串行口,并行I/O口,中断系统,定时/计数器。
2.引脚定义及功能
1).电源及时钟引脚
Vcc:
接+5V电源
Vss:
接地
XTAL1和XTAL2:
时钟引脚,外接晶体引线端。
当使用芯片内部时钟时,此两引脚端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
2).控制引脚
RST/Vpq:
RST是复位信号输入端,Vpd是备用电源输入端。
当RST输入端保持2个机器周期以上高电平时,单片机完成复位初始化操作。
当主电源Vcc发生故障而突然下降到一定低电压或断电时,第2功能Vpd将为片内RAM提供电源以保护片内RAM中的信息不丢失。
ALE/PROG:
地址锁存允许信号输入端。
在存取外存储器时,用于锁存低8位地址信号。
当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。
此引脚的第2功能PROG是对片内带有4K字节EPROM的8751固外程序时,作为编程脉冲输入端。
PSEN:
程序存储器允许输出端。
当片外程序存储器的读选通信号,低电平有效。
CPU从外部程序存储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号。
EA/Vpp:
程序存储器地址允许输入端。
当EA为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令;当EA为低电平时,CPU只执行片外程序存储器指令。
3).I/O口引脚
P0.0~P0.7:
P0口8位双向I/O口;
P1.0~P1.7:
P1口8位准双向I/O口;
P2.0~P2.7:
P2口8位准双向I/O口;
P3.0~P3.7:
P3口8位准双向I/O口。
3.片外总线结构
分为三部分:
数据总线DataBus(DB),地址总线AddressBus(AB),控制总线ControlBus(CB).
STC89C52
图2
3.1.2按键电路
当有键按下时,对三个口分别送“0”,分别进行调节选择,以及对时间的更改。
还能对秒表限定时间,计时到规定时间停止并使发光二极管点亮。
秒钟计时能精确到0.01秒。
图3
3.1.3时钟电路
晶振:
本次设计采用的是11.0592M的晶振,电路图如下:
图4晶振电路
两只电容在20pF~100pF之间取值,其取值在60pF~70pF时振荡器频率稳定性较高,按照一般经验,外接晶体时两个电容的取值为30pF;外接陶瓷振荡器是两电容的典型值是47pF。
⑷复位电路:
在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便可实现初始化状态服务。
为保证应用系统可靠的复位在设计复位电路时,通常使RST引脚保持4ms以上的高电平,只要RST保持高电平,MCS-51单片机就会循环复位;当RST从高电平变为低电平时,MCS-51单片机就从0000H地址开始执行程序,在单片机复位的有效期间,ALE、PSEN引脚输出高电平。
本次设计采用的是手动复位,其电路图如下:
有关计算说明:
∵时钟周期T=1/fose=1/12M=1μs
∴24T=24μs
τ=1/RC=1/(51*10的三次方*1*10的负六次方)≈20>24T
τ闭=1/R’C=1/(1K//51K*10负六次方)≈1000>24
3.2其他元器件
电阻,电容,发光二极管。
第四章结构设计
4.1显示部分设计
LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多时间,在单片机没有太多实时测控任务的情况下可以采用。
本系统需要采用8位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。
图5
4.2整体设计
实现过程:
单片机利用自身定时器计时,经软件程序处理后输出。
4.3系统软件设计
4.3.1程序流程框
1)主程序模块
主程序主要用于系统初始化:
设置计时缓冲区的位置及初值,设置89C52的工作方式、定时器的工作方式和外部中断等参数。
主程序流程如下图所示。
开始
定义堆栈区
EX0、T0、T1、数据缓冲区、标志位初始化
调用键盘扫描程序
否
是C/R键?
是
地址指针指向计时缓冲区
调用时间设置程序
主程序流程图
(2)计时模块
即定时器0中断子程序,完成刷新计时缓冲区的功能。
系统使用12MHz的晶振,假设定时器0工作在方式2,则定时器的最大定时时间为256us,这个值远远小于1s。
因此本系统采用定时器与软件循环相结合的定时方法。
设定时器0工作在方式2,每隔250us溢出中断一次,则循环中断4000次延时时间是1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:
00:
00。
因定时器0工作在方式2,则250us定时对应的定时器初值为:
256-250us/1us=0x06H,即TH0=0x06H,TL0=0x06H。
但应当指出:
CPU从响应T0中断到完成定时器初值重装这段时间,定时器T0并不停止工作,而是继续计时。
因此,为了确保T0能准确定时250us,重装的定时器初值必须加以修正,修正的定时器初值必须考虑到从原定时器初值中扣除计数器多计的脉冲个数。
由于定时器计数脉冲的周期恰好和机器周期吻合,因此修正量等于CPU从响应中断到重装完TL0为止所用的机器周期数。
CPU响应中断通常要3~8个机器周期。
经过测试,定时器0重装的计数初值设为0x07H~0x08H,可以满足精度要求。
另外,MCS-51单片机只有二进制加法指令,而时间是按十进制递增,因此用加法指令后必须进行二-十进制转换。
计时模块流程图如下图所示。
保护现场
重装定时器初值
循环次数加1
否
满4000次?
是
秒单元加1
否
60s到?
是
秒单元清0,分单元加1
否
60分到?
是
分单元清0,时单元加1
否
24小时到?
是
时单元清0
恢复现场
返回
计时模块流程图
4.3.2软件调试
第五章实验测试
5.1硬件测试
(1)脱机检查。
用万用表逐步按照电路原理图检查印制电路板中所有器件的各引脚,尤其是电源的连接是否正确;检查数据总线、地址总线和控制总线是否有短路等故障,顺序是否正确;检查各开关按键是否能正常开关,是否连接正确;各限流电阻是否短路等。
(2)联机调试。
暂时拔掉AT89C52芯片,将仿真器的40芯仿真插头插入AT89C52的芯片插座进行调试,检验键盘/显示接口电路是否满足设计要求。
可以通过一些简单的测试软件来查看接口工作是否正常。
5.2软件测试
软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现硬件故障。
程序的调试应一个模块一个模块地进行,首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。
联调需要注意的是,各程序模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。
调试的基本步骤如下:
(1)用仿真器修改显示缓冲区内容,屏蔽拆字程序,调试动态扫描显示功能。
例如将DISP0~DISP5单元置为“012345”,应能在LED上从左到右显示“012345”。
若显示不正确,可在DISP子程序相应位置设置断点,调试检查。
然后用仿真器修改计时缓冲区内容,调用拆字程序,调试显示模块DISPLAY。
(2)运行主程序调试计时模块,不按下任何键,检查是否能从由00:
00:
00开始正确计时。
若不能正确计时,则应在定时器中断服务子程序中设置断点,检查HOUR、MIN、SEC、MSEC单元是否随断点运行而变化。
然后屏蔽缓冲区初始化部分,用仿真器修改计时缓冲区内容为23:
58:
48,运行主程序(不按下任何键),检验能否正确进位。
(3)调试键盘扫描模块KEYSCAN,先用延时10ms子程序代替显示子程序延时消抖,在求取键号后设置断点,中断后观察A累加器中的键号是否正确;然后恢复用显示子程序延时消抖,检验与DISPLAY模块能否正确连接。
(4)调试时间设置模块MODIFY。
首先屏蔽COMB子程序,单独调试键盘设置模块KEYIN,观察显示缓冲区DISP0~DISP5单元的内容是否随键入的键号改变,以及键号能否在LED上显示。
然后屏蔽KEYIN子程序,单独调试合字模块COMB,分别将R1设置为时间设置缓冲区和闹钟值寄存区的首地址,修改显示缓冲区内容,运行程序后查看时间设置缓冲区HOUR、MIN、SEC单元,最后联调MODIFY模块。
(5)运行主程序联调,检查能否用键盘修改当前时间。
5.3测试结论
1、用12MHZ晶振准确计时,以数字形式显示时、分、秒的时间。
2、小时以24小时计时形式,分秒计时为60进位。
3、校正时间功能,即能随意设定走时时间。
4、秒表功能,一旦走时到该设定时间,能以声或光的形式告警提示。
5、设计系统时钟电路、复位电路。
6、计时功能,能进行一分钟内计时,精确到10ms。
七、课程设计小结
通过本次课程设计,我去认真再次学习了C语言,以及熟练了PROTEUS和KEIL软件的运用,还更好的锻炼了用VISIO画流程图。
有时间还是会更多锻炼的。
感觉这些软件都越来越顺手了,挺开心。
发现自己真是不逼就不学的人。
另外,我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。
损耗了过多的内存资源。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。
同时在课程设计过程中,我们巩固和学习了我们的单片机知识。
相信这对我以后的课程设计和毕业设计将会有很大的帮助!
参考文献
[1]《单片机应用系统设计技术–基于C51的Proteus仿真》(第二版)[M]张齐朱宁西编著北京电子工业出版社
[2]《单片机应用系统设计技术–基于C51的Proteus仿真实验与解题指导》(第二版)[M]张齐编著北京电子工业出版社
[3]《单片机原理及其接口技术》(第二版)[M]胡汗才编著北京大学出版社
[4]《51系列单片机设计实列》[M]楼然苗李光飞编著北京航空航天大学出版社
[5]《单片微机测控系统设计大全》[M]王福瑞编著北京航空航天大学出版社
[6]《单片机实用技术问答》[M]谢宜仁主编人民邮电大学出版社
附录A
1.元器件清单
序号
名称
代号
型号
数量
1
电阻
R1,R2,R3,R4,R5,R6R7,R8,R17
330Ω
9
2
电阻
R9,R10,R11,R12,R13,R14,R15,R16
1kΩ
8
3
电阻
R20,
10KΩ
1
4
电容
C1,C2,
30pF
2
5
电解电容
C3,
10uF
1
6
按钮
B1,B2,B3,B4
4
7
数码管
A1,A2
SM42044
2
15
发光二极管
V
1
2.Proteus仿真原理图
3.实验源程序:
#include"reg52.h"
//unsignedcharcodedsp_code_ca[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
Unsignedcharcodedsp_code_ca[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedintmtflag,tflag;
unsignedchardspflag;
unsignedchartsan,x,y,mis,second,hour,miniute,temp;
unsignedchardflag;
unsignedchart,se,min,ho,sec,sec1;
//sbitbee=P3^7;扩展蜂鸣器
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitled=P1^2;
voiddelay(unsignedcharn)
{
unsignedchari;
while(n--)
{
for(i=0;i<112;i++);
}
}
voiddelay1(unsignedcharm)
{
while(m--);
}
voiddisplay(unsignedchard,unsignedchara);
voiddisplay1(unsignedchard,unsignedchara);
voidinit_ex0();
voidmain()
{
se=0;min=0;hour=0;led=1;sec1=30;
init_ex0();
TMOD|=0x22;
TH0=0x06;
TL0=0x06;
EA=1;
ET0=1;
TMOD|=0x02;
TH1=0x06;
TL1=0x06;
EA=1;
ET1=1;
while
(1)
{second=se;miniute=min;hour=ho;
while(x==0)
{
if(key2==0){delay(100);if(key2==0)y=~y;}
if(y)
{
display1(sec1,0);
display1(sec,4);
display1(mis,6);
if(sec==sec1)
{
led=0;
TR1=0;
}
if(key1==0)
{
delay(100);
if(key1==0)
{
TR1=~TR1;
}
}
if(TR1==0&&key2==0){sec=0;mis=0;}
}
else
{
TR1=0;
TR0=1;
led=1;
display(second,6);
display(miniute,3);
display(hour,0);
}
}
while(x==1)
{
TR0=0;y=0;
led=1;
if(key1==0){delay(100);if(key1==0)se++;if(se==60)se=0;}
if(t<100)
{
display(se,6);
display(min,3);
display(ho,0);
t++;
if(t==99)