单片机原理综合实训指导书v2(201306)(1)

上传人:无*** 文档编号:115072813 上传时间:2022-06-30 格式:DOC 页数:49 大小:1.45MB
收藏 版权申诉 举报 下载
单片机原理综合实训指导书v2(201306)(1)_第1页
第1页 / 共49页
单片机原理综合实训指导书v2(201306)(1)_第2页
第2页 / 共49页
单片机原理综合实训指导书v2(201306)(1)_第3页
第3页 / 共49页
资源描述:

《单片机原理综合实训指导书v2(201306)(1)》由会员分享,可在线阅读,更多相关《单片机原理综合实训指导书v2(201306)(1)(49页珍藏版)》请在装配图网上搜索。

1、单片机原理综合实训指导书深圳信息职业技术学院软件学院嵌入式专业2013年4月目录实训大纲3实训目的3实训名称3实训要求3实训内容4实验设备4实训考核4 操作过程评价(70%)4 学生实训表现评价(20%)5 实训报告质量评价(10%)5 综合评价成绩5具体实验6基础:uVision2使用方法6一 总体项目方案设计111.1 项目要求111.2 系统基本方案选择和论证111.2.2 显示模块选择方案和论证:111.2.3时钟芯片的选择方案和论证:121.3 电路设计最终方案决定12二.系统的硬件设计与实现122.1 电路设计框图122.2 系统硬件概述122.3 主要单元电路的设计132.3.1

2、单片机主控制模块的设计132.3.2时钟电路模块的设计132.3.3时钟芯片原理及说明142.3.4显示模块的设计152.3.5 按键模块设计242.3.6 闹钟模块设计24三、系统的软件设计243.1程序流程框图243.2 子程序的设计25参考资料49实训大纲课程类别: 专业必修课适用对象: 12嵌入式专业独立实践学时:一周(27学时)实训目的 本实训旨在学习单片机原理课程后,完成相应的整体程序设计任务。1. 通过实训,运用相关的单片机原理课程中单元电路及单功能程序,并将其根据需要设计整合成为整机电路和整机程序。2. 通过实训,掌握单片机应用系统的硬件扩展与配置,软件设计与调试的方法。获得整

3、机设计能力和系统程序的调试能力。3. 通过实训,掌握单片机程序设计的基本步骤、方法和常用技巧。实训名称实训要求本实训要求完成一个综合实验项目:电子钟: 1. 具有时、分、秒等显示功能;2. 具备时、分、秒校准功能;3. 具备闹钟功能4. 每个小组要撰写实训报告,实验内容应包括,是实验目的、设备、原理、步骤简述、原始数据、结果和分析以及程序清单等。 实训内容本实训以单片机原理为基础,完成一个电子钟综合实训,共计一周27学时,实训任务分解如下: 序号实 训 内 容学时其 中上午下午其他1项目主程序设计6程序设计程序调试2时钟和显示模块设计6程序设计程序调试3校准和按键模块设计6程序设计程序调试4闹

4、钟模块和整体调试6程序设计程序调试5实验报告提交33学 时 总 计27实验设备1. Keil UVision编程软件2. XL2000单片机试验仪实训考核1院内实训的考核考核内容由三部分组成,分别为:学生实际操作的情况;学生的实训表现;实训小组提交报告的质量。 操作过程评价(70%)学生按照进度完成所分配的任务,每天实训结束时,教师根据学生的完成情况及完成效果进行评价。这部分考核为形成性考核。以完成实训项目内容和要求为依据进行评价,占总成绩的70(即70分)。具体评定标准如下: 按要求完成基本任务(50分)。 工作记录完整,发现问题的数量达到80(10分)。 工作记录完整,能够发现所有问题(1

5、0分)。 学生实训表现评价(20%)该部分成绩由两部分组成,具体评定标准如下: 教师考评。由教师根据学生平时学习态度、考勤情况等确定,占总成绩的10(即10分)。 学生自评互评,实训小组根据实训的团队合作情况、实训执行情况进行互评,此项共占学生总成绩的10(即10分)。评定标准与过程评价标准相同。 实训报告质量评价(10%)由指导教师根据实训小组提交的实训报告质量评分,此项占总成绩的10(即10分)。 综合评价成绩综合评价成绩由上述三部分组成,评定等级分为优秀、良好、合格、不合格。实训报告具体实验基础:uVision2使用方法1实验目的:熟悉和掌握8051单片机常用的仿真编译软件uVision

6、2的使用方法。软件安装:直接拷贝光盘开发工具keil到c盘的根目录,去掉所有文件的只读属性。 (注意必须是c盘根目录, 不要安装在其他目录) 执行keiluv2uv2.exe即可(可将文件发送到桌面快捷方式) KEIL软件是他的驱动软件。用户也可自行搜索下载更新版本的KEIL软件。2实验原理: Keil C51的操作界面如实验图1-1所示,下面我们用一个简单的例子来了解Keil的使用。图1-1建立您的第一个项目(软件操作指南):1 点击 Project(工程)菜单,选择 New Project(新工程) ,在文件名中输入您的第一个程序项目名称,假定我们用test。保存后的文件扩展名为 uv2

7、这是 KEIL uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。注意输入的时候不要输入文件的后缀名, 默认即可。为了查找方便, 假定我们保存在c 盘的根目录。 这时会弹出让你选择单片机型号的对话框,我们选择 ATMEL-AT89C52。注意我们实际使用的是89s52,他们的资源基本是一致的,不必理会。图1-22 汇编源文件的建立: 点击 FILE(文件)菜单中的 NEW.(新文件)命令新建一个文本编辑窗口。在里面输入一个程序范例如流水灯程序,然后点击 FILE(文件)菜单中的SAVE(保存)命令保存文件,注意必须输入文件的后缀名.asm,例如保存为 C:/pro

8、g/001.asm(注意不要有中文目录,文件名不超过8 个字符,否则编译不通过!如果您是第一次使用, 那么我建议您直接保存在 c 盘的根目录,文件名同样取001.ASM, 不要试图把他保存在桌面/我的文档等等!) 图1-33 点击Target 1(目标 1)前面的”+”,出现 Source Group 1, (源程序组 1)选中右键点选”Add files Group Source Group 1” (增加文件到源程序组 1)这时选择文件类型为 Asm,再选中 001.asm 文件,再按Add 添加,在随后的提示框中按”确定”。图1-44. 在使用之前应必须对软件项目进行如下设置: 单击Pro

9、ject(工程)菜单,再在下拉菜单中单击options for target target 1(目标 1 属性) 在下图中选择output(输出)”Create HEX file”(产生 hex 文件)的选项,以便汇编后生成 HEX 代码,供编程器使用。图1-55.。你可以看到(Project Build)菜单或按钮栏可用了。选择它(或按F7)编译。相应的错误和提示将在最下一栏框里显示出来,你可以根据提示进行修改程序错误,你在改正程序中的所有错误后编译通过后;然后按下Debug Start/Stop Debug Session菜单和相应的按钮就可用了,选择它就可以开始进行软件调试了。图1-66

10、 此时在C 盘的根目录就生成了 test.hex 文件,有了这个hex 文件,在按图第三个红色的 (debug)或按 CtrlF5 快捷键可以进入仿真图1-8进入调试状态后,Debug 菜单项中的命令可以使用了,有关编译的工具栏按钮消失了,出现了一个用于运行和调试的工具栏,Debug 菜单上的大部份命令都有相应的快捷按钮。图1-9一 总体项目方案设计1.1 项目要求要求完成一个综合实验项目:电子钟: 1. 具有年、月、日、时、分、秒等显示功能;2. 具备年、月、日、时、分、秒校准功能;3. 具备闹钟功能4. 其他补充功能1.2 系统基本方案选择和论证1.2.1单片机芯片的选择方案和论证:方案一

11、: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能

12、需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用AT89S52作为主控制系统.1.2.2 显示模块选择方案和论证:方案一: 采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案三:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线

13、少。所以采用了LED数码管作为显示。1.2.3时钟芯片的选择方案和论证:方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA. 1.3 电路设计最终方案决定综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统;

14、DS1302提供时钟; LED数码管动态扫描作为显示。二.系统的硬件设计与实现2.1 电路设计框图LED数码管动态扫描显示模块AT89S52主控制模 块键盘模块 DS1302时钟模块图2-1 总体框图设计2.2 系统硬件概述本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8

15、的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由8个数码管,使用动态扫描显示方式对数字的显示。2.3 主要单元电路的设计2.3.1单片机主控制模块的设计 AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输

16、入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图2-2 所示 图2-2 主控制系统 2.3.2时钟电路模块的设计图2-3示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.KHz晶振。RST是复位/片选线

17、,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。 图2-3 DS1302的引脚图2.3.3时钟芯片原理及说明(1) 时钟芯片DS1302的工作

18、原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,

19、时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。(2) DS1302的控制字节DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR 表-1 DS1302的控制字格式(3) 数据输入输出(I/O)在控制

20、指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示 图2-4 DS1302读/写时序图(4) DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表2-5 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外

21、的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 2.3.4显示模块的设计采用XL2000实验仪器完成显示部分程序设计。由于实验设备只有8位数码管,不能同时显示年月日时分秒,需要通过按键进行选择。相关显示程序参考:数码管动态扫描显示01234567 原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。相

22、关原理: 数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H。 搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。LOOP:CLR P2.7 ;选中最后的数码管SETB P0.7 ;B段不亮SETB P0.5 ;小数点不亮SETB P0.1 ;C段不亮CLR P0.2 ;其他都亮CLR P0.3CLR P

23、0.4CLR P0.6CLR P0.0JMP LOOP ;跳转到开始重新进行END把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。也许你会说:显示1个2字就要10多行程序,太麻烦了。显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮为1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。 有了这个表格上面显示一个2的程序则可简化为:LOOP:CLR P2.7 ;选中左边的数码管MOV P0,#0A2H

24、 ;送数字2的代码到P0口JMP LOOP ;跳转到开始重新进行END 原理图中把所有数码管的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个PNP的三极管,来控制这8位哪一位工作,例如上面的例子中我们选中的是P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只需要把程序CLR P2.7改为CLR P2.0即可。 在这里就有了一个矛盾, 所有数码管的8个笔划段a-h同名端连在一起, 那么在一个屏幕上如何显示0,1,2,3,4,5这样不同的数字呢? 的确, 在这样的接法中,同一个瞬间

25、所有的数码管显示都是相同的, 不能显示不同的数字。在单片机里,首先显示一个数, 然后关掉.然后显示第二个数,又关掉, 那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。例如数码管显示01234567这么8个数,在单片机中实际的工作流程如下:先打开P2.0,送0, 然后关掉P2.0,打开P2.1送1, 再关掉P2.1,打开P2.2 送2 , 依次向下,由于速度足够快, 那么我们将连续的看到01234567这

26、8个数。程序运行照片:1、接8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51.2、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52.程序流程图:汇编语言参考程序:ORG 0000HAJMP MAINORG 0080HMAIN:CLR P2.0 ;选中第一个数码管MOV P0,#28H ;显示0LCALL DELAY ; 调用延时MOV P0,#0FFH ;关显示SETB P2.0CLR P2.1 ;选中第二个数码管MOV P0,#7EH ;显示1LCALL DELAYMOV P0,#0FFHSETB P2.1CLR P2.2 ;

27、选中第三个数码管MOV P0,#0A2H ;显示2LCALL DELAYMOV P0,#0FFHSETB P2.2CLR P2.3 ;选中第四个数码管MOV P0,#62H ;显示3LCALL DELAYMOV P0,#0FFHSETB P2.3CLR P2.4 ;选中第五个数码管MOV P0,#74H ;显示4LCALL DELAYMOV P0,#0FFHSETB P2.4CLR P2.5 ;选中第六个数码管MOV P0,#61H ; 显示5LCALL DELAYMOV P0,#0FFHSETB P2.5CLR P2.6 ;选中第七个数码管MOV P0,#21H ; 显示6LCALL DEL

28、AYMOV P0,#0FFHSETB P2.6CLR P2.7 ;选中第八个数码管MOV P0,#7AH ; 显示7LCALL DELAYSETB P2.7MOV P0,#0FFHAJMP MAIN ;重新开始DELAY: ;延时子程序MOV R7,#2D1: MOV R6,#25D2: DJNZ R6,D2DJNZ R7,D1RETEND2.3.5 按键模块设计按键接到P1口下半部分。用一条4PIN数据排线,把按键部份的JP37,接到CPU部份的P1口JP44的p1.4p1.7.按键模块参考程序见xlisp程序说明2.3.6 闹钟模块设计用1条1PIN线把喇叭部分的JP16接单片机P3.3参

29、考程序见xlisp程序说明小喇叭程序三、系统的软件设计开始3.1程序流程框图初始化DS1302读写日期、时间分离日期时间显示值显示子程序定时闹铃子程序日期、时间修改子程序返回 图3-1 主程序流程图图3-2 时间调整流程图3.2 子程序的设计DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存

30、器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 2.1 引脚功能及结构 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RS

31、T接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。 相关原理:程序运行照片:接线方法: 1、按键接到P1口下半部分。用一条4PIN数据排线,把按键部份的JP37,接到CPU部份的P1口JP44的p1.4p1.7. 2、接

32、8位数码管的数据线。将数码管部份的数据口 JP5接到CPU部份的P0口JP51. 3、接8位数码管的显示位线。将数码管部份的显示位口 JP8接到CPU部份的P2口JP52. 4、用1条1PIN线把喇叭部分的JP16接单片机P3.3 5、用1条1PIN线把继电器部分的JP18接单片机P3.5 6、用一条4PIN数据排线,把DS1302部份的JP83,接到CPU部份的P1口JP44的p1.0p1.3汇编语言参考程序:;8位数码管显示;P0 为段码口、P2 为位码口;时钟芯片:DS1302;接线方法:;八位数码管用两条8pin排线分别连p0,p2口;24c02 用一条2pin线连接P3.6, P3.

33、7;喇叭用一条1pin线连接P3.3;端口按键JP37用一条4PIN线连接P1.4,1.5,1.6,1.7;DS1302的JP83用一条4PIN线连接P1.0,1.1,1.2,1.3;* DS1302 端口位定义 *IO_DATA BIT P1.1 ; 数据传送总线SCLK BIT P1.0 ; 时钟控制总线RST BIT P1.2 ; 复位总线K1 EQU P1.4 ;独立键K2 EQU P1.5K3 EQU P1.6K4 EQU P1.7BEEP EQU P3.3 ;蜂鸣器RELAY EQU P3.5 ;继电器T_CONU EQU 22H ;中断计数TIME_L EQU 23H ;定时初值

34、TIME_H EQU 24HTIME_DATA EQU 50H ;显示时间单元首地址DATE_DATA EQU 60H ;显示日期单元首地址DS_DATA EQU 58H ;显示定时时间单元首地址;-ORG 0000HAJMP MAINORG 000BHAJMP INT_T0ORG 0080H;-MAIN:MOV TMOD,#01H ;T0,方式1MOV TIME_L,#00H ;50MS定时值MOV TIME_H,#4CHMOV T_CONU,#00H ;中断次数MOV IE,#82H ;EA=1,ET0=1MOV A,#00HMOV R0,#40H ;从40H单元开始MOV R1,#40H

35、 ;清64个单元M_CLEAR: MOV R0,AINC R0DJNZ R1,M_CLEARMOV 7FH,#0AH ;送熄灭符SETB BEEPLCALL TIME_DELAY ;调显示延时LCALL PROSET ;DS1302初始化MAIN1:LCALL GET_TIME ;从DS1302读数据程序LCALL CHULI ;实时时间数据处理MOV R0,#TIME_DATA ;显示时、分、秒LCALL DISPMOV R0,#TIME_DATALCALL TIME_DISPLAYLCALL SET_KEY ;键功能程序LCALL COMP ;实时时间与定时时间比较JB K1,MAIN1C

36、ALL BEEP_BLMAIN2:LCALL CHULI ;日期数据处理MOV R0,#DATE_DATALCALL DISP ;显示年、月、日MOV R0,#DATE_DATALCALL TIME_DISPLAYJB K1,MAIN2CALL BEEP_BLMAIN3:LCALL DS_CHULI ;定时时间数据处理MOV R0,#DS_DATALCALL DS_SP ;显示定时时间MOV R0,#DS_DATALCALL DS_DISPLAYJB K1,MAIN3CALL BEEP_BLAJMP MAIN1;-;中断服务子程序;300MS对闪动标记取反一次;-INT_T0:PUSH ACC

37、PUSH PSWMOV TL0,TIME_LMOV TH0,TIME_HINC T_CONUMOV A,T_CONUCJNE A,#06H,INT_ENDMOV T_CONU,#00HCPL 0AHINT_END:POP PSWPOP ACCRETI;-;DS1302 初始化子程序; (R0)=数据 (R1)=地址;-PROSET:CLR RST ;DS1302复位CLR SCLKNOPNOPSETB RST;MOV R1,#80H ;写秒寄存器;MOV R0,#00H ;启动振荡器;LCALL WRITE;MOV R1,#82H ;写分寄存器;MOV R0,#58H;LCALL WRITE;

38、MOV R1,#84H ;写时寄存器;MOV R0,#80H;LCALL WRITEMOV R1,#90H ;写充电寄存器MOV R0,#0ABHLCALL WRITERET;=;读时间、日期数据子程序;存放单元 40H - 46H;=GET_TIME:MOV R1,#81H ;读秒LCALL READMOV 40H,R0MOV R1,#83H ;读分LCALL READMOV 41H,R0MOV R1,#85H ;读时LCALL READMOV 42H,R0MOV R1,#87H ;读出日期LCALL READMOV 43H,R0MOV R1,#89H ;读出月份LCALL READMOV

39、44H,R0MOV R1,#8BH ;读出星期LCALL READMOV 46H,R0MOV R1,#8DH ;读出年LCALL READMOV 45H,R0RET;=;写 DS1302 子程序;=WRITE:CLR SCLKNOPNOPSETB RSTNOPMOV A,R1MOV R2,#08HWRI_01:RRC A ;传输地址到DS1302NOPNOPCLR SCLKNOPNOP MOV IO_DATA,CNOPNOP SETB SCLKNOPNOPDJNZ R2,WRI_01CLR SCLKNOPNOPMOV A,R0MOV R2,#08HWRI_02:RRC A ;传输数据到DS13

40、02NOPCLR SCLKNOPNOPMOV IO_DATA,CNOPNOPSETB SCLKNOPNOPDJNZ R2,WRI_02CLR SCLKNOPNOPCLR RSTNOPNOPRET;=;读 DS1302 子程序;=READ:CLR SCLKNOPNOPSETB RSTNOPNOPMOV A,R1MOV R2,#08HREAD_01:RRC ANOP ;先传输地址到DS1302MOV IO_DATA,CNOPNOPSETB SCLKNOPNOPCLR SCLKNOPNOPDJNZ R2,READ_01NOPNOPSETB IO_DATACLR ACLR CMOV R2,#08HRE

41、AD_02:CLR SCLKNOPNOP MOV C,IO_DATANOPNOP RRC A ;再从DS1302接收数据NOPNOP SETB SCLKNOPNOP DJNZ R2,READ_02MOV R0,ACLR RSTRET;=;实时时间、日期数据处理子程序;=CHULI:MOV A,40H ;处理秒数据ANL A,#0FHMOV 50H,AMOV 70H,AMOV A,40HANL A,#11110000BSWAP AMOV 51H,AMOV 71H,A;-MOV A,41H ;处理分数据ANL A,#0FHMOV 52H,AMOV 72H,AMOV A,41HANL A,#1111

42、0000BSWAP AMOV 53H,AMOV 73H,A;-MOV A,42H ;处理时数据ANL A,#0FHMOV 54H,AMOV 74H,AMOV A,42HANL A,#11110000BSWAP AMOV 55H,AMOV 75H,A;-MOV A,43H ;处理日数据ANL A,#0FHMOV 60H,AMOV 76H,AMOV A,43HANL A,#11110000BSWAP AMOV 61H,AMOV 77H,A;-MOV A,44H ;处理月数据ANL A,#0FHMOV 62H,AMOV 78H,AMOV A,44HANL A,#11110000BSWAP AMOV

43、63H,AMOV 79H,A;-MOV A,45H ;处理年数据ANL A,#0FHMOV 64H,AMOV 7AH,AMOV A,45HANL A,#11110000BSWAP AMOV 65H,AMOV 7BH,A;-MOV A,46H ;处理周数据MOV 66H,AMOV 7CH,ARET;=;实时时间、日期查表取数子程序;=DISP: ;MOV R0,#TIME_DATAMOV R3,#06HDISP1: MOV A,R0MOV DPTR,#TAB_NUMOVC A,A+DPTRMOV R0,AINC R0DJNZ R3,DISP1RET;=;时间、日期显示子程序;=TIME_DISP

44、LAY:;MOV R0,#TIME_DATA ;取得显示单元首地址MOV R1,#07FH ;从第一个数码管开始MOV R2,#08H ;共8个数码管DISLP: MOV P0,R0 ;获得当前单元数据MOV A,R1MOV P2,A ;数码显示JB ACC.5,DISLP1 ;第三位数码管显示 MOV P0,#0f7HJMP DISLP3DISLP1: JB ACC.2,DISLP2 ;第六位数码管显示 MOV P0,#0f7HJMP DISLP3DISLP2: INC R0DISLP3: MOV A,R1 ;为下一个数准备RR A ;下一个单元MOV R1,A ;保存LCALL DELAY

45、 ;为了保证数码管亮度,延时DJNZ R2,DISLP ;重复显示,直到全部数据刷新过RET ;返回DELAY:MOV R4,#0AHL15: MOV R5,#64HL16: DJNZ R5,L16DJNZ R4,L15RET;*SET_KEY:SETB K1 ;增加键SETB K2 ;减少键SETB K3 ;选择键SETB K4 ;定时设定功能键NOPJB K4,KEY01LCALL BEEP_BLJMP DS_KEY ;进入定时值设定子程序KEY01: JB K2,KEY02LCALL BEEP_BLJMP SET_TIME ;进入时间设定子程序KEY02: JB K3,KEY03LCAL

46、L BEEP_BLCPL 20H.0 ;止闹标记取反KEY03: RET;-DS_KEY:CALL DS_DELAYJNB K4,$ LCALL DSSETCALL DS_DELAYRET;=;实时时间设定子程序;K1为加键、K2为减键、K3为选择键;=SET_TIME:MOV R1,#8EH ;写保护寄存器MOV R0,#00H ;允许写入LCALL WRITEMOV R1,#80H ;写秒寄存器MOV R0,#80H ;停止振荡器工作LCALL WRITESETB TR0K001: CALL TIME_DELAY ;校时JNB K3,K001 ;K3为位移键K010:CALL CHULIJ

47、NB 0AH,KH01MOV 54H,7FH ;送入熄灭符MOV 55H,7FHJMP KH02KH01: MOV 54H,74H ;送实时值MOV 55H,75H ;送实时值KH02: MOV R0,#TIME_DATACALL DISPMOV R0,#TIME_DATACALL TIME_DISPLAYJNB K1,K011AJNB K2,K011BJNB K3,K002JMP K010K011A:MOV A,42HADD A,#01HDA AMOV 42H,AXRL A,#24HJNZ K012AMOV 42H,#00HK012A: MOV R1,#84H ;写时寄存器MOV R0,42

48、HLCALL WRITECALL TIME_DELAYJMP K010K011B:MOV A,42HXRL A,#00HJZ K012BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,42H ;加被减数DA A ;十进制调整MOV 42H,A ;XRL A,#00HJNZ K012CK012B: MOV 42H,#23HK012C: MOV R1,#84H ;写时寄存器MOV R0,42HLCALL WRITECALL TIME_DELAYJMP K010;-K002: CALL TIME_DELAY ;校分JNB K3,K002

49、 ;K3为位移键K020: CALL CHULIJNB 0AH,KM01MOV 52H,7FH ;送入熄灭符MOV 53H,7FHJMP KM02KM01: MOV 52H,72H ;送实时值MOV 53H,73H ;送实时值KM02: MOV R0,#TIME_DATACALL DISPMOV R0,#TIME_DATACALL TIME_DISPLAYJNB K1,K021AJNB K2,K021BJNB K3,K003JMP K020K021A:MOV A,41HADD A,#01HDA AMOV 41H,AXRL A,#60HJNZ K022AMOV 41H,#00HK022A: MO

50、V R1,#82H ;写分寄存器MOV R0,41HLCALL WRITECALL TIME_DELAYJMP K020;-K021B:MOV A,41HXRL A,#00HJZ K022BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,41H ;加被减数DA A ;十进制调整MOV 41H,A ;XRL A,#00HJNZ K022CK022B: MOV 41H,#59HK022C: MOV R1,#82H ;写分寄存器MOV R0,41HLCALL WRITECALL TIME_DELAYJMP K020;-K003: CAL

51、L DATE_DELAY ;校日JNB K3,K003 ;K3为位移键K030: CALL CHULIJNB 0AH,KR01MOV 60H,7FH ;送入熄灭符MOV 61H,7FHJMP KR02KR01: MOV 60H,76H ;送实时值MOV 61H,77H ;送实时值KR02: MOV R0,#DATE_DATACALL DISPMOV R0,#DATE_DATACALL TIME_DISPLAYJNB K1,K031AJNB K2,K031BJNB K3,K004JMP K030K031A:MOV A,43HADD A,#01HDA AMOV 43H,AXRL A,#32HJNZ

52、 K032AMOV 43H,#00HK032A: MOV R1,#86H ;写日寄存器MOV R0,43HLCALL WRITECALL DATE_DELAYJMP K030K031B:MOV A,43HXRL A,#00HJZ K032BSETB C ;求补运算CLR AADDC A,#99H ;加99SUBB A,#01H ;减去减数ADD A,43H ;加被减数DA A ;十进制调整MOV 43H,AXRL A,#00HJNZ K032CK032B: MOV 43H,#31HK032C: MOV R1,#86H ;写日寄存器MOV R0,43HLCALL WRITECALL DATE_D

53、ELAYJMP K030;-K004: CALL DATE_DELAY ;校月JNB K3,K004 ;K3为位移键K040: CALL CHULIJNB 0AH,KC01MOV 62H,7FH ;送入熄灭符MOV 63H,7FHJMP KC02KC01: MOV 62H,78H ;送实时值MOV 63H,79H ;送实时值KC02: MOV R0,#DATE_DATACALL DISPMOV R0,#DATE_DATACALL TIME_DISPLAYJNB K1,K041AJNB K2,K041BJNB K3,K005JMP K040K041A:MOV A,44HADD A,#01HDA AMOV 44H,AXRL A,#13HJNZ K042AMOV 44H,#00HK042A: MOV R1,#88H

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!