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

下载本文档

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

文档简介

单片机课程设计实验报告课设名称:电子时钟姓名 班级 学号 任课教师: 时间 2011-12-14 课设名称电子时钟一、实验目的 1掌握单片机编程的流程,以及程序的调试方式。2了解led动态显示原理及动态显示程序设计方法。3学习8051定时器时间计时处理、按键扫描的设计方法。二、设计任务和要求 利用4个led数码管, 设计带有闹铃功能的数字时钟(实验台或自行焊接),要求:1 在4位数码管上显示当前时间。显示格式“时时.分分”。2 由led灯闪动做秒显示。3 利用开关可对时间及闹玲进行设置,并可显示闹玲时间。 4 当闹玲时间到由p1.7控制蜂鸣器发出声响,并可通过开关使它停止。三、设计原理与思路原理部分:led动态显示原理:数码管的动态显示利用视觉暂留作用,使得人眼看到的是静态的不变的显示,视觉暂留时间约为0.01秒,因而每次显示的时间间距要比较短。本实验选择的是每5毫秒显示一个比特。首先以串行方式由sda口向led显示器数据端口发送第一个8位数据,这时发送位码数据0bfh到p1口,此时由于p1.6位低电平而其他口都为高电平,因此只有led1数码管显示该数码。这样就可以发送第二个数据,同时应使其对应的位码为低电平且保证其他位为高电平。依次类推,对各显示器进行扫描,显示器分时轮流工作。虽然买此只有一个显示器显示,但由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。它的优点是硬件电路简单,占用较少的i/o口,但其传送速度相对较慢。 由数码管的显示原理,再考虑到数码管上显示的数字对应与一个八位的二进制数,09一共十个,把这些数存到程序存储器的table表中,将dptr作为指针,用r1r4(或任意四个单元)分别存储实际的时和分的数字,把寄存器存储的数字作为偏移量,这样,就把实际的数字和数码管中显示的数字对应起来了。设计及思路部分:1.硬件设计部分:通过跳将单片机的p1口中的控制线与数码管显示电路如图1所示相连(在实验箱上即将p10、p11、p13、p14、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中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。为了将时间在led数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现led显示。显示电路如图1所示: 图1闹铃声由交流蜂鸣器产生,电路如图2,当p1.7输出不同频率的方波,.蜂鸣器便会发出不同的声音。 图2数码管显示设计:四位共阳led数码管,其标号分别为led1led4。为了节省mcu的i/o口,采用串行接口方式,它仅占用系统2个i/o口,即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相连,低电平有效,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。由于实验采用的是共阳led数码管,它的阴极分别通过限流电阻r20-r27连接到控制kd_0-kd_q7。这样控制8个发光二极管,就需要8个i/o口。但由于单片机的i/o口资源是有限的,因此常采用实验电路所示的串并转换电路来扩充系统资源。串并转换电路其实质是一个串入并处的移位寄存器,串行数据再同步移位脉冲clk的作用下经串行数据线sda把数据移位到kd_0-kd_q7端,这样仅需2根线就可以分别控制8个发光二极管的亮灭。2.软件设计部分:闹铃设置:通过p3.4口控制闹铃设置,与拨动开关连接,高电平有效,当p3.4口变成高电平时,进入闹铃设置,用p3.2和3.3分别控制分和时的设置,也与拨动开关连接,高电平有效,当p3.2变成低电平时回到主程序。时间设定:通过p3.5口控制时间设定,与拨动开关连接,低电平有效,当p3.3口变成低电平时,进入时间设置,同样用p3.2和3.3口控制分和时的设置,也与拨动开关连接,低电平有效,当p3.3口变成高电平时回到主程序。蜂鸣器:用四个地址存储闹铃时间的偏移量,判断当前的时间与闹铃时间是否完全一样,相同时驱动闹铃,实验板上的蜂鸣器是交流驱动的,因此当到达闹铃时刻时,给p1.7口几个脉冲,频率控制在人耳可以听到的范围内。i/o口的说明:p1口: 用来控制数码管的显示,其中p1.2作为秒脉冲输出口,p1.7控制蜂鸣器p3口: p3.2控制设定中的分钟的设定,与拨动开关相连,高电平有效 p3.3控制设定中的小时的设定,与拨动开关相连,高电平有效p3.4控制闹铃设定,与拨动开关相连,高电平设置闹铃,低电平锁定闹铃时间 p3.5控制时间及闹钟的开关设定,与拨动开关相连,低电平有效允许时间的设定和关掉闹铃3.程序流程图部分:(1)、开关扫描程序:开关1和2用来调整时钟的分与时;开关3用来控制显示时间或闹钟;开关4用来控制时间的可调与否,同时控制闹铃的开与关。(2)、t0中断服务程序:采用定时器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工作于方式1mov 20h,#198 ;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定时初值0ec78h mov tl0,#78h; setb tr0 ;启动定时器t0;-; 开关扫描程序 ;-; here:jb p3.2,here1 ;判断是否按下,按下则跳到here1调整时钟的分 jb p3.3,here2 ;判断是否按下,按下则跳到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;延时过程中要调用显示程序,使显示不闪烁 dl2:nop; nop; djnz 46h,dl2;内循环0fah次 djnz 45h,dl1;外循环10次 总共60s mov a,#01h ;时钟的分钟加1 add a,41h; mov 41h,a; cjne a,#60,lm;判断分钟是否为60,不为60则跳到lm mov 41h,#00h;为60则分钟清零 mov a,#01h;时钟的时加1 add a,40h; mov 40h,a; cjne a,#24,lm;判断时是否为24,不为24则跳到lm mov 40h, #00h ;为24则时清零 lm:jb p3.2,here1 ;判断是否按下,按下则跳到here1 ajmp here;没按下则跳到here here2: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 ;时钟的时加1 add a,40h; mov 40h,a ; cjne a,#24,lh ;判断时是否为24,不为24则跳到lh mov 40h,#00h;为24则时清零 lh:jb p3.3,here2 ;判断是否按下,按下则跳到here2 ajmp here;没按下则跳到here here3:lcall disr;调用显示闹钟程序 lcall rin;调用判断闹钟程序 jb p3.2,m1;判断是否按下,按下则跳到m1 jb p3.3,h1;判断是否按下,按下则跳到h1 ajmp lh1;都没按下则跳到lh1 m1:mov 50h,#10 ;延时,减慢调整速度,使人眼能看清变化 lcall disr; dl7:mov 51h,#0fah ; lcall disr;调用显示闹钟的程序 dl8:nop; nop; djnz 51h,dl8; djnz 50h,dl7; mov a,#01h ;闹钟的分加1 add a,44h; mov 44h,a ; cjne a,#60,lm1;判断分钟是否为60,不为60则跳到lm1 mov 44h,#00h;为60则分钟清零 mov a,#01h;闹钟的时加1 add a,43h; mov 43h,a; cjne a,#24,lm1;判断时是否为24,不为24则跳到lm1 mov 43h,#00h; ;为24则时清零 lm1:jb p3.2,m1;判断是否按下,按下则跳到m1继续调整分钟 ajmp lh1;没按下则跳到lh1 h1:mov 50h,#10;延时,同上 lcall disr; dl5:mov 51h,#0fah ; lcall disr; dl6:nop; nop; djnz 51h,dl6; djnz 50h,dl5; mov a,#01h ;闹钟的时加1 add 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 ;判断是否按下,按下则跳会here3 ajmp 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 ;关闭定时器t0 mov th0,#0ech; ;装初值 mov tl0,#78h; djnz 20h,return ;1s未到,继续计 mov 20h,#198 ; cpl p1.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 ;分加1 add a,41h; mov 41h,a; cjne a,#60,return;1小时未到,继续计 mov 41h,#00h;到1小时则分清零 mov a,#01h ;时加1 add a,40h; mov 40h,a; cjne a,#24,return ;判断时是否到24,不到,继续计 mov 40h, #00h; ;到24时清零return:pop acc ;恢复累加器 pop psw ;恢复状态字(出栈) setb et0 ;开放t0中断setb tr0 ;开定时器t0 reti ;中断返回;-; 显示程序 ;-; disc:push acc; mov r0, 40h;时钟显示 mov r1, 41h; ljmp dis1; disr:push acc; mov r0, 43h;闹钟显示 mov r1, 44h; ljmp dis1; dis1:mov a,r0;将时钟小时除以10 mov b,#10; div ab; a中为小时的十位数字,b中为小时的个位数字 ajmp duph; dis2:mov a,r1;将闹钟小时除以10 mov 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; clr p1.6 ;w1数码管显示小时的十位数字 lcall dl5ms ;延时5ms setb 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; djnz r3,y1; clr p1.5 ;w2数码管显示小时的个位数字 lcall dl5ms ;延时5ms setb p1.5 ;w2数码管灭 ljmp dis2; dupm:mov dptr,#table ; movc 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 ;延时5ms setb 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 ;延时5ms setb p1.3 ;w4数码管灭 pop acc ;恢复累加器 ret ;中断返回 table:db 0c0h,0f9h,0a4h,0b0h,099h db 092h,082h,0f8h,080h,090h ;数码管显示09;-; 延时子程序 ;-; dl5ms:mov r4,#05 ;延时子程序 dlp1: mov r5, #0fah dlp2: nop nop djnz r5,dlp2 djnz r4,dlp1;-; 判断闹铃程序 ;-; rin:mov a,40h ;比较小时 cjne a,43h,exit mov a,41h ;比较分钟 cjne a,44h,exit cpl p1.7 ;输入周期为10ms的方波,蜂鸣器发声 lcall dl5ms exit:retend;-;四、电路焊接与实验操作 一开始,我是焊了板子进行调试的,最小系统部分能正常运行,但是在数码管显示部分出了问题,显示不完整,而且数字总是跳动,没法设置时间。虽然最后没用板子演示但是我还是进行了板子的设计和焊接展示:最小系统部分电路:显示部分电路:后来,用实验箱操作的电路连接图如下:其中要注意的是一定要用跳线选择器将p10、p11、p13、p14、p15、p16接至a位。还有就是在程序写入芯片是要熟悉keil软件的操作,并且在使用dpflash下载软件载入程序时也要熟悉操作步骤,我在实验箱的调试中就多次遇到擦除不了和通信口出错的问题,一定要检查是否连接好实验箱电路并打开开关,同时记得要关掉keil软件,不要两个软件同时打开;再将实验箱上的工作模式选择开关sx拨至“load

温馨提示

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

评论

0/150

提交评论