单片机课程设计简易电子钟_第1页
单片机课程设计简易电子钟_第2页
单片机课程设计简易电子钟_第3页
单片机课程设计简易电子钟_第4页
单片机课程设计简易电子钟_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1章 电子钟设计方案选择与论证1.1 功能要求说明(1)、 led数码管显示器显示当前时间;(2)、 该电子钟上电或按键复位后能自动显示系统提示符“p.”, 进入时钟准备状态;(3)、 四个按键的功能:a键用于电子钟启动/调整;b键用于调秒,范围0-59,0为60秒,每按一次秒加1;c键用于调分,范围0-59,0 为60分,每按一次分加1;d键用于调时, 范围0-23,0为24时,每按一次时加1;电子钟的构成主要是由单片机,键盘显示接口电路及时钟电路和复位电路构成,在方案选择的时候多体现在键盘显示接口电路的不同,因而我们主要讨论的是键盘显示电路不同时的方案。在此有以下几种方按案供我们选择:1

2、.2设计方案一:8155扩展i/o口的键盘、显示接口8155芯片有256个字节ram、2个8位、1个6位的可编程i/o口和1个14位计数器,与mcs-51单片机接口简单,是单片机系统中广泛使用的芯片。对于这个芯片我们比较的熟悉,但利用它进行本次设计有一主要的缺点:它占用的cpu较多;原理框图如图1-1所示 图1-1 方案一原理框图1.3设计方案二: 74ls244、键盘、显示接口本次简易电子钟的设计是at89s52键盘、显示接口,led动态显示。该方案的单片机芯片采用atmel公司的at89s52,它一种低功耗、高性能的cmos 8位单片机。它的优点是:实时测控任务少,采用动态显示,节省i/o

3、口,硬件电路比较简单,成本低。它的原理框图如图1-2所示:图1-2 方案二原理框图1.4设计方案三:8279键盘、显示接口8279是intel公司为8位处理器设计的通用的键盘/显示接口芯片,其功能是:接受来自键盘输入数据并作与处理,并可以完成数据显示的管理和数据显示器的控制。单片机采用8299管理键盘和显示器,软件编程极其简单,显示稳定,且减少主机的负担。它的原理框图如图1-3所示: 图1-3 方案三原理框图1.5设计方案四: 晶体管三极管驱动数码管本方案主要采用晶体三极管作为数码管的驱动器,用它的好处是在画pcb 单面板时容易走通单面板而没有交叉线,还有一个好处是晶体三极管价格比较便宜,到处

4、都可以买到,在本次设计中我们就采用本方案来做电子钟。它的原理框图如图1-4所示: 图1-4 方案四原理框图 第2章 电子钟原理说明2.1 实现时钟计时的基本方法利用mcs-51系列单片机可编程定时/计数器、中断系统来实现时钟计数。2.1.1 计数初值计算把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而20次计数可用软件方法实现。假设使用t/c0,方式1,50ms定时,fosc=12mhz。则初值x满足(216-x)×1(s)×10-3(s) =50000 (s)则x=15536,二进制为0100110000000000,十六进制表示为4

5、c00h。初值的计算也可以用专门的小软件直接输入使用的定时器,方式,定时时间,“确定”之后,就可以直接显示初值。这样可以提高工作效率,又不易出错。2.1.2 采用中断方式进行溢出次数累计,计满20次为秒计时(1秒)2.1.3 从秒到分和从分到时的计时是通过累加和数值比较实现。2.2 电子钟的时间显示电子钟的时钟时间在八位数码管上进行显示,因此,在内部ram中设置显示缓冲区共8个单元。这八个缓冲单元由数组构成。显示缓冲区从左至右依次存小时,分,秒的数值。2.3 电子钟的启,停及时间调整电子钟设置4个按键通过程序控制来完成电子钟的启,停及时间调整。a键控制电子钟的启,停;b键调整时;c键调整分;d

6、键调整秒。第3章 硬件设计3.1芯片at89s52at89s52是一种低功耗,高性能chmos 8位单片机。片内含8kbytes isp的可反复擦写1000次flash只读程序存储器,128bytes的随机存取数据存储器(ram)。其特点如下:(1)兼容mcs-51指令系统;(2)最大的工作频率为33mhz;(3)具有双工uart串行通道;(4)内部集成看门狗计时器,不需要再外接看门狗计时器单元电路;(5)双数据指示器;(6)支持isp(在线更新程序)功能,其优势在于改写单片机存储器内的程序不需要把芯从工作环境中剥离;(7)电源关闭标识;(8)电压范围宽达4-5.5v,而89c52在低于4.8

7、v或高于5.3v则无法工作;本;3.1.1 at89s52外部管脚如图7所示3.1.2引脚与功能at89s52单片机为40引脚芯片如图3-1所示:1) 引脚信号介绍:p00p07 p0口8位双向口线p10p17 p0口8位双向口线p20p27 p0口8位双向口线p30p37 p0口8位双向口线ale地址锁存控制信号: 图3-1 芯片at89s52外部管脚在系统扩展时,ale用于控制把p0口输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。此外由于ale是以晶振六分之一的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲作用。/psen外部选通信号在读外部rom时/psen有效(低

8、电平),以实现外部rom单元的读操作。/ea 访问程序存储器控制信号:rst 复位信号:当输入的复位信号延续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。xtal1和xtal2 外接晶体引线端:当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电空;当使用外部时钟时,用于拉外部的时钟脉冲信号。 gnd:地线vcc:+5v电源2)信号引脚的第二功能:由于工艺及标准化等原因,芯片的引脚数目是有限制的,例如mcs51系列把芯片引脚数目限定为40条,但单片机为实现其功能所需要的信号数目却远远超过此数,因此就出现了需要与可能的矛盾。因此,给一些信号引脚赋以双重功能。 p3口第二功

9、能:p3的8条口线都定义有第二功能 ,具体如表1所示:表1 p3口第二功能分配表口线第二功能替代的专用功能p3.0rxdrxd(串行输入口)p3.1txdtxd(串行输出口)p3.2/int0int0(外部中断0)p3.3/int1int1(外部中断1)p3.4t0t0(定时器0的外部输入)p3.5t1t1(定时器1的外部输入) p3.6/wr/wr(外部ram写选通) p3.7/rd/rd(外部ram读选通)3.3 复位电路复位电路是使单片机的cpu或系统中的其他部件处于某一确定的初始状态,并从这上状态开始工作。上电复位是单片机上电时复位操作,保证单片机上电后立即进入规定的复位状态。除了进入

10、系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要按复位键。在此,结合了上电和按键盘手动两种复位方式。3.3.1 复位电路图复位电路图如图3-2所示: 3.3.2 复位电路工作原理上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间rst引脚获得高电平,随着电容的充电,rst引脚的高电平将逐渐下降。 图3-2 复位电路rst引脚的高电平只要能保持足够的时间(2个机器周期),若采用6mhz的晶振,则复位信号应超过4s单片机就可以进行复位操作。3.4 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片

11、机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。3.4.1 时钟振荡电路图时钟振荡电路图如图3-3所示:3.4.2 时钟信号的产生 图3-3 时钟电路 单片机内部有一个高增益反相放大器,其输入端为芯片引脚xtal1,其输出端为引脚xtal2。而在芯片的外部,xtal1和xtal2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。只要在单片机的xtal1和xtal2引脚外接晶体振荡器就构成了自激振荡器并在单片机内部产生时钟脉冲信号。电容器c1和c2的作用是稳定频率和快速起振,电容值在530pf,典型值为30pf。外部时钟方

12、式是把外部已有的时钟信号引入到单片机内。此方式常用于多片单片机同时工作,以便于各单片机的同步。一般要求外部信号高电平的持续时间大于20ns,且为频率低于12mhz的方波。3.5 键盘显示电路3.5.1 键盘电路在此设计中采用的是五按键独立式键盘(其中有s键为复位键,其余四键为功能键)。如图3-4所示: 独立式键盘中,每个按键占用 一根i/o口线,每个按键电路相对独立。i/o口通过按键与地相连,i/o口有上拉电阻,无键按下时, 引脚端为高电平,有键按下时,引脚电平被拉低。i/o口内部有上拉电阻时,外部可不接上拉电阻。 图3-4 键盘电路3.5.2 显示电路 在此设计中采用led显示,led显示器

13、由七个发光二极管组成,也称之为七段led 显示器,其排列形状如图3-5所示。此外,显示器中还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。通过七段发光二极管的不同组合,可以显示多种数字、字母或者其他符号。led显示器中的发光二极管共有两种连接方法:共阳极接法 把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5v。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。共阴极接法 把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。七段发光二极管,再加上一个小数点,共计8段。因此提

14、供给led显示器的字型代码正好一个字节。采用led显示器。led显示器由七个发光二极管组成,本设计采用共阳级接法。显示方式采用动态显示方式。原因在于:静态显示方式要求口线多,占用资源多,成本就高,而动态显示方式,电路简单、节省口线、成本低。 符号与引脚 四位一体数码管图3-5 led显示器而本次设计采用四位一体数码管显示,这样可以减少布线数目,降低出错率。 显示方式:静态显示所谓静态显示,是指显示器显示某一字符时,相应段的发光二极管恒定地导通或截止。这种显示方法每一位都需要有一个8位输出控口控制。静态显示时,较小的驱动电流就可以得到较高的显示亮度,所以可由接口芯片直接驱动。并行输出显示位数越多

15、需要i/o口越多。动态显示(如图3-6所示)当显示器位数较多时,可以采用动态显示。所谓动态显示就是一位一位地轮流点亮显示器的各个位(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但由于人眼的视觉暂留效应和发光二极管熄灭时的余辉,我们看到的动是多个字符“同时”显示。显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。该设计中采用的是动态显示。图3-6 六位数码管动态显示方式用led显示器显示十六进制数的字形代码如表2所示: 表2 led显示器显示十六进制数的字形代码表字型共阳代码共阴代码字型 共阳代码共阴代码0c0h3fh99

16、0h6fh1f9h06ha88h772a4h5bhb83h7ch3b0h4fhcc6h39h 499h66hda1h5eh 592h6dhe86h79h 682h7dhf8eh71h 7f8h07h灭ffh00h 880h7fhp.0chf3h3.6 下载线原理图及pcb图 下载线原理图如图3-7所示: 图3-7 下载线原理图下载线pcb图如图3-8所示: 图3-8 下载线pcb图3.7电子钟整机电路原理图见附录13.8 电子钟整机电路印制pcb附录2第4章 电子钟元器件清单本次设计所用的元器件比较多,具体如表3所示:表3电子钟元器件清单表元器件数量元器件数量at89s521块芯片插座(40脚

17、)1个共阳极四位一体数码管2块芯片插座(20脚)3个按键5个电阻1k欧姆1个发光二极管1个电阻240欧姆1个74ls2442块限流电阻200欧姆9个电容(33pf)2个上拉电阻10k欧姆4个电容(22f)1个晶振12mhz1个敷铜板1块开关1个下载套件1套第5章 单片机资源分配5.1 存储器地址分配如表4所示:表4 存储器地址分配如表内 容存储器地址单元显示缓冲单元79h-7eh堆栈起始单元60h秒单元个位的存储单元30h秒单元十位的存储单元31 h分单元个位的存储单元32 h分单元十位的存储单元33 h小时单元个位的存储单元34 h小时单元十位的存储单元35 h秒计数的循环次数46ha键处理

18、结果位标志20h.0b键处理结果位标志20h.1c键处理结果位标志20h.2d键处理结果位标志20h.3 5.2 硬件资源分配采用定时/计数器t0p1.0p1.3为键盘输入端p0口用作段控线p2口用作位控线采用定时器/计数器中断0第6章 流程图6.1 监控程序流程图 监控程序流程图如图6-1所示:6.2 键扫描子程序流程图 键键扫描子程序流程图如图6-2所示:6.3 中断及显示子程序图 中断及显示子程序图6-3,6-4所示6.4 加1子程序流程图加1子程序流程图如图6-5所示:第7章 软件设计 (1)c语言程序/*/* 程 序 名:电子时钟(数码管显示) /* 功 能:显示实时时间并可通过按键

19、进行校正 /* 编 写 者:梁高强 /* 编写时间:2007.11.20 /* 邮 箱:lianggaoqiang222 欢迎来电交流,共同学习和进步! /*/#include<reg52.h>#define uchar unsigned charsbit p_0=p10;sbit p_1=p11;sbit p_2=p12;uchar j,sec,min=0,shi=0,i,g,count;sfr p0=0x80;sfr p2=0xa0;uchar table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; uchar ta

20、ble18=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; uchar xsqd8;/*显示缓冲区,其由数组组成*/void xs() xsqd0=tablesec%10; xsqd1=tablesec/10; xsqd2=0x40; xsqd3=tablemin%10; xsqd4=tablemin/10; xsqd5=0x40; xsqd6=tableshi%10; xsqd7=tableshi/10; /*延时*/void dely()unsigned char m,n,k; for(m=20;m>0;m-) for(n=20;n>0;n-)

21、 for(k=248;k>0;k-);void delay()unsigned char l,h; for(l=5;l>0;l-) for(h=248;h>0;h-);/*键扫描子程序*/void key() ea=0; /键扫时禁止任何中断 if(p_0=0) dely(); if(p_0=0) et0=0; tr0=0; count+; if(count=3) count=0; switch(count) case 1 : if(p_1=0) dely(); if(p_1=0) min+; if(min=59)min=0; if(p_2=0) dely(); if(p_2

22、=0) min-; if(min=0)min=59; ;break; case 2 : if(p_1=0) dely(); if(p_1=0) shi+; if(shi=24)shi=0; if(p_2=0) dely(); if(p_2=0) shi-; if(shi=0)shi=23; ;break; default :break; ea=1; et0=1; tr0=1; /*中断子程序*/void t0(void) interrupt 1 using 0 th0=0x4c; /定时器初值重装 tl0=0x00; j+; if(j=20) j=0; sec+; if(sec=60) sec

23、=0; min+; if(min=60) min=0; shi+; if(shi=24) shi=0; /*主程序*/void main() j=0; tmod=0x01; /选择定时器方式 th0=0x4c; /定时器给初值 tl0=0x00; ea=0; /关总中断 et0=0; /关定时中断 tr0=0; /关定时器 while(1) /p点循环显示 p0=0x73; /送p点段控 p2=table1i; /送p点位控 delay(); i+; if(i=8) i=0; if(p_0=0) dely(); if(p_0=0) break; /如果a键按下,则跳出p点显示 ea=1; /开

24、总中断 et0=1; /开定时中断 tr0=1; /开启定时器 while(1) /开定时器 key(); /键扫 xs(); /将定时器的值存入缓冲区 p0=xsqdg; /送段控 p2=table1g; /送位控 delay(); g+; if(g=8) g=0; (2)汇编程序* 数字电子钟 *;定时器t0的溢出周期为50ms,采用12mhz晶振;p1.0-p1.3为调整按钮;p0口为段控,p2口为位控,采用74ls244驱动;采用共阳数码管; * * 常数定义区 * *;keyaa bit 20h.0 ;a键处理结果位标志keybb bit 20h.1 ;b键处理结果位标志keycc

25、bit 20h.2 ;c键处理结果位标志keydd bit 20h.3 ;d键处理结果位标志secge equ 30h ;秒个位存储单元secsh equ 31h ;秒十位存储单元minge equ 32h ;分个位存储单元minsh equ 33h ;分十位存储单元houge equ 34h ;时个位存储单元housh equ 35h ;时十位存储单元intcs equ 46h ;计数溢出次数,即1秒的计数循环次数 * * 中断入口程序 * * org 0000h ;程序执行开始地址ajmp main ;跳到标号main执行 org 0003h ;外部中断0中断程序入口 reti ;外部中断

26、0中断返回 org 000bh ;定时器t0中断程序入口 ajmp intt0 ;跳至intto执行 org 0013h ;外部中断1中断入口地址 reti ;外部中断1中断返回 org 001bh ;定时器t1中断程序入口 reti ;定时器t1中断程序返回 org 0023h ;串行中断程序入口地址 reti ;串行中断程序返回 * * 主程序 * * org 0030h main: mov sp, #60h ;确立堆栈区 mov psw, #00h ;初始化状态字 mov r1, #20h ;ram区首地址 mov r2, #5fh clear: mov r1, #00h ;对相应单元清

27、零操作 inc r1 djnz r2, clear mov tmod, #01h ;定时器0工作方式1 mov tl0, #0dch ;每125ms中断一次 mov th0, #0bh mov intcs, #08h ;中断次数初始化 clr tr0 ;关定时器 clr ea ;关总中断允许 clr et0 ;关定时器/计数器0中断允许 mov r3, #0ffh ;给r3赋初值numcla: lcall xsp0 ;调显示班级及学号程序 djnz r3, numcla ;非零继续显示xsp: mov 79h, #0bh ;给显示缓冲区赋相应初值 ? mov 7ah, #0bh ;给指定位赋显

28、示p点代码,其余位赋灭代码 mov 7bh, #0bh mov 7ch, #0bh mov 7dh, #0bh mov 7eh, #0ah lcall disp ;调p点显示程序,等待中断contr: lcall key ;调键扫程序 jz xsp ;无键按下则跳转至xsp jnb keyaa, xsp ;有键按下,非a键继续显示p点jkeyf: lcall keychuli ;判释放 jz dispa ;释放则转dispa lcall turn ;调转移子程序 lcall disp ;调显示程序 ajmp jkeyf ;再次判释放dispa: setb tr0 ;开定时器t0 开始计时 se

29、tb ea ;开总中断 setb et0 ;开分中断0 lcall turn ;调转移程序 lcall disp ;调显示 lcall key ;调键扫子程序 jz dispa ;无键按下继续显示时钟 jnb keyaa, dispa ;有键按下,非a键亦继续显示jkeyfb: lcall keychuli ;调键处理程序 jz setck ;若为a键按下,则进入设置状态 lcall turn ;调转移程序 lcall disp ;调显示 ajmp jkeyfb ;转移到jkeyfbsetck: clr tr0 ;若为a键,则关闭定时器 mov 20h, #00h ;清键处理标志位 lcall

30、 turn ;调转移程序 lcall disp ;显示当前时间 lcall key ;调键扫 jz setck ;无键按下则继续在设置状态 jnb keyaa, judgeb ;为a键不,不是则跳至judgebjkeyfc: lcall keychuli ;判释放 jz dispa ;释放则重新开始计时 lcall turn ;调转移 lcall disp ;调显示 ajmp jkeyfc ;继续判是否释放 (应重新判是否有键按下) ? * * 键功能程序 * *;judgeb: jnb keybb, judgec ;为b键不,不是则跳至judgeckeysfb: lcall keychuli

31、 ;判释放 jz hou1 ;进行时加1 lcall turn ;调转移程序 lcall disp ;调显示 ajmp keysfb ;继续判释放 ? judgec: jnb keycc, judged ;为c键不,不是则跳至judgedkeysfc: lcall keychuli ;判释放 jz min1 ;释放则进行分加1 lcall turn ;调转移 lcall disp ;调显示 ajmp keysfc ;继续判释放judged: jnb keydd, keysfa ;是d键不,不是则跳至keysfakeysfd: lcall keychuli ;判释放 jz sec1 ;释放则进行秒加1 lcall turn ;调转移 lcall disp ;调显示 ajmp keysfd ;继续判释放keysfa: ljmp setck ;回到设置状态; * * 键扫描程序 * *;20h存放取反后的键值;键扫子程序;出口:a,20h;key: lcall keychuli ;调键处理子程序 jz exit lcall disp ;去抖动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论