郑州华信学院
课程设计说明书
题目: 基于单片机控制的电子万年历设计
* 名: *** 院 (系): 机电工程学院 专业班级: 10级电气工程一班 学 号: ********** 指导教师: 宋东亚 杨坤漓
成 绩:
时间: 2012 年 11 月 20 日至 2013 年 1 月 5 日
目录
1 引言.......................................................................................................................................................... 2
1.1背景 ................................................................................................................................................. 2 1.2设计目的 ......................................................................................................................................... 2 1.3应用价值 ......................................................................................................................................... 2 3 总体设计及核心部件简介 ...................................................................................................................... 3
3.1 总体设计 .................................................................................................................................... 3 3.2 核心部件简介 .............................................................................................................................. 3
3.2.1微处理器 ............................................................................................................................. 3 3.2.2 时钟芯片DS1302的结构及工作原理 ............................................................................ 4 3.2.3输出LCD显示功能简介 ..................................................................................................... 5 3.2.4 按键电路 ........................................................................................................................ 6 3.3 总体设计框图 ............................................................................................................................ 6 3.4 硬件设计 ...................................................................................................................................... 6
3.4.1系统硬件框图 ..................................................................................................................... 6 3.5软件设计 ......................................................................................................................................... 7
3.5.1主程序流程图 ..................................................................................................................... 7 3.5.2 从1302读取日期和时间程序 ................................................................................................ 8
3.5.3 Proteus ISIS简介 ....................................................................................................... 9
4 仿真与调试 ............................................................................................................................................ 10 5 设计体会与总结 .................................................................................................................................... 10 6 参考文献 ................................................................................................................................................ 13 7 附录........................................................................................................................................................ 14
1
1 引言
1.1背景
单芯片微型计算机简称单片机,它有微处理器、存储器、I/O接口电路所组成。将其配以晶振和复位电路后就形成可以简单的计算机应用系统。随着计算机技术的发展,人们发现了计算机在逻辑处理及工业控制等方面也具有非凡的能力,在控制领域中,人们更多的关心计算机的低成本、小体积、运行的可靠和控制的灵活性。因单片机体积小、控制功能强,且其非凡的嵌入式应用形态对于满足嵌入式应用需求具有独特的优势,所以单片机应用技术已经成为电子应用系统设计中最为常用的技术手段。美国Intel公司分别于1971年生产出4位单片机4004和1972年生产出8位单片机8008。随着1976年MCS-48单片机的问世,单片机的发展近入了全盛时期。并在其后的30年里多次更新换代,大约每二三年集成度就增大一倍,性能翻一番。 随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。
本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、时钟电路DS1302、显示电路、按键电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。
1.2设计目的
(1)加强对51系列单片机的构造了解及应用,熟悉汇编语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。 (2)用单片机模拟实现具体应用使个人设计系统能够真正使用;
(3)把理论知识与实践知识相结合,充分发挥个人能力,并在实践中得到锻炼; (4)提高利用已学的知识分析和解决问题的能力; (5)提高动手实践能力。
1.3应用价值
随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化等专业技术人员必须掌握的技术。而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目,因为它的有
2
很好的开放性和可发挥性。LED数字显示的日历时钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。数字显示的日历时钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管式显示的日历时钟逐渐受到人们的欢迎。
2 设计方案
本设计选用的是单片机(8051)来实现电子万年历的功能。共具备两个功能: (1)显示年月日及分秒信息 (2)具有可调整日期和时间功能。
系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C51单片机为控制中心,显示模块采用普通的共阴极LED数码管,键输入采用中断实现功能调整,计时使用AT89C51单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。
3 总体设计及核心部件简介
3.1 总体设计
单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。
本设计基于AT89C51单片机设计的电子万年历,以AT89c51单片机为核心,配备数码管显示模块、按键等功能模块。采用BCD-7段译码器和时钟芯片来实现的。万年历采用24小时制方式显示时间,在数码管上显示年、月、日、小时、分钟、秒等功能。
设计主要包括硬件设计和软件编程两个方面。硬件电路设计主要包括中央处理单元电路、时钟电路、执行电路等几部分。软件用汇编语言来实现,主要包括主程序、键盘扫描子程序、时间设置子程序等软件模块。
3.2 核心部件简介
3.2.1微处理器
1.电源 (1) VCC - 芯片电源,接+5V; (2)VSS - 接地端; 2. 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
3
3. 控制线:控制线共有4根, (1) ALE/PROG:地址锁存允许/片内EPROM编程脉冲 [1] ALE功能:用来锁存P0口送出的低8位地址
[2] PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 (2) PSEN:外ROM读选通信号。 (3) RST/VPD:复位/备用电源。 [1] RST(Reset)功能:复位信号输入端。 [2] VPD功能:在Vcc掉电情况下,接备用电源。 (4) EA/Vpp:内外ROM选择/片内EPROM编程电源。 [1] EA功能:内外ROM选择端。
[2] Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 4. I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)
图3-1 AT89C51管脚
3.2.2 时钟芯片DS1302的结构及工作原理
1. DS1302的结构及工作原理
4
DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 2.
引
脚
功
能
及
结
构
图3-2所示出DS1302 的引脚排列,其中Vcc1 为后备电源,VCC2 为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302 由Vcc1 或Vcc2 两者中的较大者供电。当Vcc2 大于Vcc1+0.2V 时,Vcc2 给DS1302供电。当Vcc2 小于Vcc1 时,DS1302 由Vcc1 供电。X1 和X2 是振荡源,外接32.768kHz 晶振。RST 是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送.RST输入有两种功能:首先,RST 接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST 提供终止单字节或多字节数据的传送手段。当RST 为高电平时,所有的数据传送被初始化,允许对DS1302 进行操作。如果在传送过程中RST 置为低电平,则会终止此次数据传送,I/O 引脚变为高阻态。上电运行时,在Vcc≥2.5V 之前,RST 必须保持低电平。只有在SCLK 为低电平时,才能将RST 置为高电平。I/O 为串行数据输入输出端(双向),后面有详细说明。SCLK 始终是输入端。
图3-2 DS1302管脚图
3. 数据输入输出(I/O)
在控制指令字输入后的下一个SCLK 时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0 开始。同样,在紧跟8 位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302 的数据,读出数据时从低位0 位到高位7。
3.2.3输出LCD显示功能简介
5
液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。
图3-3 LCD数码显示屏
3.2.4 按键电路
每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O数目较多。
图3-4 AT89C51管脚图
3.3 总体设计框图
按键与按钮 电路 CPU AT89C51 液晶显示电路 复位等辅助电路 总体开关 电源 系统 图3-5总体设计框图
3.4 硬件设计
3.4.1系统硬件框图
6
时钟芯片DS1302
图3-6-1 系统硬件框图
串口 AT89C51 P2口 LED显示器 驱动电路
图3-6-2设计总电路图
3.5软件设计
3.5.1主程序流程图
7
CPU系统初始化 定时器初始化 串口初始化
读写日期、时间信息 分离日期、时间信息 显示子程序
显示的时间日期是否正确? N 日期、时间修改子程序 Y 返回 图3-7
电子万年历的功能是在程序控制下实现的。该系统的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。这样有利于程序修改和调试,增强了程序的可移植性。
3.5.2 从1302读取日期和时间程序
开始
系统初始化 N 需要调整时间 吗? Y 调整时间和日期 读1302时间、日期 8
图3-8 从1302读取程序
3.5.3 Proteus ISIS简介
Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的特点是:
(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。
(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、I2 C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(3)目前支持的单片机类型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。 (4)支持大量的存储器和外围芯片。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 ,可仿真ARM、51、AVR、PIC。
Proteus启动画面:
图3-9 Proteus启动画面
9
4 仿真与调试
通过在KEIL下对源程序的编译,改正了其中的很多错误,运行之后生成HEX文件。然后按原理图选择正确合理的电气元件,画出正确而且美观的电路图,加载源程序运行,顺利实现了电子万年历年月日时分秒的输出。
下图为电子万年历的显示效果:
按下调时键后(第一个键)表示小时的数字开始闪动:
按下调日期键后(第三个键)年代键开始闪动:
5 设计体会与总结
作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的
实
践
平
台
。
这次单片机课程设计我们历时几个星期,在我们班里算是倒数几组完成的吧,但经过这几个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能! 单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏
10
味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永
远
无
法
升
级
为
设
计
。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;另外要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。 通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西
应
用
到
实
际
中
。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组
1 1
同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
12
6 参考文献
[1]邸春芳,电脑实时时钟的设计,(西南石油学院电子信息工程学院)
[2]AT89C51,http://www.zlgmcu.com,广州周立功单片机发展有限公司 [3]李全利,单片机原理及接口技术[M],高等教育出版社 [4]王文杰,单片机应用技术[M],冶金工业出版社
[5]朱清慧,PROTEUS教程——电子线路设计、制版与仿真[M],清华大学出版社 [6]单片机实验指导书,天煌教仪
[7]彭伟,单片机C语言程序设计实训100例[M],电子工业出版社 [8]王文杰、许文斌,单片机应用技术,冶金工业出版社
13
7 附录
源程序代码:
SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 TRL EQU P3.5 JIA1 EQU P3.6 TSH EQU P3.7 YEAR DATA 66H MONTH DATA 65H WEEK DATA 64H DAY DATA 63H HOUR DATA 62H MINUTE DATA 61H SECOND DATA 60H DS_ADDR DATA 32H DS_DATA DATA 31H ORG 0H AJMP START MAIN2F:
LJMP MAIN2 START:
MOV SP,#70H LCALL DELAY1
MOV DS_ADDR,#8EH MOV DS_DATA,#00H LCALL WRITE START0:
MOV DS_ADDR,#81H LCALL READ ANL A,#7FH
MOV DS_ADDR,#80H MOV DS_DATA,A LCALL WRITE
START1:MOV DS_ADDR,#0C0H MOV DS_DATA,#9CH LCALL WRITE MOV 20H,#0 MOV 21H,#0FH
14
MOV 22H,#0
MAIN1: JB TRL,MAIN2FA MOV 22H,#1
AJMP MAIN2FB MAIN2FA:JB TSH,MAIN2F MOV 22H,#2
MOV DS_ADDR,#81H LCALL READ ORL A,#80H
MOV DS_ADDR,#80H MOV DS_DATA,A LCALL WRITE MAIN4: LCALL DISP JNB TSH,MAIN4 MOV 22H,#2 LJMP SSS
MAIN2FB:MOV DS_ADDR,#81H LCALL READ ORL A,#80H
MOV DS_ADDR,#80H MOV DS_DATA,A LCALL WRITE MAIN4J:LCALL DISP
JNB TRL,MAIN4J MOV 22H,#1 NNN: LCALL DISP JNB TRL,YYY MOV 20H,#8 LCALL DISP JB JIA1,NNN NNN2: LCALL DISP JNB JIA1,NNN2 MOV R7,YEAR LCALL JIAY1 MOV YEAR,A CJNE A,#30H,NNN1 MOV YEAR,#06
NNN1: MOV DS_ADDR,#8CH MOV DS_DATA,YEAR LCALL WRITE MOV R0,YEAR LCALL DIVIDE MOV 4AH,R1 MOV A,4AH
15
SWAP A
MOV 4AH,A MOV 4BH,R2 MOV A,4BH SWAP A
MOV 4BH,A SJMP NNN YYY: LCALL DISP JNB TRL,YYY YYY3: JNB TRL,DDD MOV 20H,#4 LCALL DISP
JB JIA1,YYY3 YYY2: LCALL DISP JNB JIA1,YYY2 MOV R7,MONTH LCALL JIAY1
MOV MONTH,A CJNE A,#13H,YYY1 MOV MONTH,#1
YYY1: MOV DS_ADDR,#88H MOV DS_DATA,MONTH LCALL WRITE
MOV R0,MONTH LCALL DIVIDE MOV 48H,R1 MOV A,48H SWAP A
MOV 48H,A MOV 49H,R2 MOV A,49H SWAP A
MOV 49H,A SJMP YYY3 DDD: LCALL DISP JNB TRL,DDD MOV 20H,#2H DDD3: JNB TRL,NYD MOV 20H,#2 LCALL DISP
JB JIA1,DDD3 DDD2: LCALL DISP JNB JIA1,DDD2 MOV R7,DAY
16
LCALL JIAY1 MOV DAY,A
CJNE A,#32H,DDD1 MOV DAY,#1
DDD1: MOV DS_ADDR,#86H MOV DS_DATA,DAY LCALL WRITE MOV R0,DAY LCALL DIVIDE MOV MOV SWAP MOV MOV MOV SWAP MOV SJMP NYD: LJMP SSS: LCALL JNB MOV SSS3: JNB LCALL JB SSS2: LCALL JNB MOV LCALL MOV CJNE MOV SSS1: MOV MOV LCALL MOV LCALL MOV LCALL MOV MOV SJMP FFF: LCALL JNB
46H,R1 A,46H A
46H,A 47H,R2 A,47H A 47H,A DDD3 MAIN3A DISP TSH,SSS 20H,#8 TSH,FFF DISP JIA1,SSS3 DISP JIA1,SSS2 R7,HOUR JIAY1 HOUR,A A,#24H,SSS1 HOUR,#0
DS_ADDR,#84H DS_DATA,HOUR WRITE R0,HOUR WRITE R0,HOUR DIVIDE 44H,R1 45H,R2 SSS DISP TSH,FFF
17
MOV 20H,#4 FFF3: JNB TSH,MMM LCALL DISP JB JIA1,FFF3 FFF2: LCALL DISP JNB JIA1,FFF2 MOV R7,MINUTE LCALL JIAY1
MOV MINUTE,A LCALL JIAY1
MOV MINUTE,A CJNE A,#60H,FFF1 MOV MINUTE,#0 FFF1: MOV DS_ADDR,#82H MOV DS_DATA,MINUTE LCALL WRITE
MOV R0,MINUTE LCALL DIVIDE MOV 42H,R1 MOV 43H,R2 SJMP FFF3 MMM: LCALL DISP JNB TSH,MMM MOV 20H,#2 MMM3: JNB TSH,MAIN3 LCALL DISP
JB JIA1,MMM3 MMM2: LCALL DISP JNB JIA1,MMM2 MOV R7,SECOND LCALL JIAY1
MOV SECOND,A CJNE A,#60H,MMM1 MOV SECOND,#0 MMM1: ORL SECOND,#80H MOV DS_ADDR,#80H MOV DS_DATA,SECOND LCALL WRITE
ANL SECOND,#7FH MOV R0,SECOND LCALL DIVIDE MOV 40H,R1 MOV 41H,R2 SJMP MMM3
18
MAIN3: SETB P3.0 SETB P3.1 MOV 22H,#0 LCALL DISP
JNB TSH,MAIN3 MOV 20H,#0 MOV 21H,#0FH MOV 22H,#0
MOV DS_ADDR,#81H LCALL ANL MOV MOV LCALL LJMP MAIN3A:SETB SETB MOV LCALL JNB MOV MOV MOV MOV LCALL ANL MOV MOV LCALL LJMP MAIN2: MOV MOV LCALL MOV MOV LCALL MOV MOV LCALL MOV MOV LCALL MOV MOV
READ A,#7FH
DS_ADDR,#80H DS_DATA,A WRITE MAIN1 P3.0 P3.1 22H,#0 DISP
TRL,MAIN3A 20H,#0 21H,#0FH 22H,#0
DS_ADDR,#81H READ A,#7FH
DS_ADDR,#80H DS_DATA,A WRITE MAIN1 P1,#0
DS_ADDR,#8DH READ
YEAR,DS_DATA DS_ADDR,#89H READ
MONTH,DS_DATA DS_ADDR,#87H READ
DAY,DS_DATA DS_ADDR,#85H READ
HOUR,DS_DATA DS_ADDR,#83H
19
LCALL READ
MOV MINUTE,DS_DATA MOV DS_ADDR,#81H LCALL READ
MOV SECOND,DS_DATA MOV R0,YEAR LCALL DIVIDE MOV 4AH,R1 MOV A,4AH SWAP A
MOV 4AH,A MOV 4BH,R2 MOV A,4BH SWAP A
MOV 4BH,A
MOV R0,MONTH LCALL DIVIDE MOV 48H,R1 MOV A,48H SWAP A
MOV 48H,A MOV 49H,R2 MOV A,49H SWAP A
MOV 49H,A MOV R0,DAY LCALL DIVIDE MOV 46H,R1 MOV A,46H SWAP A
MOV 46H,A MOV 47H,R2 MOV A,47H SWAP A
MOV 47H,A MOV R0,HOUR LCALL DIVIDE MOV 44H,R1 MOV 45H,R2
MOV R0,MINUTE LCALL DIVIDE MOV 42H,R1 MOV 43H,R2
MOV R0,SECOND
20
LCALL DIVIDE MOV 40H,R1 MOV 41H,R2 LCALL DISP LJMP MAIN1 DISP: SETB P3.1 SETB P3.0
JNB 10H,DISP2 CLR P3.0 DISP2: JNB CLR DISP1: NOP MOV ORL MOV JNB MOV RL MOV CJNE MIAO1: JC CLR CLR SJMP MIAOL: SETB LCALL CLR LCALL MOV ORL MOV SETB LCALL CLR LCALL FEN: MOV ORL MOV JNB MOV RL MOV CJNE FEN1: JC
11H,DISP1 P3.1
A,46H A,40H P1,A
01H,MIAOL A,21H A
21H,A
A,#78H,MIAO1 MIAOL P2.4 P2.5 FEN P2.5 DELAY1 P2.5
DELAY2 A,47H A,41H P1,A P2.4
DELAY1 P2.4
DELAY2 A,48H A,42H P1,A 02H,FENL A,21H A
21H,A
A,#78H,FEN1 FENL
21
CLR P2.2 CLR P2.3 SJMP SH1 FENL: SETB P2.3 LCALL DELAY1 CLR P2.3
LCALL DELAY2 MOV A,49H ORL A,43H MOV P1,A SETB P2.2
LCALL DELAY1 CLR P2.2
LCALL DELAY2 SH1: MOV A,4AH ORL A,44H MOV P1,A JNB 03H,SHIL MOV A,21H RL A
MOV 21H,A
CJNE A,#78H,SHI1 SHI1: JC SHIL SJMP SHI2 SHIL: SETB P2.1
LCALL DELAY1 CLR P2.1
LCALL DELAY2 MOV A,4BH ORL A,45H MOV P1,A SETB P2.0
LCALL DELAY1 CLR P2.0
LCALL DELAY2 SJMP SFM SHI2: CLR P2.0 CLR P2.1 SFM: RET
DELAY1:MOV R7,#5 DELAY11:MOV R6,#0 DJNZ R6,$
DJNZ R7,DELAY11 RET
22
DELAY2:MOV R7,#1 DELAY21:MOV R6,#0 DJNZ R6,$
DJNZ R7,DELAY21 RET
DELAY3:MOV R7,#40 DELAY31:MOV R6,#0 DJNZ R6,$ DJNZ R7,DELAY31 RET
JIAY1: MOV A,R7 ADD A,#1 DA A RET
DIVIDE: MOV A,R0 ANL A,#0FH MOV R1,A MOV A,R0 SWAP A ANL A,#0FH MOV R2,A RET
WRITE: CLR SCLK NOP SETB RST NOP MOV A,DS_ADDR MOV R4,#8 WRITE1: RRC A NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK
23
NOP MOV A,DS_DATA MOV R4,#8 WRITE2: RRC A NOP CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET
READ: CLR SCLK NOP NOP SETB RST NOP MOV A,DS_ADDR MOV R4,#8 READ1: RRC A NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP NOP DJNZ R4,READ1 MOV R4,#8
READ2: CLR SCLK NOP NOP
24
NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP
DJNZ R4,READ2 MOV DS_DATA,A CLR RST RET
DEY: NOP NOP NOP NOP NOP NOP NOP END
25
因篇幅问题不能全部显示,请点此查看更多更全内容