单片机课程设计-电子时钟_图文_第1页
单片机课程设计-电子时钟_图文_第2页
单片机课程设计-电子时钟_图文_第3页
单片机课程设计-电子时钟_图文_第4页
单片机课程设计-电子时钟_图文_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机课程设计实验报告课设名称:电子时钟姓名班级学号任课教师:时间 2011-12-14课设名称电子时钟一、实验目的1.掌握单片机编程的流程,以及程序的调试方式。2.了解 LED 动态显示原理及动态显示程序设计方法。3.学习 8051定时器时间计时处理、按键扫描的设计方法。二、设计任务和要求利用 4个 LED 数码管, 设计带有闹铃功能的数字时钟(实验台或自行焊接 ,要求:1. 在 4位数码管上显示当前时间。显示格式“时时 . 分分” 。2. 由 LED 灯闪动做秒显示。3. 利用开关可对时间及闹玲进行设置,并可显示闹玲时间。4. 当闹玲时间到由 P1.7控制蜂鸣器发出声响,并可通过开关使它

2、停止。三、设计原理与思路原理部分:LED 动态显示原理:数码管的动态显示利用视觉暂留作用,使得人眼看到的是静态的不变的显示,视觉暂 留时间约为 0.01秒,因而每次显示的时间间距要比较短。本实验选择的是每 5毫秒显示一 个比特。首先以串行方式由 SDA 口向 LED 显示器数据端口发送第一个 8位数据,这时发送位码 数据 0BFH 到 P1口, 此时由于 P1.6位低电平而其他口都为高电平, 因此只有 LED1数码管显 示该数码。 这样就可以发送第二个数据, 同时应使其对应的位码为低电平且保证其他位为高 电平。 依次类推, 对各显示器进行扫描, 显示器分时轮流工作。 虽然买此只有一个显示器显

3、示, 但由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。 它的优点是硬件电 路简单,占用较少的 I/O口,但其传送速度相对较慢。由数码管的显示原理,再考虑到数码管上显示的数字对应与一个八位的二进制数, 09一共十个,把这些数存到程序存储器的 TABLE 表中,将 DPTR 作为指针,用 R1R4(或任意四个单元 分别存储实际的时和分的数字, 把寄存器存储的数字作为偏移量, 这样, 就把实 际的数字和数码管中显示的数字对应起来了。设计及思路部分:1. 硬件设计部分:通过跳将单片机的 P1口中的控制线与数码管显示电路如图 1所示相连(在实验箱上即 将 P10、 P11、 P13、 P14

4、、 P15、 P16接至 A 位它们的作用是:P1.3、 P1.4、 P1.5和 P1.6是 四个数码管的位扫描线,其中 P1.6对应数码管 W1,显示小时高位; P1.5对应数码管 W2, 显示小时低位; P1.4对应数码管 W3,显示分钟高位; P1.3对应数码管 W4,显示分钟低位。 实验中用 P1.2口作为脉冲输出端, 将 P1.2口连到一个二极管, 做秒显示; P3.2, P3.3, P3.4, P.5分别与 4个拨动开关连接,做时间显示和闹铃的控制; P1.7则连接到蜂鸣器。 实验中要利用单片机定时器完成计时功能,定时器 T0计时中断程序每隔 5ms 中断一次 并当作一个计数,每中

5、断一次计数加 1,当计数 200次时,则表示 1s 到了,秒变量加 1,同 理再判断是否 1min 钟到了, 再判断是否 1h 到了。 为了将时间在 LED 数码管上显示, 可采用 静态显示法和动态显示法, 由于静态显示法需要数据锁存器等较多硬件, 可采用动态显示法 实现 LED 显示。显示电路如图 1所示: 图 1闹铃声由交流蜂鸣器产生,电路如图 2,当 P1.7输出不同频率的方波, . 蜂鸣器便会发出不同的声音。 10KVCC图 2数码管显示设计:四位共阳 LED 数码管,其标号分别为 LED1LED4。为了节省 MCU 的 I/O口,采用串行接 口方式,它仅占用系统 2个 I/O口,即

6、P1.0口和 P1.1口,一个用作数据线 SDA ,另一个用 作时钟信号线 CLK ,它们都通过跳线相连。其中串并转换电路部分我选用的是集成芯片 74HC595, 74HC595是 8位串行输入 /输出或者并行输出移位寄存器,具有高阻关断状态。 4位共阳 LED 数码管与 P87C52X2的连接如上面图 1所示。其中, KD_Q0-KD_Q7为 LED 显示器数据线即段码线, EBIT1-EBIT4位 LED 显示器的位码扫描线,它们通过跳线与 P1.3-P1.6相连,低电平有效,且任何时候仅有一位输出低电平,显示时对各显示器进行动 态扫描, 显示器分时轮流工作。 虽然每次只有一个显示器显示,

7、 但是由于人的视觉暂留现象 我们仍会感觉所有的显示器都在同时显示。由于实验采用的是共阳 LED 数码管,它的阴极分别通过限流电阻 R20-R27连接到控制 KD_0-KD_Q7。 这样控制 8个发光二极管, 就需要 8个 I/O口。 但由于单片机的 I/O口资源是 有限的, 因此常采用实验电路所示的串并转换电路来扩充系统资源。 串并转换电路其实质是 一个串入并处的移位寄存器, 串行数据再同步移位脉冲 CLK 的作用下经串行数据线 SDA 把数 据移位到 KD_0-KD_Q7端,这样仅需 2根线就可以分别控制 8个发光二极管的亮灭。2. 软件设计部分 :闹铃设置 :通过 P3.4口控制闹铃设置,

8、 与拨动开关连接, 高电平有效, 当 P3.4口变成 高电平时,进入闹铃设置,用 P3.2和 3.3分别控制分和时的设置,也与拨动开关连接,高 电平有效,当 P3.2变成低电平时回到主程序。时间设定 :通过 P3.5口控制时间设定, 与拨动开关连接, 低电平有效, 当 P3.3口变成 低电平时,进入时间设置,同样用 P3.2和 3.3口控制分和时的设置,也与拨动开关连接,低电平有效,当 P3.3口变成高电平时回到主程序。蜂鸣器 :用四个地址存储闹铃时间的偏移量, 判断当前的时间与闹铃时间是否完全一样, 相同时驱动闹铃,实验板上的蜂鸣器是交流驱动的,因此当到达闹铃时刻时,给 P1.7口几 个脉冲

9、,频率控制在人耳可以听到的范围内。I/O口的说明:P1口:用来控制数码管的显示,其中 P1.2作为秒脉冲输出口, P1.7控制蜂鸣器P3口: P3.2控制设定中的分钟的设定,与拨动开关相连,高电平有效P3.3控制设定中的小时的设定,与拨动开关相连,高电平有效P3.4控制闹铃设定,与拨动开关相连,高电平设置闹铃,低电平锁定闹铃时间 P3.5控制时间及闹钟的开关设定,与拨动开关相连,低电平有效允许时间的设定 和关掉闹铃3. 程序流程图部分 :(1 、开关扫描程序: 开关 1和 2用来调整时钟的分与时;开关 3用来控制显示时间或闹钟;开关 4用来控制时间的可调与否,同时控制闹铃的开与关。(2 、 T

10、0中断服务程序 :采用定时器 T0计时,中断程序每隔 5ms 中断一次计数加 1,当计数 200次时,则表示 1s 到了,秒变量加 1,同理再判断是否 1分钟到了,再判断是否 1小时到了,再判断是否 24小时到了。 (3 、显示部分:程序流程图如下: 4. 程序部分 :-; 中断入口程序 ;-;ORG 4000H ; 程序执行开始地址AJMP MAIN ; 跳到标号 MAIN 执行ORG 000BH ; 定时器 T0中断程序入口AJMP INTT0 ; 跳到 INTT0执行;-; 主 程 序 ;-;MAIN: MOV TMOD,#01H ; 定时器 T0工作于方式 1 MOV 20H,#198

11、 ;T0溢出次数为 200次 MOV 40H,#00H ; 时钟的时清零MOV 41H,#00H ; 时钟的分清零MOV 42H,#00H ; 时钟的秒清零MOV 43H,#00H ; 闹钟的时清零MOV 44H,#00H ; 闹钟的分清零SETB ET0 ; 允许 T0中断SETB EA ; 总中断开放MOV TH0,#0ECH ;5ms 定时初值 0EC78HMOV TL0,#78H ;SETB TR0 ; 启动定时器 T0;-; 开关扫描程序 ;-;HERE: JB P3.2,HERE1 ; 判断是否按下,按下则跳到 HERE1调整时钟的分 JB P3.3,HERE2 ; 判断是否按下,

12、按下则跳到 HERE2调整时钟的时 JB P3.4,HERE3 ; 判断是否按下,按下则跳到 HERE3调整闹钟 JB P3.5,HERE4 ; 判断是否按下,按下则跳到 HERE4停止闹钟响 LCALL DISC ; 调用显示时钟程序LCALL RIN ; 调用判断闹钟程序AJMP HERE ; 重复执行HERE4: LJMP HERE44 ; 调用停止闹铃HERE1: LCALL DISC ; 调用显示时钟程序MOV 45H,#10 ; 延时,减慢分钟调整速度,使人眼能看清分钟变化 LCALL DISC ;DL1: MOV 46H,#0FAH ;LCALL DISC ; 延时过程中要调用显

13、示程序,使显示不闪烁 DL2: NOP ;NOP ;DJNZ 46H,DL2 ;内循环 0FAH 次DJNZ 45H,DL1 ;外循环 10次 总共 60sMOV A,#01H ; 时钟的分钟加 1ADD A,41H ;MOV 41H,A ;CJNE A,#60,LM ; 判断分钟是否为 60,不为 60则跳到 LMMOV 41H,#00H ; 为 60则分钟清零MOV A,#01H ; 时钟的时加 1ADD A,40H ;MOV 40H,A ;CJNE A,#24,LM ; 判断时是否为 24,不为 24则跳到 LMMOV 40H, #00H ; 为 24则时清零LM: JB P3.2,HE

14、RE1 ; 判断是否按下,按下则跳到 HERE1AJMP HERE ; 没按下则跳到 HEREHERE2: LCALL DISC ; 调用显示时钟程序MOV 45H,#10 ; 延时,减慢时的调整速度,使人眼能看清时的变化 LCALL DISC ;DL3: MOV 46H,#0FAH ;LCALL DISC ; 延时过程中要调用显示程序,使显示不闪烁 DL4: NOP ;NOP ;DJNZ 46H,DL4 ;DJNZ 45H,DL3 ;MOV A,#01H ; 时钟的时加 1ADD A,40H ;MOV 40H,A ;CJNE A,#24,LH ; 判断时是否为 24,不为 24则跳到 LHM

15、OV 40H,#00H ; 为 24则时清零LH: JB P3.3,HERE2 ; 判断是否按下,按下则跳到 HERE2AJMP HERE ; 没按下则跳到 HEREHERE3: LCALL DISR ; 调用显示闹钟程序LCALL RIN ; 调用判断闹钟程序JB P3.2,M1 ; 判断是否按下,按下则跳到 M1JB P3.3,H1 ; 判断是否按下,按下则跳到 H1AJMP LH1 ; 都没按下则跳到 LH1M1: MOV 50H,#10 ; 延时,减慢调整速度,使人眼能看清变化 LCALL DISR ;DL7: MOV 51H,#0FAH ;LCALL DISR ; 调用显示闹钟的程序

16、DL8: NOP ;NOP ;DJNZ 51H,DL8 ;DJNZ 50H,DL7 ;MOV A,#01H ; 闹钟的分加 1ADD A,44H ;MOV 44H,A ;CJNE A,#60,LM1 ; 判断分钟是否为 60,不为 60则跳到 LM1 MOV 44H,#00H ; 为 60则分钟清零MOV A,#01H ; 闹钟的时加 1ADD A,43H ;MOV 43H,A ;CJNE A,#24,LM1 ; 判断时是否为 24,不为 24则跳到 LM1 MOV 43H,#00H; ; 为 24则时清零LM1: JB P3.2,M1 ; 判断是否按下,按下则跳到 M1继续调整分钟 AJMP

17、 LH1 ; 没按下则跳到 LH1H1: MOV 50H,#10 ; 延时,同上LCALL DISR ;DL5: MOV 51H,#0FAH ;LCALL DISR ;DL6: NOP ;NOP ;DJNZ 51H,DL6 ;DJNZ 50H,DL5 ;MOV A,#01H ; 闹钟的时加 1ADD A,43H ;MOV 43H,A ;CJNE A,#24,LH1 ; 判断时是否为 24,不为 24则跳到 LH1 MOV 43H,#00H ; 为 24则时清零LH1: JB P3.3,H1 ; 判断是否按下,按下则跳到 H1继续调整小时 JB P3.4,HERE3 ; 判断是否按下,按下则跳会

18、 HERE3AJMP HERE ; 没按下则跳回 HEREHERE44: CLR P1.7; ; 停止闹铃LCALL DISC ; 调用显示时钟程序JB P3.5,HERE44 ; 判断是否按下AJMP HERE ;-; T0中断服务程序 ;-;INTT0: PUSH PSW ; 状态字入栈保护PUSH ACC ; 累加器入栈保护CLR ET0 ; 关 T0中断允许CLR TF0 ; 清除溢出标志位CLR TR0 ; 关闭定时器 T0MOV TH0,#0ECH; ; 装初值MOV TL0,#78H; ;DJNZ 20H,RETURN ;1S 未到,继续计MOV 20H,#198 ;CPL P1

19、.2 ; 秒显示MOV 60H,#05 ; 延时子程序DLP8: MOV 61H, #0FAH ;DLP9: NOP ;NOP ;DJNZ 61H,DLP9 ;DJNZ 60H,DLP8 ;CPL P1.2 ; 秒显示MOV A,#01H ; 秒加 1ADD A,42H ;MOV 42H,A ;CJNE A,#60,RETURN ;1分未到,继续计MOV 42H,#00H ; 到 1分则秒清零MOV A,#01H ; 分加 1ADD A,41H ;MOV 41H,A ;CJNE A,#60,RETURN ;1小时未到,继续计MOV 41H,#00H ; 到 1小时则分清零MOV A,#01H

20、; 时加 1ADD A,40H ;MOV 40H,A ;CJNE A,#24,RETURN ;判断时是否到 24,不到,继续计 MOV 40H, #00H; ; 到 24时清零RETURN: POP ACC ; 恢复累加器POP PSW ; 恢复状态字(出栈SETB ET0 ; 开放 T0中断SETB TR0 ; 开定时器 T0RETI ; 中断返回;-; 显示程序 ;-;DISC: PUSH ACC ;MOV R0, 40H ; 时钟显示MOV R1, 41H ;LJMP DIS1 ;DISR: PUSH ACC ;MOV R0, 43H ; 闹钟显示LJMP DIS1 ;DIS1: MOV

21、 A,R0 ; 将时钟小时除以 10MOV B,#10 ;DIV AB ; A中为小时的十位数字 ,B 中为小时的个位数字 AJMP DUPH ;DIS2: MOV A,R1 ; 将闹钟小时除以 10MOV B,#10 ;DIV AB ; A中为小时的十位数字 ,B 中为小时的个位数字 AJMP DUPM ;DUPH:MOV DPTR,#TABLE ; 查表MOVC A,A+DPTR ;MOV R3,#08H ; 定义移位次数为 8次Y0: RLC A ; 循环左移位MOV P1.0, C ;CLR P1.1 ;SETB P1.1 ;0变 1, 获得移位所需的上升沿DJNZ R3,Y0 ;CL

22、R P1.6 ;W1数码管显示小时的十位数字LCALL DL5MS ; 延时 5msSETB P1.6 ;W1数码管灭DUP1: MOV A,B ;MOV DPTR,#TABLE ; 查表MOVC A,A+DPTR ;ANL A,#01111111B ;W2数码管的点变亮MOV R3,#08H ; 循环移位 8次Y1: RLC A ;MOV P1.0, C ;CLR P1.1 ;SETB P1.1 ;CLR P1.5 ;W2数码管显示小时的个位数字 LCALL DL5MS ; 延时 5msSETB P1.5 ;W2数码管灭LJMP DIS2 ;DUPM: M OV DPTR,#TABLE ;M

23、OVC A,A+DPTR;MOV R3,#08H ;Y2: RLC A ;MOV P1.0, C ;CLR P1.1 ;SETB P1.1 ;DJNZ R3,Y2 ;CLR P1.4 ;W3数码管显示分钟的十位数字 LCALL DL5MS ; 延时 5msSETB P1.4 ;W3数码管灭DUP2: MOV A,B ;MOV DPTR,#TABLE;MOVC A,A+DPTR ;MOV R3,#08H ;Y3: RLC A ;MOV P1.0, C ;CLR P1.1 ;SETB P1.1 ;DJNZ R3,Y3 ;CLR P1.3 ;W4数码管显示分钟的个位数字 LCALL DL5MS ;

24、延时 5msSETB P1.3 ;W4数码管灭POP ACC ; 恢复累加器RET ; 中断返回TABLE: DB 0C0H,0F9H,0A4H,0B0H,099HDB 092H,082H,0F8H,080H,090H ; 数码管显示 09;-; 延时子程序 ;-;DL5MS: MOV R4,#05 ; 延时子程序DLP1: MOV R5, #0FAHDLP2: NOPNOPDJNZ R5,DLP2DJNZ R4,DLP1;-; 判断闹铃程序 ;-;RIN: MOV A,40H ; 比较小时CJNE A,43H,EXITMOV A,41H ;比较分钟CJNE A,44H,EXITCPL P1.

25、7 ; 输入周期为 10ms 的方波 , 蜂鸣器发声LCALL DL5MSEXIT: RETEND;-;四、电路焊接与实验操作一开始, 我是焊了板子进行调试的, 最小系统部分能正常运行, 但是在数码管显示部分 出了问题, 显示不完整, 而且数字总是跳动, 没法设置时间。 虽然最后没用板子演示但是我 还是进行了板子的设计和焊接展示:最小系统部分电路:显示部分电路: 显示部分电路: 电路 后来,用实验箱操作的电路连接图如下: 其中要注意的是一定要用跳线选择器将 P10、P11、P13、P14、P15、P16 接至 A 位。还 有就是在程序写入芯片是要熟悉 keil 软件的操作,并且在使用 DPFlash 下载软件载入程序 时也要熟悉操作步骤, 我在实验箱的调试中就多次遇到擦除不了和通信口出错的问题, 一定 要检查是否连接好实验箱电路并打开开关,同时记得要关掉 keil 软件,不要两个软件同时打 开;再将实验箱上的工作模式选择开关 SX 拨

温馨提示

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

评论

0/150

提交评论