1、國立華僑大學第 I 页 数字时钟 设计报告课题: 简易数字时钟学 院: 信 息 学 院专 业: 集成电路设计与集成系统班 级: 10 集成姓 名: *学 号:*华侨大学II目 录一方案设计 31.1 设计要求 .31.2 系统分析 .31.3 系统方案31.3.1 方案设计 .31.3.2 方案论证 4二硬件设计 .42.1 控制芯片的介绍42.2 单片机最小系统.62.2.1 振荡电路 62.2.2 复位电路 62.3 显示电路设计.62.4 控制电路设计.72.5 元件清单8三软件设计 .83.1 程序设计思路83.2 C 语言程序代码 9四本次设计不足 .20五本次设计体会 .20华侨大
2、学3简易数字时钟摘 要:本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成数字时钟的硬件电路的。数字时钟电路主要由 STC89C51 单片机最小系统电路、七段数码管动态显示电路组成,它能实现时钟显示,日期显示,星期显示,整点报时,定时闹铃,秒表计时等功能。能通过按键进行时间调整,万年历调整,闹钟调整,秒表的开始,暂停及数据的存储,调用等。其中万年历可以以大月,小月,闰二月准确显示,秒表最多可以进行 60 组时间的存储与调用,查询每次计时时间,基本满足日常所需。(注:本次采用的是分块设计,总共 4 个模块,分为时钟模块,闹铃模块,万年历模块,秒表模块各个模块互不影响,可以自行删减
3、,截取所需。同时本电路采用的是三极管扩流,输入需要反相,由于开始没有注意到这个问题,吃了点亏)一 方案设计1.1 设计要求基本要求: 8 个数码管上显示,显示时间的格式为(假如当前时间是 19:32:20) “19-32-20”; 时间可以通过按键调整。发挥部分: 具有闹钟功能; 具有日历功能; 具有秒表功能; 其他可自由发挥。1.2 系统分析设计的电路主要是能记时,并将记时的多少通过显示电路显示出来计时可以通过控制电路查询出来。设计框图如图一所示; 华侨大学41.3 系统方案1.3.1 方案设计方案一:利用分分离门电路和集成块电路设计简易数字时钟;主要可分为五个功能模块:毫秒脉冲发生器、计数
4、器、译码显示电路、时序控制电路,存储电路。555 振荡器可作为脉冲发生电路,计数器和控制电路是系统的主要部分,计数器是用可加(减)的计数方法,分别采用 60 进制,31 进制,30 进制,29 进制,28 进制,24 进制,10 进制,7 进制计数的方式,可选用 74LS192,计时器完成计时功能;控制电路具有直接控制计数器的启动计数、暂停/连续计数、查询所计数、译码显示电路显示,存储等功能。设计框图如二所示;方案二:利用 STC89C51 单片机设计简易数字时钟。单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。单片机系统可分别在时钟模式,日历模式,闹钟模式,秒表模式下用
5、数码管显示相应的值,能用按键实现复位,调整等。本方案选用了 STC89C51 芯片(内部含有 4KB 的 flash及高低各 128 位的 RAM) ,不需要外扩展存储器,可使系统整体结构更为简单。设计框图如图三所示;1.3.2 方案论证方案一是用逻辑门搭建的,基本也能满足电路设计要求,但要做好是有很大的难度的,线非常之多,元件分散、多,容易把线接错,而且浪费;所以考华侨大学5虑采用了方案二以 STC89C51 芯片为中心控制系统,实现显示、键盘控制、响铃等功能,大大提高了系统的智能化,也使得系统所测结果精度大大提高。二 硬件设计2.1 控制芯片的介绍STC89C51 单片机的外型如图四所示。
6、单片机可分为通用型和专用型,种类繁多。这里我们主要介绍 STC89C51是一种低功耗、高性能、超抗干扰的单片机,指令代码完全兼容传统的 8051 单片机。12 时钟/机器周期和 6 时钟/机器周期可以任意选择,能处理 8 位数据的通用型单片机,具有 CMOS 工艺、芯片内集成了通用 8 位中央处理器,片内含4k 可反复擦写的 Flash 只读程序存储器(ROM), 支持 ISP(In-system programmable)功能。STC89C51 内部有 256RAM(高 128 和低 128),8 个中断源,4 个中断优先级, 3 个 16 位可编程定时计数器,2 个全双工串行通信口,看门狗
7、(WDT )电路,片内时钟振荡器。兼容标准 MCS-51 指令系统及 80C51 引脚结构。STC89C51 有 40 个引脚,32 个外部双向输入/输出(I/O)口。该芯片还具有 PDIP40、 TQFP44 和 PLCC44 三种封装形式,以适应不同产品的需求。外型图四和封装形式如图四所示。从外观上看单片机就是一块集成电路,它与在模拟电路和数字电路中学习过的集成电路电路最主要的区别是:普通集成电路电路的华侨大学6引脚功能基本上固定的,而单片机的一些引脚的功能是可以通过编程进行控制,一些引脚既可作输入又可作输出。由于 STC89C51 不仅支持程序的并行写入,而且支持 ISP 在线可编程的串
8、行写入,利用下载线将计算机将原程序编译后进行串行写入到 STC89C51,速度快、稳定性好,同时不需要 VPP 烧写高压,只要 45V 供电即可完成写入。单片机广泛用于工业控制、智能仪器仪表、计算机设备及网络、通信领域、家用电器、医用设备、军用设备等各个方面。对于单片机这样的集成电路,要设计让它完成一个特定的工作任务,除完成设计相关的硬件电路外,还要设计相应的控制软件,才能使整个电路按照设计要求自动地进行工作。所以,电子电路学习到单片机这个知识层次时,除要学习相关硬件知识,还学习相关软件设计知识,才能对单片机进行控制和应用。单片机的开发和应用,是利用硬件和软件的结合来实现的。由于单片机的功能强
9、大,充分理解各引脚功能,灵活编写控制程序去控制引脚功能,完成各种需要的设计。2.2 单片机最小系统2.2.1 振荡电路STC89C51 是内部具有振荡电路的单片机,只需在 18 脚和 19 脚之间接上石英晶体给单片机加上工作所需直流电源,振荡器就开始振荡起来。振荡电路就为单片机工作提供了所需要的时钟脉冲信号,使单片机的内部电路,单片机的内部程序(若有)开始工作起来。振荡电路不工作,整个单片机电路都不能正常工作。STC89C51 常外接 6 MHz、11.0592MHz、12 MHz 的石英晶体,本电路接入的是 12MHz 的石英晶体。 18 脚和 19 脚分别对地接了一个 30PF 的电容,目
10、的是防止单片机自激。如果从 18 脚输入外部时钟脉冲,则 19 脚接地。2.2.2 复位电路复位电路就是在 RST 端(9 脚)外接的一个电路,目的是当单片机上电开始工作时,内部电路从初始状态开始工作,或者在工作中要想人为的让单片机重新从初始状态开始工作。在时钟工作的情况下,只要 STC89C51 的复位引脚高电平保持两个机器周期以上的时间,STC89C51 便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且从地址 0000H 处开始读入程序代码而执行程序。该电路具有上电自动复位和手动复位功能,当上电时,根据电容两端电压不能突变,使 RST 有一个高电位,电路实现复
11、位,华侨大学7在很短一段图六 单片机双复位电路时间后电容充满,RST 通过电阻接地恢复低电位,单片机内部程序正常工作,同时在开关按下时,RST 直接与 5V 电压相连可实现高电平复位,而正常情况下通过电阻连接 GND,单片机内部程序可正常工作。具体电路如图六所示,由C3 和 R0 构成上电自动复位电路,S 实现手动开关复位。2.3 显示电路设计实验电路设计了一组数码管显示电路,电路如图七所示。八只数码管动态驱动显示。通过插接口 P0 接数码管七段显示段码端,通过插接口 P2 接每位数码管的位选端。单片机在输出七段显示码到 P0 的同时,提供哪一位数码显示的控制信号也输到 P2 上,通过延时 1
12、2 毫秒,在使下一个数码管点亮,一次类推,可利用余光效应,给人以八位数码管同时点亮的视觉效果。实现数码管的显示。同时需要注意的是 STC89C51 端口输出电流很小,不足以驱动八位数码管和蜂鸣器,所以需要通过三极管扩流,以下电路采用的是 NPN 型三极管 S9012进行扩流,是共阳数码管点亮。 (注:采用三极管扩流时 P2 应反相)图八图七 数码管显示电路2.4 控制电路设计华侨大学8控制电路主要由 6 个独立的按键组成,我们可以用按键来控制计时的开始、暂停、清零和查询。所有按键的一端接地,另一端与单片机的 P2 口的几个引脚相连。具体电路如下图八所示。图九图八 按键2.5 元件清单元件名 数
13、量STC89C51 1八段 4 位共阳数码管 2NPN 三极管( 9012) 91K 电阻 17无极性电容(22PF) 2电解电容 22uf 1排针 1有源蜂鸣器 110K 排阻 1轻触按键 5三位拨码开关 1晶振 12MHZ 1三.软件设计3.1 程序设计思路在硬件的基础上,可以通过软件完成时钟的设计。我用 7 个独立按键作为控制键。其中 P10,P11 ( 11,10,01,00)用于切换电路分别在时钟,万年历,闹华侨大学9钟,秒表模式下显示,P12 用于控制秒表开始暂停,P13 至 P16 分别用于调节时钟,闹钟时分秒及万年历年月日星期,在秒表计时模块,长按 P14,通过P15 可以进行
14、最多 60 组记录时间的重复调数, P16 为秒表清零键。其中时钟在四钟工作状态下都能正常计时,闹钟在秒表模式下不工作,是设计更加符合要求。3.2 C 语言程序代码#include#include#define uchar unsigned char#define uint unsigned int/*七段共阳管显示定义*/ uchar code dispcode=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xff;/此表为 L
15、ED 的字模, 共阳数码管不带小数点 0-9,带小数点 0-9,_ 和灭灯uchar xhaomiao61=0;/此数组用于秒表中记录 60 次的时间。uchar xmmiao61=0;/此数组用于秒表中记录 60 次的时间。uchar xfenzhong61=0;/此数组用于秒表中记录 60 次的时间。uchar LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7; / 各个数码管从左至右编号/*定义并初始化变量*/uchar seconde=0;/秒uchar minite=30;/分uchar hour=9; /时uchar week=7; /星期uchar
16、day=25;/日uchar month=3;/月uint year=12; /年uchar haomiao=0; /秒表毫秒uchar mmiao=0; /秒表秒uchar fenzhong=0; /秒表分钟uchar mstcnt=0;/定时器计数,定时 10ms,mstcnt 满 100,秒加 1uchar stopwatch=0; /定时器好秒表计数,定时 10ms,满 1,毫秒加 1uchar shi=0; /闹铃功能时uchar fen=0; /闹铃功能分uchar miao=0; /闹铃功能秒uchar bjcs; /报警次数uchar y=1; /定义一个 y,使得当时,分,秒
17、,都为 0 时,日只自加一次uchar z=1; /定义一个 z,使得当整点时只报时一次uchar x=0; /定义一个 x,用于显示秒表时间中调用组数uchar f=0; /定义一个 f,用于显示秒表时间中循环调用组数uchar P13=0;uchar P14=0;华侨大学10uchar P15=0;uchar P16=0;sbit P1_0=P10; /P1_3 为 1,P1_5 为 1 时,显示时间,P1_3 为 0,P1_5 为 1 时,显示闹钟sbit P1_1=P11; /P1_3 为 1,P1_5 为 0 时,显示日历,P1_3 为 0,P1_5 为 0 时,显示秒表sbit P
18、1_2=P12; /秒表开始暂停sbit P1_3=P13; /时钟秒,闹钟秒调整定义sbit P1_4=P14; /时钟分,闹钟分调整定义sbit P1_5=P15; /时钟时,闹钟时,日历年调整定义sbit P1_6=P16; /星期调整定义 sbit P1_7=P17; /接蜂鸣器,0 响,1 不响/* 函数声明 */void delay(uint k ); /延时子程序void time_pro( ); /时间处理子程序void display( ); /时间显示调整子程序void dingshi( ); / 闹钟显示调整子程序void naozhong( ); / 时间到,闹铃voi
19、d zhengdian ( ); /整点报时void day_pro( ); /日历处理子程序void calendar( ); /日历显示调整子程序void miaobiao( ) ; /秒表显示子程序void xianshi( ) ; /显示总程序/*延时子程序*/void delay (uint k) /延时程序,此处大约为 0.8 msuchar j;while(k-) for(j=0;j0) x-; if(x=0)x=f;P15=P1_5; void timer0(void) interrupt 1 /定时器 0 方式 1,0.01s 中断一次TH0=0xd8; /手动加载计数脉冲次
20、数TL0=0xf0;TMOD=0x11; /使用 16 位定时器mstcnt+; /用于计算时间,每隔 10ms 加 1if(mstcnt=100)/mstcnt 满 100 即为一秒华侨大学20seconde+;/秒+1mstcnt=0; /对计数单元的清零,重新开始计数 if(P1_2=0)stopwatch+; /用于秒表计算时间,每隔 10ms 加 1if(stopwatch=1)/mstcnt 满 1 即为 0.1 秒haomiao+;/毫秒+1stopwatch=0; /对计数单元的清零,重新开始计数 /*主函数*/void main(void)P1=0Xff;TMOD=0x11;
21、 /time0 为定时器,方式 1TH0=0xd8; TL0=0xf0; /预置计数初值 ,50msEA=1; /总中断开ET0=1; /允许定时器 0 中断TR0=1; /开启定时器 0while (1) time_pro( ); /时间处理display( ); /显示调整时间 dingshi( ); /定时闹钟显示,调整zhengdian( ); /整点报时naozhong( ); / 时间到,闹铃day_pro( ); /日历处理子程序calendar( ); /日历显示调整子程序miaobiao( ) ; /秒表显示调整子程序xianshi( ) ;/显示总程序 四本次设计不足本次设
22、计是自己第一次使用单片机,过程中遇见各种困难,比如说在仿真阶段时间调整时每按一次键,时间并不以 1 累加,而是不固定的加很多,在实验板调试中,各数码管之间会干扰,在秒表模式下定义数组时超出了 128 字节,采用三极管驱动数码管需反相输入等等,但经过仔细分析,认真思考,最终都得到很好的解决,由于是第一次使用 C 语言写 51 代码,虽然经几次修改,基本能达到设计要求,但还是觉得程序代码不够简洁,还需进一步的修改完善,但对于这次的设计自己总体还是满意的华侨大学21五本次设计体会在这次课程设计中收获很多,学会了查找相关资料,分析数据,提高了自己的分析判断能力,得到了许多经验。同时,仍有很多需要去努力去完善,课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次设计使我明白了自己知识还比较欠缺,自己要学习的东西还太多,也使我明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。总之,不管学会的还是学不会的,的确觉得困难比较多,真是万事开头难,不知道如何入手。在实验板完成并调试成功后有种如释重负的感觉,此外,还得出一个结论:知识必须通过实践应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。