您的当前位置:首页正文

基于AT89S51的电子钟(带电路图及程序)

2022-07-19 来源:易榕旅网


《单片机技术》课程设计任务

一、设计题目:基于单片机并行口的电子钟的设计 二、适用班级:电子0303 三、指导教师:王韧 四、任务与要求:

在智能化仪器仪表中,控制核心均为微处理器,而单片机以其高性能、高速度、体积小、价格低廉、稳定可靠而得到广泛应用,是设计智能化仪器仪表的首选微控制器,单片机结合简单的接口电路即可构成电子钟,它可广泛应用于工业、农业、日常生活等领域,与传统钟表相比较,它具有高精度、高可靠性、操作方便、价格便宜、智能化等特点,是钟表的一个发展方向,具有一定的实用价值。

1、本课题任务如下:

设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。 2、本课题要求如下:

(1)在AT89S51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。 (2)、利用六个LED显示当前时间。

(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1。 (4)、单片机采用AT89S51,fosc=12MHZ。 (5)、电子钟供电电源电路的设计。

(6)、电子钟时钟电路,复位电路的设计。

(7)、编写系统监控程序、键扫子程序、显示子程序及其它所需子程序、功能程序和中断服务程序。

(8)、计算机输出课程设计说明书一份。 (9)、设计时间:二周 (10)、制作电子钟实物。 五、课程设计说明书主要内容 1、课程设计说明书封面;

2、课程设计任务书封面及课程设计任务书; 3、前言;

4、课程设计说明书目录;

5、电子钟功能说明及总体方案介绍; 6、详细介绍电子钟的工作原理;

7、绘制电子钟整机电路框图、整机电路原理图、电源电路原理图及PCB图各1份;

8、列出电子钟元器件清单;

9、详细介绍电子钟单元电路工作原理(包括电源电路、时钟电路、复位电路、键盘/显示接口电路及所用主要芯片); 10、单片机硬件资源的使用分配情况;

11、画出电子钟软件系统监控程序、各子程序、中断服务程序及各功能程序的流程框图;

12、列出电子钟软件系统程序清单; 13、写出电子钟的使用说明;

14、设计体会,谈谈本设计的重点、难点及精妙之处,是否存在不足之点及改进意见;

15、提出《单片机技术》课程教学建议; 16、参考资料。

六、课程设计说明书书写格式

参照“课程设计说明书书写格式”文件。 七、参考资料

[1]、曹巧媛,单片机原理及应用[M],北京:电子工业出版社,1997.7。

[2]、赵秀珍,单永磊,单片微型计算机原理及其应用[M],北京:中国水利水电出版社,2001.8。

[3]、张毅刚,修林成,胡振江,MCS-51单片机应用设计[M],哈尔滨:哈尔滨工业大学出版社,1990.8。

[4]、张洪润,兰清华,单片机应用技术教程[M],北京:清华大学出版社,1997.11。

[5]、李华,MCS-51系列单片机实用接口技术[M],北京:北京航空航天大学出版社,1993.8。

[6]、陈景初,单片机应用系统设计与实践[M],北京:北京航空航天大学出版社。

[7]、马家辰,MCS-51单片机原理与接口技术[M],哈尔滨:哈尔滨工业大学出版社。

[8]、刘守义,单片机应用技术[M],西安:西安电子科技大学出版社。

电气自动化教研室 2005年9月10日

前 言

电子科技日新月异,人们对现代电子设备的智能化和微型化及其精度提出了更高的要求,而单片机因其具有稳定可靠、 体积小、 价格低廉等特点,成为设计智能化仪器仪表的首选微控制器,因此本次我们没有选用传统的专用的时钟芯片,而是采用了AT89S51芯片,此款单片机可以使用软件对其进行在线编程,其灵活性和可靠性都相对提高。

通过此次实物制作,增强了我们的动手能力,把理论与实践融合在一起。同时,也进一步加深了对单片机的硬件结构的理解和巩固,编程能力也得到了提高。在此将电子钟制作过程中用到的知识进行了一些总结,并记录了遇到的问题,希望自己今后能注意。同时也希望能成为读者的参考资料,能帮助读者避免出现相同的问题,并能从中得到一些启发。

在此要感谢王老师对我的指导,感谢同组人的合作及帮助过我的同学。由于编者水平有限,书中的错漏在所难免,恳请读者批评指正。

编者:吴 海 林 2005—11—13

目 录

1 多功能电子表说明及总体方案介绍 ............................... 1 1.1 多功能电子表计时方案 ...................................... 1 1.2 多功能电子表键盘/显示方案 ................................. 2 2 电子钟的工作原理 ............................................. 4 3 多功能电子表原理框图、原理图及PCB图 ......................... 5 3.1 多功能电子表原理框图 ...................................... 5 3.2 多功能电子表整机原理图 .................................... 5 3.3 多功能电子表电路PCB图 ................................... 7 4 多功能电子表元器件清单 ...................................... 9 5 多功能电子表单元电路工作原理及芯片 ......................... 11 5.1 电源电路工作原理 ........................................ 11 5.2 时钟电路工作原理 ........................................ 11 5.3 复位电路工作原理 ........................................ 12 5.4 键盘电路工作原理 ........................................ 12 5.5 显示器工作原理 .......................................... 13 5.6 AT89S51芯片 ............................................. 17 5.7 74LS244芯片 ............................................. 20 5.8 S8550PNP三极管 .......................................... 21 5.9 四位一体数码管 .......................................... 23 6 单片机硬件资源分配 ......................................... 25 7 程序流程图 ................................................. 26 8 电子钟程序清单 ............................................. 32 9 误差分析 ................................................... 40 10 电子钟使用说明 ............................................. 43 11 设计体会 ................................................... 44 12 教学意见 ................................................... 45 13 参考资料 ................................................... 46

1 多功能电子表说明及总体方案介绍

本次设计电子钟系统功能简单,用单片机的最小系统就能得以实现。而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。下面是本人在设计前对各种设计方案的考虑:

1.1 多功能电子表计时方案

方案一:采用实时时钟芯片

实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。 方案二: 软件控制。

利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于ATMEL公司的AT89S51单片机是低功耗的具有4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系和引脚兼容。片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大,而且也较容易购买,故本设计中所选的单片机为AT89S51单片机。

1

1.2 多功能电子表键盘/显示方案

方案一: 8279扩展。

该方案方框图如图1.2.1所示,8279是一种可编程的键盘/显示接口专用芯片,它含有键盘输入和显示输出两种功能,键扫描程序和动态显示程序全由8279硬件自动完成,此种方案能以比较简单的硬件

电路和较少的软件开销实现单片机与键盘、LED显示器的接口。 方案二: 8155扩展,LED动态显示。

该方案方框图如图1.2.2所示,8155是一块可编程的接口芯片,与单片机的接口非常简单,它的键盘、显示共用一个接口电路,可节省I/O口。但动态扫描方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。

方案三: 串口扩展,LED静态显示。

该方案方框图如图1.2.3所示,独立式键盘配置灵活,软件结构简单,按键较多时不宜采用。静态显示占用口资源少,采用串口传输实现静态显示, LED数码管与单片机之间通过6个移位寄存器相连,显用于并行口资源较少的场合。

示亮度有保证,但此方案的硬件开销大,电路复杂,信息刷新速度慢,比较适

2

方案四: 独立式按键,LED动态显示。

该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实

时测控任务,因此,本系统采用此种方案。

3

2 多功能电子表的工作原理

本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:时钟电路,复位电路,键盘以及显示电路。

时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。复位电路可使电子表恢复到初始状态。键盘可对电子表进行开启、停止,还能实现时、分、秒的显示及设定等操作。显示电路由两个共阳级4位一体LED数码管构成,它的段控端和位控端通过74LS244及其S8550PNP型号三极管与AT89S51单片机的I/O口相连,显示器可使电子表显示出时、分、秒。

多功能电子表的计时原理为:上电后,电子表显示P.提示符,按下A键后,电子表从00:00:00开始计时。当定时器0的定时时间满62.5ms后,定时器0溢出一次,溢出满16次后,电子表的秒加1,满60秒后,分加1,满60分后,时加1,满24时后,电子表重新从00:00:00开始计时。

4

3 多功能电子表原理方框图、原理图及PCB图

3.1 多功能电子表原理方框图

多功能电子表整机电路方框图如图3.1

3.2 多功能电子表电路原理图

3.2.1多功能电子表电源电路原理图

直流稳压电源电路原理图如图3.2所示

5

3.2.2 多功能电子表整机电路原理

6

3.3 多功能电子表电路PCB图

3.3.1 多功能电子表电源电路PCB图

电源电路PCB图如图3.4所示

7

3.3.2 多功能电子表整机电路PCB图

多功能电子表整机电路PCB图如图3.5所示

3.5整机PCB图

8

4 多功能电子表元器件清单

多功能电子表电路所有元器件清单如表4.1所示 表4.1 多功能电子表元器件清单1 元件名称 封装形式 LED数码管(共阳极) LED数码管(共阳极) 510Ω电阻 510Ω电阻 510Ω电阻 510Ω电阻 510Ω电阻 510Ω电阻 510Ω电阻 510Ω电阻 1K电阻 200电阻 4.7K电阻 4.7K电阻 4.7K电阻 4.7K电阻 4.7K电阻 4.7K电阻 4.7K电阻 4.7K电阻 电源插座 74LS244芯片

元件号 D1 D2 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 DIANYUAN A1 9

DIP-12 DIP-12 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 AXIAL0.4 UIN DIP-20 S8550PNP三极管 S8550PNP三极管 S8550PNP三极管 S8550PNP三极管 S8550PNP三极管 S8550PNP三极管 轻触开关A 轻触开关B 轻触开关C 轻触开关D 轻触开关 12M晶振 33pF电容 33pF电容 22µF电容 7805芯片 0.33µF电容 0.1µF电容 220µF电容 220µF电容 桥式整流 二极管 11V变压器 扩展插针 扩展插针 TO-5 TO-5 TO-5 TO-5 TO-5 TO-5 DIP04 DIP04 DIP04 DIP04 DIP04 XTAL1 RAD0.2 RAD0.2 RB.2/.4 TO-220 RAD0.2 RAD0.2 RB.2/.4 RB.2/.4 DIP-04 DIODE0.4 DIP-5 SIP08 SIP08 85501 85502 85503 85504 85505 85506 A B C D S5 Y1 C1 C2 C3 U1 C1 C2 C3 C4 D2 D1 TR J0 J1

10

5 多功能电子表单元电路工作原理介绍

5.1 电源电路工作原理

图5.1所示为集成直流稳压电源电路的原理图,本电源电路是由集成稳压

器构成的。电路可分成三部分:电源变压器部分、整流滤波部分和稳压部分。

变压器原边为工频交流220V电压,经过变压后,变压器副边的电压变为交流11V,11V交流电压经过桥式整流电路整流后变为直流10V电压,直流10V电压作为CW7805的输入电压,CW7805输出+5V电压。图中D2为整流桥,它由四个整流二极管接成电桥形式。C3为滤波电容,C1用于抵消输入端较长接线的电感效应,以防止自激振荡,还可抑制电源的高频脉冲干扰。一般取0.1——1μF。CW7805为三端固定输出集成稳压器,其输入和输出电压都为固定值,它的输入电压为+10V,输出电压为+5V。C2和C4用以改善负载的瞬态响应,消除电路的高频噪声,同时也具有消振作用。

5.2 时钟电路工作原理

图5.2所示为时钟电路原理图,在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

11

5.3 复位电路工作原理

图5.3所示为复位电路原理图,复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序,并使其它功能单元处于一个确定的初始状态。本复位电路采用的是按键复位,它是通过复位端经电阻与VCC电源接通而实现的,它兼具上电复位功能。因本系统的晶振的频率为12MHz,所以,复位信号持续时间应当超过2μS才能完成复位操作。

5.4 键盘工作原理

图5.4所示为键盘原理图,本系统采用的是独立式键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。它软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

12

5.5 显示器工作原理

系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。图中的S8550作为驱动器,而8个510欧姆电阻则起限流作用。

13

图5.6 共阳极数码管内部结构图5.7 LED数码管段的排列

由图5.5可知,要想让数码管那一段亮,在该数码管位控段为高电平的情况下给这段送低电平就可以了。显示电路结构采用动态扫描的方式,所有数码管的段控端公用单片机P0口的8根输出口线,数码管的段控端a、b、c、d、e、f、g、dp分别接到P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7口线上,每个数码管的位控线单独占用单片机P2口一根输出口线,8位数码管从高位到低位分别接P2.0~P2.7引脚。段控码(低电平有效)由P0口输出经上拉电阻上拉电压后通过锁存器74LS244送到数码管的段控端,位控码由P2口输出经三极管S8550驱动后送到数码管的位控端。

在单片机内部显示缓冲区79H、7AH、7BH、7CH、7DH、7EH内的值分别是秒的个位、秒的十位、分的个位、分的十位、时的个位、时的十位,显示器LED0、LED1、LED2、LED3、LED4、LED5分别显示秒的个位十位、分的个位十位、时的个位十位,由图5.5所示。

数码管动态显示:由于显示的数据和LED数码管的段控码并不是一一对应的关系,即显示的数据与数码管的字型代码不相符。显示数据与字型代码之间存在着转换关系,数码管段控数据和数码管各段的对应关系如表5.1、表5.2所示。

14

表5.1 数码管数据和数码管每段的对应关系 a b c d e f g dp

表5.2 数码管断码和字型的对应关系(共阳极) 字型 0 1 2 3 4 5 6 7 8 9 A B C D E F

D7 1 1 1 1 1 1 1 0 D6 1 1 1 1 1 1 0 1 D5 1 1 1 1 1 0 1 1 D4 1 1 1 1 0 1 1 1 D3 1 1 1 0 1 1 1 1 D2 1 1 0 1 1 1 1 1 D1 1 0 1 1 1 1 1 1 D0 0 1 1 1 1 1 1 1 LED显示码 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 7FH D7 dp 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 D6 g 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 D5 f 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 D4 e 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 D3 d 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 D2 c 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 D1 b 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 D0 a 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 段码 0CO 0F9 0A4 0B0 99 92 82 0F8 80 90 88 83 0C6 0A0 86 8E 15

P. 全亮 全灭 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 06 00 0FF 从电子钟程序清单中的显示程序可以知道:数据表格存储单元从首地址到最高位分别存放的是共阳极数码管0、1、2、3、4、5、6、7、8、9、P.、灭的十六进制字型代码,所以只要把显示缓冲区内的数值加上偏移地址rel(偏移量计算方法如式3.1所示),把和送到累加器A中,使用MOVC A, @A+PC就可以取出缓冲区内要显示数据的字型代码,当然要取P.和灭的字型代码就要分别给缓冲区送0AH、0BH。

偏移地址rel=数据表格首地址-MOVC A @A+PC指令单元首地址-1 式3.1 在动态扫描时,显示缓冲区79H内部存放的是要显示的秒的个位的数值,使用MOVC A, @A+PC指令取出段控码,由P0口输出通过锁存器74LS244后送到数码管的段控端,给P2口送01H通过锁存器74LS244驱动以后,只有LED0位的位控端有效,此时只有LED0被点亮来显示秒的个位,延时持续点亮一段时间,然后把显示缓冲单元地址加1,位控值左移一位,取出段控码,再把段控码和位控码送到数码管显示器,此时只有LED1被点亮显示秒的十位,延时持续点亮一段时间,就这样通过逐个地从低位到高位点亮各个显示器,扫描到最高位时的十位被点亮就返回。这样虽然在任一时刻只有一位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样。

16

5.6 AT89S51芯片介绍

如图5.7所示为AT89S51芯片的引脚图

图5.7 AT89S51芯片外部引脚图

兼容标准MCS-51指令系统的AT89S51单片机是一个低功耗、高性能CHMOS的单片机,片内含4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系统和引脚兼容。AT89S51单片机片内的Flash可允许在线重新编程,也可用通用非易失性存储编程器编程;片内数据存储器内含128字节的RAM;有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。AT89S51具有PDIP,TQFP和PLCC三种封装形式。上图就是PDIP封装的引脚排列,下面介绍各引脚的功能。P0口:8位、开漏级、双向I/O口 。

P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部

17

程序存储器和数据存储器时的低8位地址/数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。 P1口:8位、双向I/0口,内部含有上拉电阻。

P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。

在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。

P2口:具有内部上拉电阻的8位双向I/O口。

P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。

CPU访问外部16位地址的存储器时,P2口提供高8位地址。当CPU用8位在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。 P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。 P3口:具有内部上拉电阻的8位双向口。

首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。

在与FLASH并行编程和校验时,P3口可输入某些控制信号。

P3口除了通用I/O口功能外,还有替代功能,如表5.3所示

18

表5.3 P3口的替代功能 引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 统复位。

ALE/ 脉冲(

:当访问外部存储器时,ALE(允许地址锁存)是一个用于锁存)。在正常操作情况下,ALE以振荡器频率的1/6的固定速率发出脉

地址的低8位字节的书粗脉冲。在Flash 编程期间,此引脚也可用于输入编程冲,它是用作对外输出的时钟,需要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。如果希望禁止ALE操作,可通过将特殊功能寄存器中位地址为8EH那位置的“0”来实现。该位置的“1”后。ALE仅在MOVE或MOVC指令期间激活,否则ALE引脚将被略微拉高。若微控制器在外部执行方式,ALE禁止位无效。

:外部程序存储器读选取通信号。当AT89S51在读取外部程序时, 每

个机器周期 将PSEN激活两次。在此期间内,每当访问外部数据存储器时,将跳过两个

信号。

必须接地,然而要注意的是,若对加密位1进行编

/Vpp:访问外部程序存储器允许端。为了能够从外部程序存储器的0000H至FFFFH单元中取指令,程,则在复位时,

执行内部程序

的状态在内部被锁存。

应接VCC。不当选择12V编程电源时,在Flash编程期间,符号 RXD TXD /INT0 /INT1 T0 T1 /WR /RD 说明 串行口输入 串行口输出 外部中断0 外部中断1 T0定时器的外部的计数输入 T1定时器的外部的计数输入 外部数据存储器的写选通 外部数据存储器的读选通 RST:复位端。当振荡器工作时,此引脚上出现两个机器周期的高电平将系

这个引脚可接12V编程电压。

XTAL1:振荡器反向放大器输入端和内部时钟发生器的输入端。 XTAL2:振荡器反相放大器输出端。

19

5.7 74LS244驱动器

74LS244是单向总线驱动器。是8输入8输出芯片,中1G和2G为使能端,低电平有效。它的外部管脚图如图5.8所示。

图5.8 74LS244芯片外部管脚图74LS244是一种三态输出的八缓冲器和线驱动器,该芯片的逻辑电路图和引脚图如图5.8所示。从图5.8可见,该缓冲器有8个输入端,分为两路——1A1~1A4,2A1~2A4,同时8个输出端,也分为两路——1Y1~1Y4,2Y1~2Y4,分别由2个门控信号1G和2G控制,当记为低电平时,1Y1~1Y4的电平与1A1~1A4的电平相同,即输出反映输入电平的高低;同样,当2G为低电平时,1Y1~1Y4的电平与2A1~2A4的电平和同。而当1G(或2G)为高电平时,输出1A1~1A4(或2A1~2A4)为高阻态。经74LS244缓冲后,输入信号被驱动,输出信号的驱动能力加大了。

其功能表如表5.4所示,表中 H为高电平,L为低电平,A为高阻态,X为任意状态

表5.4 74LS244引脚功能表

输入 G L L N

输出 A L H X Y L H X 20

5.8 S8550PNP三极管

5.8.1主要用途:

作为音频放大器,应用于收录机、电动玩具等电子产品。(与S8050互补) 其管脚图如下图5.9

5.8.2极限值如下表5.5 参数 集电极、基极击穿电压 集电极、发射极击穿电压 发射极、基极击穿电压 集电极电流 集电极功率 结温 贮存温 5.8.3电参数(Ta=25℃)

符号 VCBO VCEO VEBO IC PC TJ TSTG 标称值 -40 -25 -6 -1.5 1 125 -55-125 单位 V V V A W ℃ ℃ 21

电参数表5.6 参数 集电极漏电流 发射极漏电流 集电极、发射极击穿电压 发射极、基极击穿电压 集电极、基极击穿电压 集电极、发射极饱和压降 基极、发射极饱和压降 基极、发射极压降 符号 ICBO IEBO BVCEO BVEBO BVCBO 测试条件 VCB=-35,IE=0 VBE=-6,IC=0 IC=-2mA,IB=0 IE=-100μA,IC=0 IC=-100μA,IE=0 最小值 -25 -6 -40 85 40 典型值 最大值 单 位 -100 nA -100 nA -0.5 -1.2 -1.0 300 V V V V V V VCE(sat) IC=-800mA,IB=-80mA VBE(sat) IC=-800mA,IB=-80mA VBE VCE=-1V,IC=-10mA VCE=-1V,IC=-100mA VCE=-1V,IC=-800mA HFE1 直流电流增益 HFE2

22

5.9 四位一体数码管

四位一体数码管的内部结构,如图5.10所示。由图可知,四个数码管的位控端连接在一起,共用8根数据线,四个公共端却单独占一根口线。假设段控端有段码输入时,每个数码管的段控端都收到了段码,但只有位控线有效的数码管才能显示数据,反之亦反。共阳极数码管段控端为低电平有效,位控端高电平有效,共阴极数码管恰恰相反。

四位一体数码管用于动态扫描,即把数码管显示数据的段控码分时送到其对应的段控端。当一个段控码被送到段控端时,显示此段控码数据的数码管,它的位控端置有效电平,数码管点亮;而其他数码管的位控端送无效电平,数码管不亮。持续点亮一段时间,再送其它的段控码,依次把显示段控码的数码管,使其位控端为有效电平,其他数码管的位控端为无效电平,就这样数码管依次被点亮。四位一体数码管共十二个引脚,从数码管的正面看,它以第一脚为起点,逆时针排列的。由图可知,6、8、9、12为公共端,A-11、B-7、C-4、D-2、E-1、F-10、G-5、DP-3。

显示字型和代码关系如表5.3所示。

23

表5.7 十六进制数字型代码 字型 共阳极代码 C0H F9H A4H B0H 99H 92H 82H F8H 80H 共阴极代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 字型 共阳极代码 90H 88H 83H C6H A1H 86H 8EH FFH 共阴极代码 6FH 77H 7CH 39H 5EH 79H 71H 00H 0 1 2 3 4 5 6 7 8

9 A b C d E F 灭

24

6 单片机硬件资源的分配

本次设计用到了单片机正常工作的硬件资源,如(连接晶振的引脚XTAL1和XTAL2,复位引脚RESET),对其硬件资源还做了具体的安排。

(1).P0口

作为数码管显示器的段控输出口,对数码管显示器进行控制。 (2).P1口

P1.0~P1.3接了四个独立式分别为A键、B键、C键、D键,用于对键盘的控制,P1.5、P1.6、P1.7则作为ISP程序下载的输入端。

(3).P2口

该口全部用于数码管的位控端。 (4).定时/计数器

使用定时器0来实现本次电子钟的运行。 (5).内部存储单元

30H存储定时/计数器0的中断次数。31H~36H分别作为时、分、秒个位和十位的数据存储单元。79H~7E分别作为LED0、LED1、LED2、LED3、LED4、LED5显示缓冲单元。

(6).通用寄存器

第0组寄存器:R0、R1、R3、R7,用来存放键功能程序的数据;第1组寄存器:R3,用来存放中断服务程序的数据;第2组寄存器:R1、R4,用来存放显示程序的数据。

(7).专用寄存器

定时器控制寄存器TCON,通过设置该寄存器中TR0位的状态来控制定时/计数器0的启动/停止;中断允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时/计数器工作方式寄存器TMOD,设置定时/计数器0的工作方式。

25

7 程序流程图

开 始定义堆栈区调DIR显示子程序显示缓冲单元清零调KEY键扫描子程序定时器0工作方式1装载计数初值A键是否按下?Y执行A键功能子程序定时开始NY开中断B键是否按下?执行B键功能子程序N设置循环次数C键是否按下?Y执行C键功能子程序NYD键是否按下?执行D键功能子程序N调DIR显示子程序结 束 图7.1 监控程序流程图

26

开 始开 始是否为上电后第一次按下Y时钟是否在运行?启动电子钟N时 值 加 1是否为上电后再次按下N进入调节状态时值是否到24?Y返 回时存储单元清 0返 回A键功能程序B键功能程序开 始开 始Y时钟是否在运行?时钟是否在运行?NN分 值 加 1秒 值 加 1N秒值是否到60?分值是否到60?YY秒存储单元清 0分存储单元清 0返回返回C键功能程序D键功能程序图7.2 键功能程序流程图27

1开始是否60分?现场保护Y计数器从新加载分值存储单元清 ‘0’时值加1是否满16次?N是否24时?秒值加1Y是否60秒?N时值存储单元清 ‘0’Y显示内容送显示缓冲区秒值存储单元清 ‘0’返回分值加11图7.3 中断服务程序流程图28

开始调取键值子程序是否有键按下?YNY调DIR去抖动调DIR去抖动键确实按下?NY保存键值键是否释放?N调DIR延时Y恢复键值返回图7.4 键扫描子程序流程图

开始键扫描初始化A键是否按下?Y取A键值NB键是否按下?Y取B键值NC键是否按下?NY取C键值ND键是否按下?Y取D键值N返回图7.5取键值子程序29

开始现场保护显示初始化送位控码取段控码送段控码延时子程序缓冲区地址加1左移位控码N位控是否最高位?Y返回 图7.6 显示子程序流程图

子程序入口设外循环次数设内循环次数内循环结束否NY外循环结束否Y返 回30

图7.7 延时子程序流程图

开 始

取 十 位 数使十位数占A高半字节取个位数,并占A低半字节加 1十进制调整个位数送存储单元把十位数换到低半字节十位数送存储单元返回图7.8 加1子程序31

8 电子钟程序清单

调整运行后的电子钟程序清单

;该程序实现电子钟时、分、秒运行,时、分、秒调整;十、分、秒同时显示; ;共A、B、C、D四个按键,A键实现电子钟的运行和停止、B键调时、C键调分、D键调秒

;该电子钟是单片机AT89S51控制,使用芯片中的定时器0方式1实现定时功能;P0口输出段控码、P2口输出位控码控制数码管显示 ;该电子钟共使用两个4位一体数码管(S02841A-B)显示

;系统初始化程序****************************************************

ORG 0000H

AJMP MAIN

ORG 000BH AJMP PITO

ORG 0100H MAIN: MOV SP, #60H MOV TMOD, #01H 式1

MOV TL0, #0DCH MOV TH0, #0BH CLR 21H.0 CLR TR0H SETB EAH

允许

MOV 30H, #10H MOV 7EH, #0AH MOV R0, #79H

;转到系统初始化程序

;转到定时器0中断服务程序

;确立堆栈区

;设定定时器0为工作方;装计数器初值

;TR0置“0”,定时关闭

;EA置“1”,中断总允许

SETB ET0H ;ET0置“1”,定时器0中

;循环次数

;P.点显示初始化

32

MOV R1, #05H PP: MOV @R0, #0BH INC R0

DJNZ R1, PP MOV R0, #31H MOV R1, #06H Q00: MOV @R0, #00H INC R0

DJNZ R1, Q00

;监控程序**********************************************************

LOOP: LCALL DIR

LCALL KEY

;调显示子程序 ;调键扫描子程序 ;时、分、秒值存储单元清零

LOOP1: JB 20H.0, KEYA JB 20H.1, KEYB JB 20H.2, KEYC

JB 20H.3, KEYD

LCALL DIR

;A键是否按下,是跳转到A键功能程序

;B键是否按下,是跳转到B键功能程序

;C键是否按下,是跳转到C键功能程序

;D键是否按下,是跳转到D键功能程序

LJMP LOOP ;跳转到监控程序

;A键功能子程序**************************************************** KEYA: CPL TR0H ;开启/关闭定时器 SETB 21H.0 AJMP LOOP

;B键功能子程序**************************************************** KEYB: JB TR0H, KEYBO ;定时器是否运行,是跳转 JNB 21H.0, KEYBOO

;返回

33

MOV R0, #36H ;时值存储单元地址送R0 LCALL DAAD1 A

XRL A, #24H

JNZ KEYBO

LCALL CLR0

;时值是否到24时,否返回 ;时值存储单元清零

;调加1子程序

;时值加1后的值送累加器

MOV A, R3

KEYBO: MOV 7DH, 35H MOV 7EH, 36H KEYBOO: LJMP LOOP

;C键功能子程序**************************************************** KEYC: JB 8CH, KEYCO ;定时器是否运行,否跳转 JNB 21H.0, KEYCOO

MOV R0, #34H ;分值存储单元地址送R0 LCALL DAAD1 A

XRL A, #60H JNZ KEYCO LCALL CLR0

;分值是否到60分,否返回 ;分值存储单元清零

;调加1子程序

;分值加1后的值送累加器

MOV A, R3

;返回监控程序

KEYCO: MOV 7CH, 34H MOV 7BH, 33H KEYCOO: LJMP LOOP

;D键功能子程序**************************************************** KEYD: JB 8CH, KEYDO ;定时器是否运行,否跳转 JNB 21H.0, KEYDOO

MOV R0, #32H ;秒值存储单元地址送R0 LCALL DAAD1

;返回监控程序

;调加1子程序

34

MOV A, R3 ;秒值加1后的值送R0

XRL A, #60H JNZ KEYDO LCALL CLR0

;秒值是否到60秒,否返回 ;秒值存储单元清0

KEYDO: MOV 79H, 31H MOV 7AH, 32H KEYDOO: LJMP LOOP

;中断服务程序****************************************************** PITO: PUSH PSW PUSH A SETB RS0 SETB RS1

MOV TL0, #0DCH MOV TH0, #0BH MOV A, 30H DEC A MOV 30H, A JNZ RETO 回

MOV 30H, #10H MOV R0, #32H ACALL DAAD1

MOV A, R3 XRL A, #60H JNZ RETO ACALL CLR0

;满16次开始计时操作 ;秒显示单元地址 ;秒加1 ;判是否到60秒 ;不到转RET0返回 ;到60秒显示单元清0 ;分显示单元地址 ;分加1 ;判是否到60分 ;不到转RET0返回

35

;返回监控程序

;中断服务程序,现场保护 ;选第三组通用寄存器

;计数器重新加载

;循环次数减1

;不满16次,转RET0返

;加1后秒值在R3中

MOV R0, #34H ACALL DAAD1 MOV A, R3 XRL A, #60H JNZ RETO

;加1后分值在R3中

ACALL CLR0

;到60分显示单元清0 ;时显示单元地址 ;时加1

MOV R0, #36H ACALL DAAD1 MOV A, R3 XRL A, #24H JNZ RETO ACALL CLR0 RETO: CLR RS0 CLR RS1 POP A POP PSW

MOV 79H, 31H

;加1后时值在R3中 ;判是否到24时

;不到转RET0返回 ;到24时显示单元清0

;返回第0组通用寄存器

;现场恢复

;时、分、秒值放缓冲区

MOV 7AH, 32H MOV 7BH, 33H MOV 7CH, 34H MOV 7DH, 35H MOV 7EH, 36H RETI

;加1子程序******************************************************* DAAD1: MOV A, @R0 ;加1子程序,十位送A DEC R0 SWAP A

;十位数占高4位 ;加1 ;十进制调整 ;全值暂存R3中 ;屏蔽十位数,取出个位;个位值送显示缓冲单元

36

;中断返回

ORL A, @R0 ADD A, #01H DA A

MOV R3, A 数

MOV @R0, A MOV A, R3

;个位数占低4位

ANL A, #0FH

INC R0

ANL A, #0F0H SWAP A RET

MOV @R0, A CLR0: CLR A DEC R0

MOV @R0, A RET

;键盘扫描子程序*************************************************** KEY: LCALL KEYCHULI JZ EXIT LCALL DIR LCALL DIR JZ EXIT

;调显示去抖动 ;调键值处理子程序

LCALL KEYCHULI

;调键值处理子程序 ;没有键按下转到返回

;个位数缓冲单元清“0” ;返回

;屏蔽个位数取出十位数 ;使十位数占低四位 ;十位数送缓冲单元

;返回

;清缓冲单元子程序

;十位缓冲单元清“0”

MOV @R0, A

;没有键按下转到返回 ;保存键值

;调键值处理子程序 ;调显示子程序延时 ;键值送20H单元保存 ;保护现场 ;改变寄存器组号 ;先向P1口写1 ;P1口值送累加器A

37

MOV B, 20H KEYSF: LCALL KEYCHULI JZ KEY1 LCALL DIR

AJMP KEYSF EXIT: RET

;键释放,转到恢复键值 ;等到键释放 ;返回

KEY1: MOV 20H, B KEYCHULI: PUSH PSW CLR RS1 SETB RS0

MOV P1, #0FFH MOV A, P1

CPL A

;A值取反

;保存P1口的低4位

;A值送20H保存 ;改变寄存器组号 ;恢复现场

ANL A, #0FH MOV 20H, A CLR RS1 CLR RS0 POP PSW RET

;显示子程序******************************************************** DIR: PUSH PSW ;恢复现场 SETB RS1 CLR RS0

MOV R0, #79H MOV R3, #0FBH LD0: MOV P2, R3 DISP1: ADD A, #1BH MOVC A, @A+PC DISP2: MOV P0, A ACALL DEY INC R0

MOV R2, #09H

;取段控码并送A中 ;送段控码

;设置延时循环次数

;延时点亮 ;位控码送A ;缓冲区地址加1

;是否到最高位,是转到返回

MOV A, @R0

;建立显示缓冲区首地址

;设置位控码 ;送位控码

;改变寄存器组号

;缓冲区值送累加器A

MOV A, R3 JB

ACC.5, LD2

JNB ACC.1, HERE

RL A RL A

LD2:RL A

MOV R3, A

AJMP LD0 HERE: CLR RS0

;不到向显示器高位移位 ;位控值保存到R4中

;继续扫描 ;改变寄存器组号

38

CLR RS1 POP PSW RET

DBB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H DB 0F8H DB 80H DB 90H DB 0CH DB 0FFH

;延时子程序********************************************************

DEY: PUSH 12H DEY0: PUSH 12H DEY1: PUSH 12H

DEY2: DJNZ R2, DEY2

POP 12H

DJNZ R2, DEY1 POP 12H

DJNZ R2, DEY0 POP 12H DJNZ R2, DEY RET END

;恢复现场

;返回

39

9.误差分析

在上面的章节中已经介绍过,本电子钟设计是使用单片机的定时/计数器0在工作方式1下定时62.5ms,根据定时时间和单片机最小系统的时钟周期(1μs)使定时/计数器0重复中断16次就是一秒的时间了。定时/计数器0每产生一个中断就定时62.5ms,当产生一次中断后,定时/计数器0并没有马上被赋予原来产生62.5ms的初值,而是在中断服务程序中重新赋的初值,因而使用定时/计数器实现电子钟的运行存在着一定的误差。

一个62.5ms产生后,到下一个62.5ms开始计数,中间单片机要执行电子钟程序中的指令如下所示:

ORG 000BH

AJMP PITO

;中断服务程序****************************************************** PITO: PUSH PSW PUSH A SETB RS0 SETB RS1

MOV TL0, #0DCH MOV TH0, #0BH „

定时/计数器0产生中断后,由硬件自动转到定时/计数器0的中断服务区(000BH ~ 001BH),使用一条跳转指令转到存放在其他地方的中断服务程序,只要计算出从中断服务区开始执行的跳转指令AJMP PITO到定时/计数器0重新

;转到定时器0中断服务程序

;中断服务程序,现场保护 ;选第三组通用寄存器

;计数器重新加载

40

赋值完毕MOV TH0, #0BH之间的所有的指令所占的机器周期再乘上机器周期所得的时间就是相邻的两个62.5ms之间的时间间隔。假设时间间隔为T,所有的指令所占的机器周期之和为P,因为本次设计使用的晶振频率为12Mhz,因此一个机器周期的时间Time为:

Time = 12×1/12Mhz Time = 1μs 所以,时间间隔为T的计算公式为:

T = P×Time

通过查汇编语言指令周期表,计算出P = 10,即以上所有指令占10个机器周期,那么时间间隔T为:

T = P×Time

T = 10×1μs T = 10μs

定时/计数器0定时16个62.5ms是一秒,因此秒值加1比实际理想的秒加1要慢一段时间Ts,Ts 的值为16倍的T再加上下面的电子钟要执行的电子钟程序中的指令所占的机器周期P1, PITO:

„ „ „

MOV A, 30H DEC A MOV 30H, A JNZ RETO 回

MOV 30H, #10H MOV R0, #32H ACALL DAAD1

„ „

;中断服务程序,现场保护

;循环次数减1

;不满16次,转RET0返;满16次开始计时操作 ;秒显示单元地址 ;秒加1

41

DAAD1: MOV A, @R0 ;加1子程序,十位送A

DEC R0 SWAP A

;十位数占高4位 ;加1

ORL A, @R0 ADD A, #01H

„ „ „

通过查汇编语言指令周期表,计算出P1 = 15,即以上所有指令占15个机器周期,那么时间间隔Ts为:

Ts = (16×P+P1)Time Ts = 175μs

;个位数占低4位

因此,本次设计的电子钟运行的时间比标准时间每秒钟慢了175μ

s

42

10使用说明

使用电子钟时操作步骤如下:

(1).将+5V电源接到电子钟电源插口上,接通电源开关。

(2).把电子钟电路板上的ISP程序下载口JP1通过下载线连接到计算机打印机接口,在计算机上通过下载软件Easy 51Pro把电子钟程序下载到单片机内。

(3).电子钟程序下载到单片机以后,电子钟进入待命令状态,显示器LED5显示“P.”。

(4).按一下A键,电子钟从0时、0分、0秒开始运行,此时显示器LED5、LED4、LED3、LED2、LED1、LED0分别显示时、分、秒。

(5).再次按一下A键,电子钟停止运行进入调整状态,此时通过B键、C键、D键分别调整电子钟的时、分、秒。按一下其中的一个键对应的值加1。调节到用户想要的时间后,再次按一下A键,电子钟将以用户调整的时间为起点进入运行状态。总之,上电后,按A键奇数次时钟运行并计时,按偶数次A键则停止电子钟运行。

注意事项:

(1).每按一次复位键S5键单片机就完成一次复位操作,电子钟复位以后进入待命令状态。

(2).在对电子钟电路板操作和使用时,下载接口线拔插时,必须先按下电源开关断开电源。

43

11.设计体会

在硬件电路制作阶段,我到图书馆、网上查阅各种资料,在电脑上使用PROTEL99SE进行以及相关的绘图软件,使自己在理论分析设计和动手操作能力等各方面得到了极大提高。我通过对设计任务书的具体要求分析思考,再加上以前在学校进行的各种相关实践和实习积累的经验,首次完成了硬件电路板的制作,虽然在初次制板时,其中在钻孔时,看着别人钻好简单,自己一试,也不是一件容易的事,不仅看得你眼花缭乱,还一不小心,钻头就断了,钻孔那天我组就弄断了好几个。后来随着动作越来越熟练,速度也越来越快。尽管板面没买得好看,但那也是我们的成果,还有因不细心、不熟习制作流程,还有打印的时候由于油墨的质量不行且不够浓,导致第一块电路板有很多的断线而报废,但总结了经验后又重新做了一块板子,总算成功,但是还有很多地方要改进才行,以后做板子的时候要特别注意。硬件电路板制好后,在利用ASM51软件编写程序调试时,遇到了不少困难,这使我学会了耐心分析问题,并进一步锻炼自己去攻破难题的能力。

这次课程设计整体来说是成功的,但我也发现了自己许多错漏和不足之处。譬如,最简单的程序没写好就想着写更复杂的程序,做事还是缺乏耐性和细心,当有时遇到问题时,总觉得无从下手,对于课本上的知识不能很好的组织起来。在编写各功能程序时,特别是后来增添的比较复杂的程序,

目前,外面企业公司编写程序大部分用C语言,而少用我们现在所学的汇编语言,所以我在以后的时间还是会自学C语言编程。再之现在电子领域、不同的行业极为广泛,对于我们学电子专业的人来说,学好课本上的知识仅仅是基础,要掌握一门技术必须还得更深层的学习,并且亲自动手去做,这样才能达到事半功倍的效果。

44

在最后,再次感谢王韧老师以及所有同组成员。

12.教学建议

通过完成这次电子钟设计之后,让我学到了很多知识。能够和同学一起成功的做出来实物我自己觉得很有成就感和自豪感。

我在单片机这方面的知识掌握得不牢固是在做这次课程设计明显的体现出来了,平时听课的时候感觉大部分都听懂了,课后也没有花很多时间去复习和钻研它,相信这也是很多同学的通病,不是老师讲的不好,而是学生们不知道怎么来验证自己学的怎么样,因此我提出建议,老师讲课可以不那么细致入微,且作业也不必要做很多,但是要保障是学生亲自完成的,对课后的作业要严加把关,对与于抄袭的作业要做出严格的处分,比不来上课更加严格的处分。

还有一点,就是画流程图,这一点老师本来和我们再三强调了,但是我还是吃了亏,不喜欢画流程图,相信这很多学生也有这个习惯,我建议刚开始学单片机的时候,布置的作业大可不必要学生编写程序,而要我们画流程图,甚至很长一段时间内只要画流程图,不必急于编写程序,但是要鼓励看现成的程序,并要求把程序转换为流程图。有些学生可能对每条指令熟记于心,但由于不熟悉流程图,编写程序的时候无从下手,相反,对指令不太熟悉,但是能顺利的画出流程图,编写程序时的难度就低了很多。

另外,我想老师也可尝试着把做课程设计的时间提前到二年级的时候,让同学们更早的体会的学习单片机的乐趣,有了乐趣,就可以。

45

13.参考文献

[4]、张洪润,兰清华,单片机应用技术教程[M],北京:清华大学出版社,1997.11。

[5]、李华,MCS-51系列单片机实用接口技术[M],北京:北京航空航天大学出版社,1993.8。

46

因篇幅问题不能全部显示,请点此查看更多更全内容