蜂鸣器流水灯数码管显示作息时间控制单片机课程设计

分享到:
点击量: 218657

  一、课程设计目的

  《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在 校期间必须接受的一项工程训练。在课程设计过程中,在教师指导下,运用工程 的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设 计过程、设计要求、完成工作内容和具体的设计方法,了解必须提交的各项工程 文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。 通过课程设计,应能加强学生如下能力的培训: (1) 独立工作能力和创造力; (2) 查阅图书资料,产品手册和各种工具书的能力; (3) 工程绘图的能力; (4) 编写技术报告和编制技术资料的能力 (5) 综合运用专业及基础知识,解决实际工程技术问题的能力;

  二、设计要求

  2.1 总体要求

  (1) 独立完成设计任务 (2) 绘制系统硬件总框图 (3) 绘制系统原理电路图 (4) 制定编写设计方案, 编制软件框图, 完成详细完整的程序清单和注释; (5) 制定编写调试方案,编写用户操作使用说明书 (6) 写出设计工作小结。对在完成以上文件过程所进行的有关步骤如设计 思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并 对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研 修方向。

  1

  2.2 具体要求

  本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的 是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件 及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器 件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路 还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的 异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生 的硬件电子电路的分析、判断能力。 软件编程是本次工程实践的重要环节。在为期两周的工程实践中,将占据主 要时间,学生要完成的软件编程任务主要包括以下几点: 1) 、熟悉 Keil C51 编程平台及相关编程软件 2) 、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调 3) 、编写、调试 LED 流水灯(循环显示)程序并进行软硬件联调 4) 、编写、调试键盘扫描子程序并进行软硬件联调 5) 、编写、调试数码管动态扫描程序并进行软硬件联调 6) 、电子钟设计(包括键盘、时钟、显示等) 7) 、作息时间控制系统设计(包括键盘、显示、时钟、报警等) 8) 、智能交通灯控制系统设计 9) 、车速里程测量、显示设计

  三、设计内容及方法

  单片机原理及其应用课程设计通常选择一般常见、常用的简单应用装置或 对象进行微机控制。所涉及的系统可以实际制作,也可以实验室模拟,具体步骤 和内容如下:

  3.1 设计准备

  认真研究设计任务书,明确设计要求、条件、内容、和步骤;通过阅读有关

  2

  资料,了解设计对象;复习课程有关内容,熟悉有关单元电路的设计方法和设计 步骤;搜集、分析、消化相关资料、软件等,掌握微型计算机应用系统软件的设 计方法;准备好设计需要的图书、资料和工具;拟定设计计划等。

  3.2 功能设计及系统总体设计

  要求学生有**精神和**意识, 分析所掌握的资料, 了解设计对象的功能。 在充分考虑功能设计后,进行总体设计,以功能、结构为标,制定总体方案,规 划硬、软件功能分配等;初步确定关键元器件地选择。

  四、硬件电路总体设计

  4.1 硬件总框图

  按键控制扫描 模块 主控电路 数码管显示模块

  LED 显示模块

  DS1302 实 时时钟模块 原理说明:

  扬声器模块

  本电路以单片机 AT89C52 为主控电路,分别连接按键控制扫描模块、时钟模块、数 码显示模块、LED 显示模块、扬声器模块。首先,按键扫描模块的四个按键分别用来控制 数码显示、LED 显示和扬声器工作,P0 口用来控制其段选以显示相应的数值。P1 口

  控制数码管的位选,以显示相应的数值。在其位选控制部分,采用了 9012 型的 三极管,要求当 P1 口输出低电平时,位选成功,使得该位选的数码管亮,数码管 显示时分通过按键 1 控制。P2 口作为输出口,用来控制 LED 的亮灭,要使其亮 只需要让 P2.0-P2.7 口保持低电平 就可以使 8 个灯亮起来。 同时通过 P3.4 端控 制蜂鸣器发生,当 P3.4 输出低电平时候使蜂鸣器发出声音,按下按键 3 时使蜂 鸣器发声。*后通过按按键 4 实现作息时间控制的功能。

  3

  4.1.1 主控电路

  本次课程设计中主要是设计一个以作息时间控制为主的多功能控制系统。 该设计中我们主控电路部分采用了单片机 AT89C52 芯片来实现这些功能, AT89C52 是一个低电压,高性能 CMOS 的 8 位单片机,片内含 8KB 的可反复 擦写的 Flash 只读程序存储器和 256B 的随机存取数据存储器(RAM) 。其引 脚如下图所示:

  图 1.AT89C52 引脚图 VCC:供电电压。 GND:接地。 P0 口(P0.0-P0.7):P0 口来控制数码管的段选,以显示相应的数值。 P1 口 (P1.0-P1.7):P1 口用来控制数码管的位选,以达到动态显示的效果。 P2 口 (P2.0-P2.7):P2 口来控制 LED 的亮灭。 P3 口 (P3.0-P3.7):P3.0 为 RXD(串行输入口),P3.1 为 TXD(串行输出口), P3.2 为/INT0(外部中断 0),P3.3 为/INT1(外部中断 1),P3.4 为 T0(记时 器 0 外部输入), P3.5 为 T1(记时器 1 外部输入),P3.6 为/WR(外部数据存储器写选通), P3.7 为/RD(外部数据存储器读选通)。 XTAL1(19 脚)和 XTAL2(18 脚)为振荡器输入输出端口,外接 12MHz 晶 振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC (40 脚)和 VSS(20 脚)为供电端口,分别接+5V 电源正负端。P0~P3 为

  4

  可编程通用 I/O 脚,其功能用途由软件定义。

  4.1.2

  按键控制扫描模块

  按键用于控制数码显示、LED 显示、扬声器等模块的工作。通过扫描按键是 否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行 工作。设计中使用单个按键实现单个功能,属于较为简单的控制方式.

  图 2.按键输入电路

  在多功能系统设计的实验中中我们使用四个按键分别与单片机的 P1.4、 P1.5、P1.6、P1.7 相连,按键 1 控制数码管显示、按键 2 控制 LED 流水灯、按 键 3 控制蜂鸣器发声,按键 4 控制作息时间。通过按下相应的按键来处理相应的 程序。

  4.1.3

  DS1302 实时时钟模块

  图 3.DS1302 模块电路图 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时 时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年

  5

  补偿功能,工作电压为 2.5V~5.5V。采用三线接口与 CPU 进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。 DS1302 内部 有一个 31×8 的用于临时性存放数据的 RAM 寄存器。DS1302 是 DS1202 的 升级产品,与 DS1202 兼容,但增加了主电源/后背电源双电源引脚,同时 提供了对后背电源进行涓细电流充电的能力。 DS1302 与 CPU 的连接 :实际上,在调试程序时可以不加电容器,只加一个 32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。

  图 4. 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 始终是输入端。

  如图 2 所示 DS1302 控制字节的*高有效位(位 7)必须是逻辑 1, 如果它为 0, 则不能把数据写入 DS1302 中,位 6 如果为 0,则表示存取日历时钟数据,为 1

  6

  表示存取 RAM 数据;位 5 至位 1 指示操作单元的地址;*低有效位(位 0)如为 0 表 示要进行写操作,为 1 表示进行读操作,控制字节总是从*低位开始输出。在控 制字指令输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入 从*低位(0 位)开始。同样,在紧跟 8 位的控制字指令后的下一个 SCLK 脉冲 的下降沿,读出 DS1302 的数据,利用单片机的外部中断来处理中断系统通过数 码管显示出时间。

  4.1.4

  数码管显示模块

  设计中采用四位共阳极数码管,共阳极是指其公共端接正极,通过单片机 AT89C52 的 P1 口控制其位选,以达到动态显示的效果,再通过 P0 口,控制其段 选以显示相应的数值。在其位选控制部分,采用了一个 9012 型三极管,要求当 P1 口输出低电平时,位选成功。

  图 5.数码管显示电路 硬件电路中,数码管显示的小时和分.小时通过按键 2 控制,分通过按键 3 控制。 数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出 我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两 类。 ① 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每 一个段码都由一个单片机的 I/O 端口进行驱动,或者使用如 BCD 码二-十进制译 码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用 I/O 端口多,如驱动 5 个数码管静态显示则需要 5×8=40 根 I/O 端口来驱动,要知

  7

  道一个 89S51 单片机可用的 I/O 端口才 32 个呢:),实际应用时必须增加译码 驱动器进行驱动,增加了硬件电路的复杂性。 ② 动态显示驱动:数码管动态显示接口是单片机中应用*为广泛的一种显 示方式之一, 动态驱动是将所有数码管的 8 个显示笔划"a,b,c,d,e,f,g,dp"的同 名端连在一起,另外为每个数码管的公共极 COM 增加位选通控制电路,位选通由 各自独立的 I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字 形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通 COM 端电路的 控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形, 没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的 COM 端,就使各 个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点 亮时间为 1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际 上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳 定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省 大量的 I/O 端口,而且功耗更低。

  4.1.5

  LED 显示模块

  LED(Light Emitting Diode) ,发光二极管,是一种固态的半导体器

  件,它可以直接把电转化为光。LED 的心脏是一个半导体的晶片,晶片的一 端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被 环氧树脂封装起来。半导体晶片由两部分组成,一部分是 P 型半导体,在 它里面空穴占主导地位,另一端是 N 型半导体,在这边主要是电子。但这 两种半导体连接起来的时候,它们之间就形成一个“P-N 结”。当电流通过 导线作用于这个晶片的时候,电子就会被推向 P 区,在 P 区里电子跟空穴 复合,然后就会以光子的形式发出能量,这就是 LED 发光的原理。而光的 波长也就是光的颜色,是由形成 P-N 结的材料决定的。

  8

  图 6. LED 显示电路

  本次设计中通过按键 2 来控制其流水显示,打开电源后按下按键 2 流水灯模 块有效。由于电路中 LED 为共阳极,故控制流水灯显示的 P2 口应为低电平时才 有效。 从原理图中可以看出,如果要让接在 P2.0 口的 LED1 亮起来,那么只要把 P2.0 口的电平变为低电平就可以了;相反,如果要接在 P2.0 口的 LED1 熄灭, 就要把 P2.0 口的电平变为高电平;同理,接在 P2.1~P2.7 口的其他 7 个 LED 的点亮和熄灭的方法同 LED1。因此,要实现流水灯功能,我们只要将发光二极 管 LED1~LED8 依次点亮、熄灭,8 只 LED 灯便会一亮一暗的做流水灯了。 我们首先把要显示流水花样的数据建在一个以 TAB 为标号的数据表中, 然后 通过查表指令“MOVC A,@A+DPTR”把数据取到累加器 A 中,然后再送到 P1 口

  进行显示。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每 条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们 就看不到“流水”效果了。

  4.1.6 扬声器模块

  扬声器模块通过按键 3 来实现。要求扬声器能够发出连续,断续的声音及音 乐,我们可以选择一个蜂鸣器来实现这些功能。

  9

  图 7. 扬声器电路

  蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用 于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时 器等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种 类型。下面我们以电磁式蜂鸣器为例来说明它的工作原理:电磁式蜂鸣器由振荡 器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频 信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相 互作用下,周期性地振动发声,当输出高电平时,三极管截止,蜂鸣器的两引脚 间的直流电压接近于 0V,没有电流流过线圈,蜂鸣器不发声;当输出低电平时, 三极管导通,使蜂鸣器的两个引脚间获得将接近+5V 的直流电压,这样蜂鸣器的 电流形成回路,发出声音。因此,我们可以通过程序控制 IO 口输出的电平来控 制蜂鸣器是否发出声音,实现各种可能音响的产生。 在这个设计中是通 P3.4 口控制其发声的。由于 P3.4 与 ds1302 是连在一起 的,当 P3.4 口输出低电平时蜂鸣器发出声响。故只要 ds1302 工作,就可以设定 使扬声器发出声音。

  10

  4.2 硬件原理图 硬件原理图 原理

  11

  五、软件流程框图

  5.1、流程框图 、 5.1.1 主程序流程图

  开始

  P1 口置初值 0F0H

  KEYa 按下?

  Y

  调用数码管显示程序

  KEYb 按下?

  Y

  调用 LED 显示子程序

  KEYc 按下?

  Y

  调用蜂鸣器发声程序

  N

  KEYd 按下?

  Y

  调用作息时间控制程序

  12

  5.1.2 蜂鸣器流程图

  开始

  循环时间的初值设置

  P3.4 端口输出设置

  延时 0.2s

  P3.4 端口取反

  延时 0.2s

  循环结束? N Y 返回主程序

  13

  5.1.3 流水灯程序流程图

  开 始

  循环初始 化 表头首指送地址

  将寄存器 A 清零

  表中花样送 A Y 到花样结束标 N 显示并延时

  N 花样是否结 Y 返回主程序

  14

  5.1.4 时间显示流程图

  15

  5.1.5 作息时间控制流程图

  开始 扬声器预响时间设置

  DS1302 实时时间读取

  N

  两时间是否 相同? Y 扬声器发声

  延时关闭扬声器

  作息时间控制的设计是比较简单的,其基本思路是我们设置扬声器的预响 时间,然后通过 DS1302 实时时间的读取与预响时间做比较,如果两者相同那么 扬声器发声,如果两者不相同那么返回 DS1302 实时时间继续读取,直到与扬声 器预响时间相同扬声器发声,然后通过延时关闭扬声器。

  16

  5.2 完整的程序清单及注释

  主程序清单: 主程序清单: ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV SP,#60H JNB P1.4,K1CHECK JNB P1.5,K2CHECK JNB P1.6,K3CHECK JNB P1.7,K4CHECK SJMP MAIN K1CHECK: JB P1.0,KEYA SJMP KEYA KEYA: MOV SP,#70H MOV R2,#08H START0: SETB P3.4 LCALL DELAY CLR P3.4 LCALL DELAY DJNZ R2,START0 SJMP MAIN DELAY: MOV R7,#02 DELAY0: MOV R6,#200 DELAY1: MOV R5,#248 DJNZ R5,$ DJNZ R6,DELAY1 DJNZ R7,DELAY0 RET K3CHECK: JB P1.6,KEYC

  17

  ;去抖动,按下 KEYA,跳转到 KEYA 子程序

  ;给堆栈指针赋初值 ;蜂鸣器响声计数 ;P3.4 口置高电平 ;调用延时子程序 ;P3.4 口取反 ;判断计数是否结束,否跳到 START0 处 ;返回主程序 ;延时子程序

  SJMP KEYC K4CHECK: JB P1.7,KEYD SJMP KEYD END。。。。。。。。。。。。。。。。 蜂鸣器。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。 K3CHECK: JB P1.4,KEYA SJMP KEYA ;去抖动,按下 KEYA,跳转到 KEYA 子程序

  KEYA: MOV SP,#70H ;给堆栈指针赋初值 MOV R2,#0FFFFH ;蜂鸣器响声计数 START0: SETB P3.4 ;P3.4 口置高电平 LCALL DELAY ;调用延时子程序 CLR P3.4 ;P3.4 口取反 LCALL DELAY DJNZ R2,START0 ;判断计数是否结束,否跳到 START0 处 SJMP MAIN ;返回主程序 DELAY: ;延时子程序 MOV R7,#02 DELAY0: MOV R6,#12 DELAY1: MOV R5,#75 DJNZ R5,$ DJNZ R6,DELAY1 DJNZ R7,DELAY0 RET 。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。流水灯。。。。。。。。。。。。。。 。。。。。。。。。。。。。。 K2CHECK: ;去抖动,按下 KEYB,跳转到 KEYB 子程序 JB P1.5,KEYB SJMP KEYB KEYB: MOV SP,#80H MOV R2,#18H ;LED 循环闪亮三次 MOV A,#0FEH ;A 中赋初始值 LOOP: MOV P2,A ;流水灯闪亮 LCALL DELAY3

  18

  RL A ;A 中初值左移 DJNZ R2,LOOP MOV A,#0FFH ;三次结束后,熄灭所以 LED 灯 MOV P2,A SJMP MAIN ;返回主程序 DELAY3: ;延时子程序 MOV R7,#20 DELAY4: MOV R6,#125 DELAY5: MOV R5,#255 DJNZ R5,$ DJNZ R6,DELAY5 DJNZ R7,DELAY4 RET 。。。。。。。。。。。。。。。 数码管显示。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。

  ;数码显示子程序 DISPLAY: MOV ;显示分钟 MOV MOV ANL MOVC MOV LCALL MOV MOV SWAP ANL MOVC MOV LCALL ;显示小时 MOV MOV ANL MOVC MOV LCALL MOV MOV

  DPTR,#DIG_CODE P1,#11110111b A,MIN A,#0FH A,@A+DPTR P0,A DIS_DELAY P1,#11111011b A, MIN A A,#07H A,@A+DPTR P0,A DIS_DELAY P1,#11111101b A,H A,#0FH A,@A+DPTR P0,A DIS_DELAY P1,#11111110b A,H

  19

  SWAP A ANL A,#03H MOVC A,@A+DPTR MOV P0,A LCALL DIS_DELAY RET ;***************作息时间控制**************************** KEY4: MOV SP,#60H MOV TMOD,#10H ;初始化定时器及中断 SETB ET1 ;开定时器 1 中断 SETB EA SETB TR1 ;启动定时器 1 T1INT: JNB TF1,T1INT SJMP K LJMP START0 LCALL SETDS1302 LCALL GET1302 LCALL DISPLAY MOV R3,#25 MOV TMOD,#01H MOV TH0,#70H ;置定时器初值(7000H=28672) 16 MOV TL0,#00H ;定时(2 -28672)*12/11.0592=40000us=40ms SETB TR0 ;启动定时器 0 LP1: JBC TF0,LP2 ;查询计数溢出 SJMP LP1 ;未到 40 ms 继续计数 LP2: MOV TH0,#0B8H ;重新置定时器初值 MOV TL0,#00H LCALL DISPLAY ;显示 DJNZ R3,LP1 ;未到 1 S 继续循环 LCALL GET1302 ;每过 1s 从 DS1302 读取一次时间 Mov r3,#25 SJMP lp1 ;数码显示子程序 DISPLAY: MOV DPTR,#DIG_CODE ;显示小时 MOV MOV ANL P1,#11111101b A,H A,#0FH

  20

  MOVC MOV LCALL MOV MOV SWAP ANL MOVC MOV LCALL RET ;显示分 MOV MOV ANL MOVC MOV LCALL MOV MOV SWAP ANL MOVC MOV LCALL RET

  A,@A+DPTR P0,A DIS_DELAY P1,#11111110b A,H A A,#03H A,@A+DPTR P0,A DIS_DELAY

  P1,#11111101b A,minute A,#0FH A,@A+DPTR P0,A DIS_DELAY P1,#11111110b A,minute A A,#03H A,@A+DPTR P0,A DIS_DELAY

  六、调试情况及小结

  6.1 硬件调试

  硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬 件一般不会出现什么问题的。没有出现什么问题。用所给的调试程序,调试结果 很好,各模块都能正常工作。 静态调试一般采用的工具是万用表, 其是 在 用 户 系 统 未 工 作 时 的 一 种 硬

  21

  件检测。 动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。调试 步骤是:首先把电路分成若干模块,调式过程中与该模块无关的元件可以不加考 虑,这样可把故障限定在一定的范围内;故障**后,把各个模块合在一起进行 联调,即可完成整个硬件调试工作。

  6.2

  软件调试

  软件调试是通过对程序的汇编、连接、执行来发现程序中存在的 语法错误与逻辑错误并加以排除纠正的过程。

  6.3

  软硬件调试

  软硬件联调是指把调试无误的软件程序烧制进单片机芯片内部,通上电源 后,检查硬件工作是否有预期的效果,如果没有则需检测软件是否在实现功能上 有欠缺。 若有错误, 通过改写软件来调试, 直至达到预期效果, 则设计圆满成功。

  七、设计总结

  经过这两周的课程设计,使我对单片机系统有了更深的认识,更加是锻炼了 我对所学知识的认知应用能力,在老师的悉心指导下,使我们认识到课程的重要 性,同时也感受到理论与实践之间的差距,使我们对单片机系统的应用有了更加 深刻的认识。 通过本次课程设计,又进一步巩固了 KEIL 软件的使用方法,并学会了一些 看似简单但又不一定会的东西, 例如如何烧程序到芯片内以及如何对做出的硬件 进行硬件和软件调试等。在软件设计过程中,通过查阅资料学会了许多指令的使 用及其适用范围。比如:AJMP,LJMP,ACALL,LCALL;Nop;DJNE,CJNE 等。除 此之外,还了解了扫描按键的优先级判断等问题。 但本次的课程设计过程中也出现了不少问题, 比如说编制的程序未能实现温 度的控制,只编制了通过按键扫描控制单片机工作达到流水灯显示,音乐播放, 实时显示时间及日期等功能。在硬件调试的过程中也出现了一些问题,比如显示

  22

  不明显等,如若遇到问题,应该检查电路本身是否有问题,有无短路或断路。 通过这次课程设计,我明白了一次不能将整个程序设计好,反复修改、不断 改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的**与否不 仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交 流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到 的问题记录下来,并分析清楚,以免下次再碰到同样的问题。 这次的单片机课程设计重点是理论与实际的相结合, 不单单只是书上的一条 条分离的指令。 通过这次设计让我更系统的了解了个个指令以及单片机的扩展内 容,为这次的期末考试有了进一步的准备,同时也获得了一笔巨大的知识财富。

  八、参考文献

  《单片机实验与应用设计教程》 《单片机原理及接口技术》 冶金工业出版社 清华大学出版社 邓 红 张 越 胡汉才 李玉峰 倪虹霞

  《MCS-51系列单片机原理与接口技术》人民邮电出版社

  23