电子表设计.docx

上传人:b****5 文档编号:4610258 上传时间:2022-12-07 格式:DOCX 页数:26 大小:229.78KB
下载 相关 举报
电子表设计.docx_第1页
第1页 / 共26页
电子表设计.docx_第2页
第2页 / 共26页
电子表设计.docx_第3页
第3页 / 共26页
电子表设计.docx_第4页
第4页 / 共26页
电子表设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

电子表设计.docx

《电子表设计.docx》由会员分享,可在线阅读,更多相关《电子表设计.docx(26页珍藏版)》请在冰豆网上搜索。

电子表设计.docx

电子表设计

摘要

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次设计是以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子表,它由5V直流电源供电,通过6个共阴极七段数码管能够准确显示时间的时、分、秒,还可以通过键盘校准时间,设置闹钟以及整点报时,和闹铃。

该电子表的校准时间可以校准到秒,精确度极高。

关键词:

键盘;MAX7219;AT89C51;共阴极七段数码管

 

目录

摘要…………………………………………………………………………3

关键词………………………………………………………………………3

引言…………………………………………………………………………5

一、方案的选择和比较……………………………………………………5

1.1、数字时钟方案…………………………………………………………5

1.2、数码管显示方案………………………………………………………5

1.3、单片机型号的选择……………………………………………………5

二、硬件电路设计…………………………………………………………6

2.1、系统总体设计…………………………………………………………6

2.2、振荡电路设计…………………………………………………………6

2.3、复位电路………………………………………………………………6

2.4、键盘电路设计…………………………………………………………7

2.5、显示电路设计…………………………………………………………7

2.6、蜂鸣器电路设计………………………………………………………8

三、软件设计…………………………………………………………………8

3.1、软件规划………………………………………………………………8

3.2、主程序…………………………………………………………………8

3.3、中断子程序……………………………………………………………8

3.4、LED显示子程序………………………………………………………8

3.5、键盘子程序……………………………………………………………9

四、元件清单………………………………………………………………14

五、系统调试………………………………………………………………14

六、小结……………………………………………………………………14

参考文献……………………………………………………………………14

附录一程序清单…………………………………………………………15

附录二电路图……………………………………………………………23

 

 

引言

自从电子表发明以来,由于电子表电子表计时准确,不用每天上弦,价格便宜,很受消费者喜爱,。

这次根据老师提供的微机课程设计的题目,我决定选择了电子表设计,设计中以AT89C51芯片为核心,并且选用专门驱动LED共阴极数码管的MAX7219芯片制作显示电路,通过软件设计,可以正常的完成时间的调整,闹钟的设置,整点报时以及闹铃功能,

我经过仔细分析设计题目的要求,确定了电子表的设计方案,并且用Proteus软件画出原理图,再用Keil51软件把程序调试出来,

最后用Proteus软件把硬件电路和软件结合起来进行硬件和软件的整体调试。

最后才把硬件和软件都调试到最佳。

一、方案的选择和比较

1.1、数字时钟方案。

方案一:

本方案采用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路的DS1302,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部还有有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

方案二:

本方案完全用软件实现数字时钟。

原理为:

在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路和实际情况的考虑,本设计采用方案二完成数字时钟的功能。

1.2、数码管显示方案

方案一:

静态显示。

所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:

动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。

显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。

调整参数可以实现较高稳定度的显示。

动态显示节省了I/O口,降低了能耗。

从节省I/O口和降低能耗出发,本设计采用方案二。

1.3、单片机型号的选择

通过对多种单片机性能的分析,最终认为89C51是最理想的电子时钟开发芯片。

89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。

二、硬件电路设计

2.1、系统总体设计

本系统利用单片机AT89C51制作简易电子表,用一个4×4的编码键盘作为电子表的输入设备,由MAX7219驱动六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。

系统的而总体框图如图1所示。

2.2、振荡电路设计

AT89C51芯片内部有一个高增益反相放大器,其输入端为引脚XTAL1,输出端为引脚XTAL2。

通过这两个引脚在芯片外并接石英晶体振荡器和两只电容器(电容C1和C2一般取30pF)。

石英晶体振荡器为感性元器件,与电容构成振荡电路,为片内放大器提供正反馈和振荡所需的移相条件,从而构成一个稳定的自激振荡器,如图2所示。

图2、振荡电路

2.3、复位电路

本次设计的复位电路为按键电平复位电路其电路如图3所示。

图3、复位电路

图1、系统总体框图

2.4、键盘电路设计

4×4键盘为矩阵键盘,采用逐行扫描查询工作方式。

由于按键数量比较少(16个键),为了节省元件,降低成本,和简化电路,采用非编码键盘,按键信息通过键盘子程序来获取。

键盘的布局示意图如图4所示。

其中0~9为数字键,另外6个键为功能键。

0

1

2

3

4

5

6

7

8

9

校时

报时开关

设置

闹钟

闹钟

开关

确认

取消

图4键盘布局示意图

按键的去抖动采用软件方式。

在检测到有键按下时,执行延时子程序,再确认该键是否仍保持闭合状态。

若仍然保持为闭合状态,则确认为该键闭合;若延时后,没闭合,则说明是抖动。

2.5、显示电路设计

由于系统需要6位显示,采用LED数码管进行显示是一种经济实用的方法。

由于动态显示速度更新快,电路比较简单,成本也比较低,所以我们采用动态显示。

MAX7219是一种串行接口的8位LED数码管显示驱动器。

它与通用微处理器

只有3根串行线相连,最多可驱动8个共阴极数码管或64个发光二极管。

它内部有可存储的显示信息的8×8静态RAM,并且动态扫描电路,以及段、位驱动器。

可以节省I∕O口,以及可以减小编程难度。

6个LED排成一行,最左一个显示时间的秒的个位。

从右往左,依次是时的十位、个位,分的十位、个位,秒的十位、个位。

其电路如图5所示。

图5、显示电路

2.6、蜂鸣器电路设计

用Q9012晶体管进行声音放大,Q9012价格便宜,设计的电路也简单,能够节省成本。

其电路如图6所示。

图6、蜂鸣器电路

三、软件设计

3.1、软件规划

采用模块程序设计的思想编写软件,整个系统的软件由一个主程序和多个子程序组成,每个子程序作为一个相对独立的模块,实现一个基本的功能,可以为多个程序共享。

这样,便于程序的编写、调试,也容易分工完成。

体现了结构化编程的优势。

电子表系统的整个软件由主程序和显示子程序、键盘扫描子程序、延时子程序、蜂鸣器子程序等多个子程序组成。

在程序中,6EH,6DH,6CH,6BH,6AH,69H分别存放时的十位,个位,分的十位,个位,秒的十位,个位。

5BH,5AH,59H,分别存放显示的时,分,秒。

58H,57H,26H分别存放闹钟设置的时间的时,分,秒。

4FH存放中断计时的次数。

红灯的亮∕灭代表闹钟的开启∕关闭,绿灯的亮∕灭代表整点报时的开启∕关闭。

3.2、主程序

主程序的功能包括对系统的初始化,定时器T0装载初始值,开启定时器T0中断,调用显示子程序,然后调用键盘子程序,再判断整点报时是否开启,闹钟是否开启。

如果整点报时开启,则转到相应的子程序判断它是否是整点,如果是整点,则蜂鸣器响1秒钟,否则返回到主程序

如果闹钟开启,则转到相应的子程序判断它是否是到了设置的闹钟时间,如果是到了,则蜂鸣器响15秒钟,否则返回到主程序。

主程序流程图如图7所示。

3.3、中断子程序

中断子程序的功能主要是自动计时,每50ms中断一次,中断了20次,则代表1秒钟,则59H单元内容加1,同时4FH单元内容清零,如果59H单元内容满了60,则5AH单元内容加1,同时59H单元内容清零,如果5AH单元内容满了60,则5BH单元内容加1,同时59H单元内容清零,如果5BH单元内容满了24,则5BH单元内容清零,中断返回到主程序

中断子程序图如图8所示。

3.4、LED显示子程序

LED显示采用了MAX7219驱动芯片,该芯片简单,实用。

只要对MAX7219的控制寄存器进行准确地设置,把显示的的亮度设置为最亮,扫描范围设置为6个数码管,设置译码方式为BCD译码。

设置MAX7219的工作方式为正常即可。

再把显示时间的时的十位,个位,分的十位,个位,秒的十位,个位分别存放到MAX7219的01H、02H、03H、04H、05H、06H显示内容寄存器中,该芯片会自动扫描,显示在相应的数码管上。

LED显示子程序流程图如图9所示。

3.5、键盘子程序

键盘扫描程序的功能,首先判断键盘上有无键按下。

如果有按下,则延时一段时间,再判断是否按下,再等待键释放,最后将相应的键码存放到R1存储单元中,再判断是数字键,还是功能键,如果是功能键则执行相关的功能,如是数字,看是否按了校时键或者设置闹钟键,如果按了,则要将相关数字存到相应的存储单元。

否则返回到主程序

该键盘采用延时的方法去除键的抖动影响,延时时间为10ms。

键盘程序流程图如图10所示。

 

图7、主程序流程图

 

重装定时器初值

循环次数加1

满20次?

秒单元加1

60s到?

秒单元清0,分单元加1

60分到?

分单元清0,时单元加1

24小时到?

时单元清0

图8、中断程序流程图

图9、LED显示子程序流程图

       图10、键盘程序流程图

四、元件清单

元件名称数量

AT89C511个

1K电阻3个

12MHZ晶振1个

30PF电容2个

100欧电阻1个

按钮开关17个

蜂鸣器1个

Q9012晶体管1个

红色发光二极管1个

绿色发光二极管1个

共阴极七段数码管6个

MAX72191个

10K电阻1个

330欧电阻1个

10uF电解电容1个

五、系统调试

我首先运用软件Keil51检查程序是否有语法错误,再生成Hex文件,装载到AT89C51芯片中,再运用Proteus软件进行硬件的调试,以及修改程序,完成相应的功能。

该系统调试主要是键盘程序调试和显示程序调试,特别是显示时延时间的掌握,我采取一步一步调试的方法,先调试键盘程序,再调试显示程序,最后整体调试。

每次调试都会遇到很多问题,要一个一个功能键去调试,最后要每个功能键都能正常发挥功能。

这次运用Proteus软件将硬件和软件结合起来一起调试,方便简单,很容易分析自己程序的故障。

六、小结

通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。

损耗了过多的内存资源,但我经过我不断的优化,程序已经比先前更短一些。

通过本次设计程序,也加深了我对汇编语言的指令的理解,特使跳转指令的范围要特别注意,还要注意十进制和十六进制的BCD码转换的问题。

也让我深深体会到编程时一定要严谨,才能减少不必要的错误。

当我们发现错误时,我们要学会分析错误的原因,不断的分析自己的程序,一定要思维严谨,可能一个小问题的忽视,就会导致程序的不成功。

通过不断的查阅相关的资料,也让我学会了读懂别人的程序,也学会了修改别人的程序,来达到为我所用的目的。

经过几天的努力,最后我终于成功了,我感到非常高兴,因为我曾经想过放弃编写了,当我经过一段思想挣扎,我决定再尝试一下,不断的尝试,不断的失败,到最后才成功。

也让我体会到我们不要轻易的放弃自己想做的事。

参考文献

【1】严天峰.单片机应用系统设计与仿真调试【M】.北京:

北京航空航天大学出版社,2005.

【2】王守中,聂元铭.51单片机开发入门与典型实例(第二版)【M】.北京:

人民邮电出版社,2009.

【3】李广弟,朱月秀,冷祖祁.单片机基础(第三版)【M】.北京:

北京航空航天大学出版社,2007.

【4】李朝青.单片机原理及串行外设接口技术【M】.北京:

北京航空航天大学出版社,2008.

附录一程序清单

DINBITP2.0

LOADBITP2.1

CLKBITP2.2

ORG0000H

LJMPMAIN

ORG000BH

LJMPCLOCK

ORG0100H

MAIN:

MOVSP,#70H;初始化

MOV6EH,#00H

MOV6DH,#00H

MOV6CH,#00H

MOV6BH,#00H

MOV6AH,#00H

MOV69H,#00H

MOV59H,#00H

MOV5AH,#00H

MOV5BH,#00H

MOV58H,#00H

MOV57H,#00H

MOV56H,#00H

MOV4FH,#00H

CLRP1.1

CLRP1.2

MOVTMOD,#01H;设置定时器T0的工作方式为1

MOVTL0,#0B0H;转载计数初值

MOVTH0,#3CH

SETBEA;开启中断

SETBET0

SETBTR0

START:

LCALLDISP;调用显示程序

LCALLKEY;调用键盘程序

START1:

JBP1.2,K1;判断报时开关是否开启

START2:

JBP1.1,K2;判断闹钟开关是否开启

LJMPSTART

K1:

LCALLBS

LJMPSTART2

K2:

LCALLNZ

LJMPSTART

KEY:

MOVR4,#00H;设置初值

MOVR3,#0F7H;扫描初值

MOVR1,#00H;键码寄存器清零

L2:

MOVA,R3;开始行扫描

MOVP3,A;将扫描值输出至P3

MOVA,P3;读入P3值,判断是否有键被按下

MOVR4,A;存入R4,以判断是否放开

SETBC

MOVR5,#04H;扫描P3.4~P3.7

L3:

RLCA;将按键值左移一位

JNCKEY2;有键按下C=0,跳至KEY2

INCR1;C=1,没键按下,键码寄存器加1

DJNZR5,L3;4列扫描是否扫描完毕

MOVA,R3;扫描值载入

SETBC

RRCA;扫描下一行

MOVR3,A;存回扫描寄存器

JCL2;C=1,程序转到L2处

JNBP1.3,K5;判断是否是在设置闹钟

JNBP1.4,K5;判断是否是在校时

RET

K5:

LJMPKEY

KEY2:

LCALLDELAY1;调用显示子程序

D1:

MOVA,P3

XRLA,R4;与上次读入值作比较

JZD1;判断键是否松开

MOVA,R1;装载键码值

CLRC

SUBBA,#0AH;判断是数字键还是功能键

JNCGONGNENG

RET

GONGNENG:

MOVA,R1;判断是什么功能键

XRLA,#0AH

JZLOOP1

MOVA,R1

XRLA,#0BH

JZLOOP2

MOVA,R1

XRLA,#0CH

JZLOOP3

MOVA,R1

XRLA,#0DH

JZLOOP4

MOVA,R1

XRLA,#0EH

JZLOOP5

MOVA,R1

XRLA,#0FH

JZLOOP6

LOOP1:

CLRP1.4;校时功能键

CLRTR0

CLRET0

LCALLHC

LCALLKEY

LOOP2:

CPLP1.2;报时开关功能键

LJMPSTART

LOOP3:

CLRP1.3;设置闹钟键

LCALLHC

LCALLKEY

LOOP4:

CPLP1.1;闹钟开关键

LJMPSTART

LOOP5:

JNBP1.3,K3;确认键

JNBP1.4,K4

LJMPSTART

K3:

LCALLZH2

SETBP1.3

LJMPSTART

K4:

LCALLZH

LCALLDISP

SETBP1.4

SETBTR0

SETBET0

LJMPSTART

LOOP6:

SETBP1.3;取消键

SETBP1.4

SETBTR0

SETBET0

LJMPSTART

DISP:

LCALLLED8;显示子程序

RET

LED8:

CLRLOAD;MAX7219的控制寄存器设置

MOVR0,#0FH

MOVR1,#0AH;设置亮度为最亮

LCALLTRT;调用串行通信子程序

LCALLT12MS

MOVR0,#05H;设置扫描范围

MOVR1,#0BH

LCALLTRT

LCALLT12MS

MOVR0,#0FFH;设置译码方式为BCD译码

MOVR1,#09H

LCALLTRT

LCALLT12MS

MOVR0,#01H;设置工作方式为正常

MOVR1,#0CH

LCALLTRT

MOVA,5BH;显示数据按BCD码分离

ANLA,#0F0H

SWAPA

MOVR0,A

MOVR1,#01H

LCALLTRT;第1位数据送出

MOVA,5BH

ANLA,#0FH

MOVR0,A

MOVR1,#02H

LCALLTRT;第2位数据送出

MOVA,5AH

ANLA,#0F0H

SWAPA

MOVR0,A

MOVR1,#03H

LCALLTRT;第3位数据送出

MOVA,5AH

ANLA,#0FH

MOVR0,A

MOVR1,#04H

LCALLTRT;第4位数据送出

MOVA,59H

ANLA,#0F0H

SWAPA

MOVR0,A

MOVR1,#05H

LCALLTRT;第5位数据送出

MOVA,59H

ANLA,#0FH

MOVR0,A

MOVR1,#06H

LCALLTRT;第6位数据送出

RET

TRT:

CLRLOAD;LOA信号为低

NOP

MOVR2,#08H;第1次传送8位数据

MOVA,R1;地址传送

T_1:

CLRCLK;CLK信号置低

RLCA;移位传送

MOVDIN,C

LCALLT88;调用指令延时子程序

SETBCLK

LCALLT88

DJNZR2,T_1

LCALLT88

MOVR2,#08H;第2次传送8位数据

MOVA,R0

T2:

CLRCLK

T2T:

LCALLT88

RLCA

MOVDIN,C

LCALLT88

SETBCLK

LCALLT88

DJNZR2,T2

SETBLOAD

CLRCLK

LCALLT88

RET

ZH:

MOVR0,#6EH;校时数据的整合子程序

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV5BH,A;将6EH、6DH单元中的数据整合到5BH单元中

MOVR0,#6CH

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV5AH,A;将6CH、6BH单元中的数据整合到5AH单元中

MOVR0,#6AH

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV59H,A;将6AH、69H单元中的数据整合到59H单元中

RET

ZH2:

MOVR0,#6EH;闹钟数据整合的子程序

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV58H,A;将6EH、6DH单元中的数据整合到58H单元中

MOVR0,#6CH

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV57H,A;将6CH、6BH单元中的数据整合到57H单元中

MOVR0,#6AH

MOVA,@R0

SWAPA

DECR0

ORLA,@R0

MOV56H,A;将6AH、69H单元中的数据整合到56H单元中

RET

HC:

MOVR7,#06H;时间数据缓存子程序

MOVR0,#6EH

HC1:

LCALLKEY

MOVA,R1

MOV@R0,A

DECR0

DJNZR7,HC1

RET

BS:

MOVA,5AH;报时子程序

ADDA,59H

XRLA,#00H

JZBS1

RET

BS1:

LCALLSY

LJ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1