zl数字时钟Word下载.docx
《zl数字时钟Word下载.docx》由会员分享,可在线阅读,更多相关《zl数字时钟Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
三、设计内容针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。
这样,既能做到经济合理又能实现预期的功能。
摘要:
用89C51,BUTTON,六段数码管等构成电子时钟,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
关键字:
89c51数字时钟实验设计系统总体构成:
首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。
设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,实现在6个LED数码管上显示日期、时间、定时、闹铃,通过6个按键实现设置日期、进行调时、设定闹铃、倒计时等功能。
软件部分用汇编实现,分为显示、延迟、调时、闹铃、定时、调整日期等部分。
通过软硬件结合达到最终目的图1单片机数字钟硬件系统的总体设计框图原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,并通过程序控制扫描输出显示数据。
利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;
若秒值达到60,则将其清零,并将相应的分字节值加1;
若分值达到60,则清零分字节,并将时字节值加1;
若时值达到24,则将时字节清零。
该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。
电源模块方案:
采用普通的USB线连接微型计算机作为系统电源,虽然功率上可以满足稍大于系统需要,但同样不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。
按键模块方案:
采用独立式键盘。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
但当所需按键数量多,会占用过多的I/O口线。
硬件设计:
单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。
1.电源引脚Vcc40电源端GND20接地端工作电压为5V,另有AT89LV51工作电压则是2.7-6V,引脚功能一样。
2.输入输出引脚
(1)P0端口P0.0-P0.7P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
(2)P1端口P1.0P1.7P1是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
(3)P2端口P2.0P2.7P2是一个带有内部上拉电阻的8位双向I/0端口。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
(4)P3端口P3.0P3.7P2是一个带有内部上拉电阻的8位双向I/0端口。
3.LED显示电路发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。
分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。
外加正向电压时二极管导通,发出清晰的光。
只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。
LED数码管有共阳、共阴之分。
图是共阳式、共阴式LED数码管的原理图和符号.图2共阳式、共阴式LED数码管的原理图和数码管的符号图显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,另需两个数码管来显示横。
采用动态显示方式显示时间,硬件连接如下图所示,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第四个和第五个数码管,秒的十位和个位分别显示在第七个和第八个数码管,其余数码管显示横线。
多位LED显示器,通常都是采用动态扫描的方法进行显示,其硬件连接方式如下图所示。
图4数码管的硬件连接示意图软件设计:
系统的软件设计也是工具系统功能的设计。
单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。
单片机的软件设计通常要考虑以下几个方面的问题:
(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;
(2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。
既便于调试、链接,又便于移植和修改;
(3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数;
(4)绘制程序流程图;
(5)合理分配系统资源;
调试步骤:
首先打开protus6professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;
绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。
调试中出现的问题:
在电子钟设计中程序比较长,调试时遇到了各种各样的问题,比如跳转距离过长出现语法错误。
因此修改程序的时间很长,有语法错误,也有仿真时功能无法实现的问题,在此不能一一说明,只能对个别问题加以阐述。
由于在走时调整、闹铃调整及定时设定时,按下键时每0.2秒步进1,这就需要每0.2秒对按键输入进行一次扫描,因此开始时,我用的是延迟0.2秒再返回按键扫描程序的方法,但是可以想到,进行单纯的延迟时,不会有显示,在仿真时功能没有实现。
后来我采用的是反复调用若干次显示程序以实现延迟,较好地解决了这个问题。
在使用Proteus进行仿真时,仿真图不用画出数码管驱动程序,其他部分与设计的硬件图相仿。
绘制结果如下:
图3仿真图源程序代码ORG0000HMOV30H,#1MOV31H,#2MOV32H,#0MOV33H,#0MOV34H,#0MOV35H,#0MOVTMOD,#01XS0:
SETBTR0MOVTH0,#00HMOVTL0,#00HXS:
MOV40H,#0FEHMOVDPTR,#TABMOVP2,40HMOVA,30HMOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,31HADDA,#10MOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,32HMOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,33HADDA,#10MOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,34HMOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AMOVP2,40HMOVA,35HMOVCA,A+DPTRMOVP0,ALCALLDELAYMOVP0,#0FFHMOVA,40HRLAMOV40H,AJBTF0,JIAJNBP1.0,P100JNBP1.1,P1000JNBP1.2,P10000AJMPXSP100:
MOV30H,#0MOV31H,#0MOV32H,#0MOV33H,#0MOV34H,#0MOV35H,#0JIA:
CLRTF0MOVA,35HCJNEA,#9,JIA1MOV35H,0MOVA,34HCJNEA,#5,JIA10MOV34H,#0P10000:
JNBP1.2,P10000MOVA,33HCJNEA,#9,JIA100MOV33H,#0MOVA,32HCJNEA,#5,JIA1000MOV32H,#0P1000:
JNBP1.1,P1000MOVA,31HCJNEA,#9,JIA10000MOV31H,#0MOVA,30HCJNEA,#2,JIA100000MOV30H,#0AJMPXS0JIA100000:
INC30HAJMPXS0JIA10000:
CJNEA,#3,JIAJIAMOVA,30HCJNEA,#02,JIAJIAMOV30H,#0MOV31H,#0AJMPXS0JIAJIA:
INC31HAJMPXS0JIA1000:
INC32HAJMPXS0JIA100:
INC33HAJMPXS0JIA10:
INC34HAJMPXS0JIA1:
INC35HAJMPXS0RETDELAY:
MOVR6,#9HD1:
MOVR7,#19HDJNZR7,$DJNZR6,D1RETTAB:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090HDB040H,079H,024H,030H,019H,012H,002H,078H,000H,010HEND结语:
在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。
通过这次单片机课程设计,我感觉到自己知识的严重不足。
很多方面都没能很好的掌握,在制作过程中,经常遇到自己不理解的问题,当然,在同学的帮助下,问题最终解决,在这次学习中,让我更深刻的了解了AT89C51芯片在电气控制方面的广泛运用和重大作用,所以我们一定要掌握好AT89C51芯片。
首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分,在这个设计中选择计数器T0。
T0的工作方式有:
方式0:
不推荐方式1:
16位计数器,常用方式2:
自动重装初值的8位定时/计数器方式3:
T0相当于两个独立的8位定时/计数器其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。
认真学习了教科书中关于汇编语言编程的问题,熟悉了汇编语言的编程方法和语法习惯。