单片机课程设计指导

2022-05-18 来源:其他范文收藏下载本文

推荐第1篇:单片机课程设计

基于单片机的火灾智能报警控制系统的设计

前言

在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。 据统计, 我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到

3.2 亿元。进入 90 年代, 特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。

对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。

推荐第2篇:单片机课程设计

单片机课程设计

MCS-51单片机课程设计

指导教师:黄东

电管081,082,建电081,08

2单片机课程设计目的:

单片机原理及接口技术是一门专业技术基础课,是一门实践性很强的课程,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们的单片机接口电路的设计能力和实践动手能力。

单片机课程设计题目: 1. 2. 3. 4.

日历时钟设计 数字温度计设计 数字频率测量仪设计 数字电压表设计

课程设计实验装置:

DP-51PRO.NET三合一多功能实验仪 课程设计拟使用主要电子元器件:

说明:由于单片机课程设计题目将利用DP-51PRO.NET三合一多功能实验仪来实现,因此

本课程设计建议采用实验仪能提供的电子元器件。

设计时间:两周

单片机课程设计报告要求:

1.根据设计题目要求进行系统总体设计

2.设计系统总体电路图,阐述系统中各个单元电路的工作原理 3.系统的硬件设计、电路中元器件的选择,参数确定

--- 1 ---

4.系统的软件设计、主程序流程图和主要子程序流程图 5.给出系统设计硬件元器件清单 6.列出参考资料

注意事项:

1) 设计期间旷课3天或以上本设计不及格; 2) 设计雷同50%以上不及格; 3) 设计报告少于3000字不及格。4)设计封面和硬件图要求打印其他手写。

题目一日历时钟设计

一、设计内容:

采用MCS-51系列单片机进行日历时钟设计并通过实验仪验证通过。

二、设计要求:

1. 设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、

3个6264共24KRAM等) 2. 设计键盘/显示器接口电路。

3. 通过软件编程实现日历时钟的显示(显示年、月、日和时:分:秒) 4. 通过键盘可预置日历时钟。 5. 实现作息时间控制输出。

题目二数字温度计设计

一、设计内容:

采用MCS-51系列单片机进行数字温度计设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统(电路包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。 3.设计温度测量接口电路

4.通过软件编程实现环境温度的测量和显示(温度显示:25.8℃) 5.通过键盘可预置温度报警值,实现温度越限报警功能。

题目三数字频率测量仪设计

一、设计内容:

采用MCS-51系列单片机进行数字频率计设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。

3.通过软件编程实现数字频率计的测量和显示(显示使用六位数码显示器)

4.通过键盘可控制频率计的闸门时间。

题目四数字电压表设计

一、设计内容:

采用MCS-51系列单片机进行数字电压表设计并通过实验仪验证通过。

二、设计要求:

1.设计单片机最小系统电路(包括复位、晶振电路、外扩3个2764共24KROM、3个6264共24KRAM等) 2.设计键盘/显示器接口电路。 3.设计A/D转换器接口

4.通过软件编程实现模拟电压测量和显示(显示取2位小数) 5.通过键盘可预置电压报警值,实现电压越限报警功能。

单片机课程设计硬件参考电路

一、单片机最小系统

1.89C52单片最小系统

XTAL1

2.8032总线型最小系统(3片组成)

XTAL1

推荐第3篇:单片机课程设计

目录

第 1 章

概述.....................................................................................6 第 2 章

单片机.................................................................................7

2.1 单片机简介及应用..................................................................7

2.2 AT89C51简介.......................................................................10

2.2.1主要特性..........................................................................11

2.2.2管脚说明..........................................................................11

2.2.3振荡器特性......................................................................12 第 3 章

电子时钟设计方案.............................................................13

3.1电子时钟简介...........................................................................13

3.2电子时钟的基本特点...............................................................13

3.3电子时钟的原理.......................................................................13 第 4 章

电子时钟硬件设计.............................................................15

4.1 Proteus的简介..........................................................................15

4.1.1 EDA工具软件的功能.....................................................15

4.1.2 特点.................................................................................16

4.2 电子时钟原理图及分析...........................................................17

4.2.1原理图...............................................................................17

4.2.2功能说明...........................................................................18 第 5 章

电子时钟软件设计..............................................................20

5.1 软件设计流程图........................................................................20

5.1.1 程序流程图.......................................................................20

5.1.2 源程序...............................................................................21

5.2 系统仿真及程序测试................................................................27 第 6 章

实验心得...............................................................................29 附录 元器件...........................................................................................30 参考文献.................................................................................................30

1

第一章 概述

一、设计目的

计算机控制系统课程设计是自动化专业的一个重要实践教学环节。在课程设计过程中,学生通过一个较完整的设计过程,可以加深对本门课程所学理论知识的理解与应用,提高学生对所学理论知识的综合运用能力,使学生对计算机控制系统有一个整体认识,掌握计算机控制系统的设计方法。通过课程设计,还可以培养学生独立工作能力,为将来毕业设计打好基础。

二、设计要求

1.用AT89C51单片机及接口电路设计一个电子计时器。

①系统硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,组成功能完整的系统。

②系统软件设计:根据数字电子计时器功能,完成控制软件的编写与调试,并对数码显示进行控制。 2.实现的功能:

①开机时,电子钟从12:00:00开始自动计时。 ②设置按键,能对时、分、秒进行调整。

三、设备及工作环境

1.硬件:计算机一台。

2.软件:Windows操作系统、单片机编译软件,proteus仿真软件。

四、设计思路

电子计时器主要由AT89C

51、显示模块、控制模块和计时运算模块四大部分组成。其中控制模块和计时运算模块主要对时、分、秒的数值显示和调整进行操作,并且秒计算到60时,自动清零并向分进1;分计算到60时,自动清零并向时进1;时计算到24时,自动清零。这样,就形成了循环计时,显示模块主要用来显示当前计数值。A89C51是整个设计的核心,主要用来产生定时中断,传输数据和控制各个部件工作。

2

第二章 单片机

自从1971年微型计算机问世以来,随着大规模集成电路技术的进一步发展,导致微型计算机向两个方向发展:一是高速度、高性能、大容量的高档微型计算机及其系列化,向大、中型计算机的挑战;另一个是稳定可靠、小而廉、能适应各种控制领域需要的单片机。

2.1 单片机简介及应用 1.单片机的简介

单片机是把中央处理单元、随机存储器、只读存储器、定时/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微型计算机系统的含义,从某种意义上说,一块单片机芯片就是一台微型计算机。

自从1975年美国德克萨斯公司推出世界第一个4位单片机TMS——1000型以来,单片机技术不断发展,目前已成为微型计算机技术的一个独特分支,广泛应用于工业控制、仪器仪表智能化和家用电子产品等各个控制领域。 2.单片机的发展

1975年4位单片机的产生开创了单片机的历史,由于4位单片机具有较高的性能价格比,主要用于家用电器和电子玩具,如电视机、空调机、洗衣机、微波炉等。

1976年美国Intel公司首次推出了8位单片机MCS-48系列,从而进入了8位单片机时代。1978年Motorola公司推出6801系列的8位机。早期的8位单片机的功能较差,一般都没有串行I/O口,几乎不带A/D、D/A转换器,中断控制和管理能力也较弱,并且寻址空间的范围小(小于8KB)。随着集成工艺水平的提高,一些高性能8位单片机相继问世,增加了通用串行通信控制,强化中断控制功能,增加了定时/计数器的个数,扩展了存储器的容量,部分系列单片机内还集成了A/D、D/A转换接口。如Intel公司的MCS-51系列、NEC公司的μPD78XX系列等。为了提高单片机的控制功能,拓展其应用领域,在高档8位单片机基础上,又推出新一代8位单片机,如Intel、Phillips、Atmel、华邦公司的80C51

3 系列,Motorola公司的MC68HC11系列,Microchip公司的PIC16C系列等。8位单片机功能强、品种多、价格低廉,因而广泛应用于各个领域。

继8位单片机以后,16位单片机逐渐问世并得到很大的发展,Intel公司于1983年推出的MCS-96系列单片机就是其中的典型产品。16位单片机的集成度更高,内部除有常规I/O口、定时/计数器、全双工串行口外,还有高速I/O部件、多路A/D转换器、脉冲宽度调制器及监视定时器等,运算速度更快。近年来还出现了32位单片机,例如英国Inmos公司的IMST414单片机、Intel公司的80960单片机、日本NEC公司的μPD77230单片机,可用于高速控制、图像处理、语音偶A/DA处理和数字滤波等

从单片机的结构上看,单片机的发展趋势将向着片内存储器容量增加、高性能、高速度、多功能、低电压、低功耗、低价格以及外围接口电路内装化等方向发展。

1.大容量和高性能化:新一代8位单片机的CPU及寄存器都采用16位,内部总线也采用16位,有的还采用流水线技术以及RISC精简指令集计算机技术,指令执行速度可达100ns,堆栈的空间达64KB,并支持C语言的开发。内部RAM在1MB以上,内部ROM可达48KB,存储器寻址可达16MB。

2.多样化的I/O口及电路内装化:随着集成度的不断提高,尽可能把众多的各种外围功能部件集成在片内。单片机内部一般带有存储器、定时/计数器、串行口、并行口,目前较高档的单片机内部还集成A/D、D/A、DMA控制器、声音发生器、监视定时器、液晶显示驱动、PWM端口、FIP控制、彩色电视机和录像机用的锁相电路等多样的I/O接口。

3.低功耗、宽范围的电源电压:许多单片机工作电压范围大,而且可在低电压下工作。

单片机的发展前景是非常乐观的,其应用范围也将更加广泛。 3.单片机的特点

单片机结构上的设计主要是满足控制的需要,因此,它在硬件结构、指令系统及I/O能力等方面均有其独特之处,其显著的特点之一就是具有非常有效的控制功能,故也可以把单片机成为微控制器。

与普通的微型计算机相比,单片机主要具有以下特点:

4 (1) 体积小、结构简单、可靠性高 单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合于恶劣环境下工作。

(2) 控制功能强 单片机虽然结构简单,但是它“五脏俱全”,已经具备了足够的控制功能。单片机具有较多的I/O口,CPU可以直接对I/O口进行I/O操作、算术操作、逻辑操作和位操作,指令简单而丰富。所以单片机也是“面向控制”的计算机。

(3) 低电压、低功耗 单片机已可在2.2V的电压下运行,有的已能在1.2V或0.9V电压下工作;工耗降至μA级,一颗纽扣电池就可以长期使用。

(4) 优异的性能价格比 由于单片机构成的控制系统硬件结构简单、开发周期短、控制功能强、可靠性高,因此,在达到同样功能的条件下,用单片机开发的控制系统比用其他类型的微型计算机开发的控制系统价格更便宜。

4.单片机的应用与89C51单片机的介绍

由于单片机具有上述显著特点,所以其应用领域无所不及,到处都有它的身影。

A、单片机的典型应用领域

(1)工业控制 单片机广泛用于工业自动化控制系统中,数据采集、过程控制、过程测控和生产线上的机器人系统,都是用单片机作为控制器。自动化使工业系统处于最佳工作状态,从而提高经济效益、、改善产品质量和减轻劳动强度,因此单片机技术广泛应用与机械、电子、石油、化工、纺织和食品等工业领域中。

(2)智能化仪器仪表 在各类仪器仪表中引入单片机,可以使仪器仪表智能化、数字化、自动化,提高测试精度和准确度,简化结构,减小体积及重量,提高性能价格比。例如:只智能仪器,医疗器械和数字示波器等。

(3)智能家电 家电产品智能化程度的进一步提高需要有单片机的参与,例如“微电脑控制”的洗衣机、电冰箱、微波炉、空调机、电视机和音响设备等,这里的 “微电脑”实际上就是单片机。

(4)信息与通信技术 图形终端机、传真机、复印机、调制解调器、声像 5 处理器和数字滤波器等。

5.单片机的应用实例

下面以单片机在遥控及数字调谐电视接收机中的应用为例进行介绍。 单片机在电视接收机中的应用,大致分为两个领域:一是用于操作控制系统;二是用于图像、声音信息的处理。属于前一领域的应用有红外遥控、数字调谐、节目预约、功能显示和语言遥控等。

现在以数字调谐选台电路为例加以说明,如图1所示。当进行预置选台是,有本机键盘或遥控发出预置选台指令、单片机控制器读入指令后首先进行解码(通过执行解码程序完成,每一种控制功能都对应一段控制程序,分别写于程序存储器ROM中的不同区域,用地址码来选择)。解码的结果是识别出输入的控制功能指令代码所代表的控制功能,即找到该控制功能所对应控制程序的首地址,然后从该首地址开始执行这段程序。在控制程序的控制下,对时钟脉冲进行变换处理,由微控制器的搜索计数器进行加减计数,产生数字选台数据,其中数字频信息送至频段译码电路,得到三个频段(VL、VH、U)的控制电压送至调谐器完成频段的切换;而数字调谐电压信息送至微控制器内的D/A转换器,以便合成频率和宽度为特定值的脉冲宽度调制(PWM)信号,经低通滤波器变换成直流调谐控制电压VT,也送至调谐器进行频段内不同频道的选择,两种信号共同作用完成选台。控制电路还送出供显示选台及接收机调整状态的标记用的信号。

2.2

AT89C51简介

AT89C51 AT89C51 单片机简介 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROM— Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微处理器,俗称单片机。A单片机的可擦除只读存储器可以反复擦除 100 次。该 器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令 集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中, ATMEL 的 AT89C51 是一种高效微控制器。

2.2.1主要特性

与 MCS-51 兼容 ; 4K 字节可编程闪烁存储器 ; 寿命:1000 写/擦循环;数据保留时间:10 年; 全静态工作:0Hz-24Hz; 三级程序存储器锁定; 128*8 位内部 RAM ;32 可编程 I/O 线; 两个 16 位定时器/计数器; 5 个中断源 ; 可编程串行通道; 低功耗的闲置和掉电模式;片内振荡器和时钟电路。

2.2.2管脚说明

VCC:供电电压。 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时,被定义为高阻输入。P0 能够用于外部程序数据 存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原 码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能 接收输出 4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入, P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收, 输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且 作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由 于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器 进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉 优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器 的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL)这是由于上拉的 缘故。 P3 口也可作为 AT89C51 的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 P3.2 P3.3 P3.4 P3.5 TXD(串行输出口) /INT0(外部中断 0) /INT1(外部中断 1) T0(记时器 0 外部输入) T1(记时器 1 外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器

7 读选通) P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地 位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不 变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对 外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个 机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信 号将不出现。 /EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000HFFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此 引脚也用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

2.2.3振荡器特性

XTAL1 和 XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置 为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件, XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外 部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

图 AT89C51

第三章 电子时钟设计方案

3.1电子时钟简介

电子钟亦称数显钟(数字显示钟),是一种用数字电路技术实现时、分、秒计时的装置,与机械时钟相比,直观性为其主要显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大地方便。

相对于其他时钟类型,它的特点可归结为“两强一弱 ”:比机械钟强在观时显著,比石英钟强在走时准确,但是它的弱点为显时较为单调。

3.

2电子时钟的基本特点

本设计由单片机 AT89C51 芯片和 LED 数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。与传统机械表相比,它具有走时精确,显示直观等特点。 它的计时周期为 24 小时, 显满刻度为“23 时 59 分 59 秒”,另外具有校时功能等特点。该电子钟可以做到的功能:上电或按键复位后能自动显示系统提示符“P.”进入时钟准备状态 2.第一次按电子钟启动/ 调整键,电子钟从 0 时 0 分 0 秒开始运行,进入时钟运行状态。再次按电子钟启动/调整键, 则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键 再次进入时钟运行状态。通过设置的 A、B、C、D 四个键来调整运行,并且利用了 8 位 LED 显示时分秒。

3.

3电子时钟的工作原理

电子钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒,具有校时功能和报时功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精

9 度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。译码显示电路将“时”、“分”、“秒”计数器的输出状态用七段显示译码器译码,通过七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整。

10

第 四 章

电子时钟硬件设计

4.1 Proteus的简介

Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。

4.1.1 EDA

工具软件的功能

(1)智能原理图设计(ISIS)

丰富的器件库:超过27000种元器件,可方便地创建新元件;

智能的器件搜索:通过模糊搜索可以快速定位所需要的器件;

智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间;

支持总线结构:使用总线器件和总线布线使电路设计简明清晰;

可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。

(2)完善的电路仿真功能(Prospice)

※ ProSPICE混合仿真:基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真;

※ 超过27000个仿真器件:可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件;

※ 多样的激励源:包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入;

※ 丰富的虚拟仪器:13种虚拟仪器,面板操作逼真,如示波器、逻辑分析 11 仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等;

※ 生动的仿真显示:用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动;

※ 高级图形仿真功能(ASF):基于图标的分析可以精确分析电路的多项指标,包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅立叶频谱分析等,还可以进行一致性分析;

(3)独特的单片机协同仿真功能(VSM)

※ 支持主流的CPU类型:如ARM

7、8051/

52、AVR、PIC10/

12、PIC

16、PIC

18、PIC

24、dsPIC

33、HC

11、BasicStamp、808

6、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器;

※ 支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信;

※ 实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真;

※ 编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带80

51、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试;

4.1.2 特点

① 全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。

②具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿 12 真、RS-232动态仿真、C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

③ 目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

④ 支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 ,可仿真

51、AVR、PIC。

4.2 电子时钟原理图及分析

4.2.1原理图

1.系统总体原理图

图1系统总体原理图

4.2.2功能说明

1.整体功能说明

在LED数码管上能实现数字计时器的时、分、秒显示,并能对时、分、秒进行加1校对和清零.通过控制键控制计时器的开始,暂停,继续和清零.并且开机时时钟时从00:00:00开始计时的。

2.模块功能说明

(1)AT89C51简介,如下图

图2 AT89C51引脚图

①TMOD定时器/计数器方式寄存器

定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。

②TCON定时器/计数器控制寄存器

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为 14 88H--8FH,由于有位地址,十分便于进行位操作。 ③定时器/计数器的初始化

由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作.初始货的步骤一般如下:

1、确定工作方式(即对TMOD赋值),预置定时或计数的初值。

2、根据需要开放定时器/计数器的中断(直接对IE位赋值)。

3、启动定时器/计数器。(2)时钟电路

单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。既本数字电子钟设计所需的时钟源采用内部时钟电路实现。所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图2所示。

图3 时钟电路图 (3)LED数码管

7SEG-MPX6-CC是7段6位共阴级数码管,DP为小数点,位码(1-6)应轮流通低电位,段码控制数码管的显示:0-b,1-g,2-a,3-f,4-c,5-e,6-h,7-d.共阴极LED数码管,它是将发光二极管的阴极(负极)短接后作为公共阴极.当驱动信号为高电平才能发光。

15

五 章

电子时钟软件设计

5.1 软件设计流程图

5.1.1 程序流程图.

1.时钟显示程序流程图 时钟显示程序流程图如下图

图 4 时钟显示程序流程图

16

5.1.2 源程序

源程序清单

ORG 0000H LJMP MAIN ORG 0003H LJMP MIAO ORG 000BH LJMP SHI ORG 0013H LJMP FEN ORG 001BH LJMP SZ

MAIN:

MOV R7, #20 MOV R4, #00H MOV R5, #00H MOV R6, #00H

MOV TMOD, #16H MOV TH1, #3CH MOV TL1, #0B0H MOV TH0, #0FFH MOV TL0, #0FFH SETB TR0 SETB

TR1 SETB EA SETB ET1 SETB PT1

17 SETB IT0 SETB IT1 CLR EX0 CLR EX1 CLR ET0

LOOP:

MOV A, R4

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#01H LCALL DELAY MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#02H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH JNB

P2.0,TIAOJIE

MOV P1, #04H MOV P0, #0F6H LCALL DELAY MOV P0,#0FFH MOV A, R5

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#08H LCALL DELAY MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#10H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH

JNB

P2.0,TIAOJIE

MOV P1, #20H MOV P0, #0F6H LCALL DELAY

MOV P0, #0FFH MOV A, R6

MOV B, #10 DIV AB MOV DPTR, #TAB MOVC A, @A+DPTR MOV P0, A MOV P1,

#40H LCALL DELAY

19 MOV P0, #0FFH MOV A, B

MOVC A, @A+DPTR MOV P0, A MOV P1,

#80H LCALL DELAY MOV P0, #0FFH MOV P2, #0FFH JNB

P2.0,TIAOJIE

LCALL DELAY LJMP

LOOP

TIAOJIE:CPL ET0

CPL ET1

CPL EX0

CPL EX1

LJMP LOOP

DELAY: MOV R3, #100

DEL2:

MOV R2, #10

NOP

DJNZ

R2,$

DJNZ

R3,DEL2

RET LCALL DELAY LJMP LOOP

ORG

0100H SZ: PUSH ACC

MOV TH1, #3CH

MOV TL1, #0B0H DJNZ R7, L2 MOV R7, #20 INC R4 MOV A, R4 CJNE A, #60, L2 MOV R4, #00H INC R5

MOV A, R5 CJNE A, #60, L2 MOV R5, #00H INC R6 MOV A, R6 CJNE A, #12, L2 MOV R6, #00H L2: POP ACC RETI ORG

0200H MIAO:

CLR EA INC R4 SETB EA

RETI FEN: CLR EA INC R5 SETB EA

21 RETI SHI:

CLR EA INC R6 SETB EA RETI

TAB:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

22

5.2 系统仿真及程序测试

1.调秒

图5 调秒原理图

2.调分

图6调分原理图

23

3.调时

图7调时原理图

24

六 章

实验心得

这个星期参加单片机实习,让我受益匪浅。通过这次的实训,让我学会了Proteus和Keil软件的使用。整个设计通过了软件和硬件上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。

在老师的精心指导下,花费的时间与精力终于没有白费,效果渐渐地出现了。这是我们共同努力的结果,在享受我们成果之时,不得不感慨单片机的重要性与高难度性,所以为期一周的单片机课程设计没有浪费,我们从中学到了很多知识。也让我们对单片机有了更深一步的了解。

25

附录 元器件 AT89C51

1个 8位数码管

1个 电阻

电容

晶振

按键

电源

GND

13个 3个 1个 4个

3个 4个 26

参考文献

[1]李朝清.单片机原理与接口技术[M].北京航空航天大学出版社。2005.10.[2]耿永刚.单片机与接口应用技术[M].华东师范大学出版社.2008.4.[3]范立南, 谢子殿.单片机原理及应用教程[M].北京大学出版社.2006.1.[4]梅丽凤.王艳秋,汪毓铎.单片机原理及接口技术[M].清华大学出版社.2003.5.[5]何立民.单片机应用系统设计[M].北京航空航天大学出版社.2002.[6]胡汉才.单片机原理及其接口技术[M].清华大学出版社.2004.10.

27

推荐第4篇:单片机课程设计

基于单片机的计算器设计、基于单片机的密码锁设计、基于单片机的电机控制、基于单片机的交通灯设计、基于单片机的八路抢答器设计、基于单片机的温度检测设计、基于单片机的温湿度检测设计、基于单片机的LED显示屏、基于单片机的烟雾报警设计、基于单片机的液位检测设计基于单片机的智能小车设计、基于单片机的气压计设计、基于单片机的多功能电子时钟设计、基于单片机的电子秒表设计、基于单片机的电压表设计、基于单片机的波形发生器设计、电机驱动模块、基于单片机的频率计设计、基于单片机的电子称设计、基于单片机的电子调光灯、基于单片机的智能风扇、基于单片机的红外遥控设计、基于单片机的出租车计价器设计、基于单片机的调速设计、基于单片机的超声波测距设计、基于单片机的电子琴设计、基于单片机的风力发电测试、基于单片机的智能充电器设计、基于单片机的小功率直流电机控制、基于单片机1602的万年历设计、基于单片机的无限温度控制、、、、、、、更多单片机课程设计免费下载、机不可失失不再来:http:///reg/index.asp?id=7586

推荐第5篇:单片机课程设计

多元智能理论在美国教育改革的理论和实践中产生了广泛的积极影响,并且已经成为当前美国教育改革的重要理论基础之一。运用多元智能理论分析我国的教育问题,对于促进我国的教育改革和学生全面素质的提高有着重要的积极意义。

1.树立新的学生观、教学观和评价观

首先,根据多元智能理论,我们应该树立积极乐观的学生观。每个学生都有自己的优势智能,有自己的学习风格和方法。我们看待学生时应该时刻清醒地认识到,每个学生都是多种不同智能不同程度的组合,问题不再是一个学生有多聪明,而是一个学生在哪些方面聪明和怎样聪明。

2.向学生展示多方面的智能领域

受遗传因素和环境因素的影响,儿童之间很早就表现出兴趣爱好和智能特点的不同。美国心理学家的一项实验研究表明,四五岁的儿童在完成需要不同智能共同参与的多项游戏任务时,都表现出了不同的智能特点。教育工作者的任务就应该是向儿童提供多种多样的智能活动机会,在充分尊重儿童发展独特性的同时,保证儿童的全面发展。

3.注意鉴别并发展学生的优势智能领域

在多元智能理论看来,每一位学生都有相对的优势智能领域(无论是相对于自己还是别人),如有的学生更容易通过音乐来表达,有的学生则更容易通过数学来表达。我们应该在对学生进行评价的基础上注意发现他们的优势智能领域并加以挖掘和发展。

4.帮助学生将优势智能领域的特点迁移到其他智能领域多元智能理论强调八种智能中的每一种在人类认知结构中均具有同等重要的地位,教育应该对不同的智能一视同仁。但它更强调每一个人的智能特点是不一样的,强调每一个人都应该在充分展示自己智能长项的同时,将自己优势领域的意志品质等迁移到弱势智能领域中,从而使自己的弱势智能领域得到发展。

5.应该注重培养学生的创造能力

加德纳多元智能理论告诉我们应该注重学生创造能力的培养。在多元智能理论看来,现实生活需要每个人都充分利用自身的多种智能来解决各种实际问题,社会的进步需要个体创造出社会需要的物质产品和精神产品,这两种能力的充分发展,才应该被视作智能的充分发展。从智能的本质上讲,解决实际问题的能力也是一种创造能力,因为它主要是综合运用多方面的智能和知识、创造性地解决现实生活中没有先例可循的新问题特别是难题的能力。

6.建构全新的课程设计思路

多元智能理论为我们挑战传统的课程设计思路并形成新的、有时代特点的课程设计思路提供了有意义的借鉴。根据多元智能理论的理念和实践,有时代特点的课程设计思路可以概括为两点,其一是“为多元智能而教”,其二是“通过多元智能来教”。

1.不相信自己的意志,永远也做不成将军。

春秋战国时代,一位父亲和他的儿子出征打仗。父亲已做了将军,儿子还只是马前卒。又一阵号角吹响,父亲庄严地托起一个箭囊,郑重地对儿子说:“这是家袭宝箭,佩带身边,力量无穷,但千万不可抽出来。”果然,佩带宝箭的儿子英勇非凡,所向披靡。当鸣金收兵的号角吹响时,儿子再也禁不住得胜的豪气,完全忘记了父亲的叮嘱,强烈的欲望驱使他呼一声就拔出了宝箭。骤然间他惊呆了,断箭,箭囊里装着一枝折断的箭。儿子顿时吓出了一身冷汗,意志轰然坍塌。结果儿子惨死于乱军之中。

Skill 1:把胜败寄托在一枝宝箭上,多么愚蠢,而当一个人把生命的核心与把柄交给别人,又是多么危险!永远记住:自己才是一枝宝箭。

2、乐观者和悲观者

从前,有一对夫妇养育了两个儿子,大儿子以卖煤为生,小儿子则卖雨伞。每到下雨,母亲就唉声叹气说大儿子的煤要卖不出去了,天晴时,母亲又惆怅抱怨小儿子的伞没人要。但父亲则和母亲恰恰相反,下雨天,他为小儿子高兴,天晴时,他为大儿子叫好。

Skill 2:性格决定命运,乐观的人会在逆境中找到快乐,悲观的人看不到生活中的希望,有什么样的思维方式就会有什么样的人生。

3、为生命画一片树叶

美国作家欧・亨利在他的小说《最后一片叶子》里讲了个故事: 病房里,一个生命垂危的病人从房间里看见窗外的一棵树,叶子在秋风中一片片地掉落下来。病人望着眼前的萧萧落叶,身体也随之每况愈下,一天不如一天。她说:“当树叶全部掉光时,我也就要死了。”一位老画家得知后,用彩笔画了一片叶脉青翠的树叶挂在树枝上。最后一片叶子始终没掉下来。只因为生命中的这片绿,病人竟奇迹般地活了下来。

Skill 3:人生可以没有很多东西,却唯独不能没有希望。希望是人类生活的一项重要的价值。

4、飞翔的蜘蛛 一天,我发现,一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞?要不,从这个檐头到那个檐头,中间有一丈余宽,第一根线是怎么拉过去的? 后来,我发现蜘蛛走了许多弯路——从一个檐头起,打结,顺墙而下,一步一步向前爬,小心翼翼,翘起尾部,不让丝沾到地面的沙石或别的物体上,走过空地,再爬上对面的檐头,高度差不多了,再把丝收紧,以后也是如此。蜘蛛不会飞翔,但它能够把网结在半空中。它是勤奋、敏感、沉默而坚忍的昆虫,它的网织得精巧而规矩,八卦形地张开,仿佛得到神助。这样的成绩,使人不由得想起那些沉默寡言的人和一些深藏不露的智者。

Skill 4:信念是一种无坚不摧的力量,当你坚信自己能成功时,你必能成功。

5、成功并不像你想像的那么难

1965年,一个韩国学生到剑桥大学主修心理学。他常到学校的咖啡厅或茶座听一些成功人士聊天,他们中有诺贝尔奖获得者,有学术权威,还有一些创造了经济神话的人。这些人幽默风趣、举重若轻,把自己的成功都看得非常自然和顺理成章。时间长了,他发现,在国内时,一些成功人士把自己的创业艰辛过分地夸大了。 作为心理系的学生,他对韩国成功人士的心态进行了研究。1970年,他把《成功并不像你想像的那么难》作为毕业论文,提交给现代经济心理学的创始人威尔布雷登教授。布雷登教授读后,大为惊喜。这本书后来鼓舞了很多人,它从一个新的角度告诉人们,成功与“劳其筋骨,饿其体肤”、“三更灯火五更鸡”、“头悬梁,锥刺股”没有必然的联系,只要你对某一事业感兴趣,长久地坚持下去就会成功,必有收获。

Skill 5:人世中的许多事,只要想做,都能做到,用不着什么钢铁般的意志,更用不着什么技巧或谋略。只要一个人还在朴实而饶有兴趣地生活着,他终究会发现,造物主对世事的安排,都是水到渠成的。

6、勇于冒险

有一天,龙虾与寄居蟹在深海中相遇,寄居蟹看见龙虾正把自己的硬壳脱掉,露出娇嫩的身躯。寄居蟹非常紧张地说:“龙虾,你怎可以把唯一保护自己身躯的硬壳也放弃呢?难道你不怕有大鱼一口把你吃掉吗?以你现在的情况来看,连急流也会把你冲到岩石去,到时你不死才怪呢?” 龙虾气定神闲地回答:“谢谢你的好心,可是你不了解,我们龙虾每次成长,都必须先脱掉旧壳,才能生长出更坚固的外壳,现在面对的危险,只是为了将来发展得更好而作出准备。” 寄居蟹细心思量一下,自己整天只找可以避居的地方,而从来没有想过如何令自己成长得更强壮,整天只活在别人的护荫之下,难怪永远都限制自己的发展。

Skill 6:对于那些害怕危险的人,危险无处不在。

7、再试一次 有个年轻人去微软公司应聘,而该公司并没有刊登过招聘广告。见总经理疑惑不解,年轻人用不太娴熟的英语解释说自己是碰巧路过这里,就贸然进来了。 总经理感觉很新鲜,破例让他一试。面试的结果出人意料,年轻人表现糟糕。他对总经理的解释是事先没有准备,总经理就随口应道:“等你准备好了再来试吧。” 一周后,年轻人再次走进微软公司的大门,这次他依然没有成功。但比起第一次,他的表现要好得多。而总经理给他的回答仍然同上次一样:“等你准备好了再来试。”就这样,这个青年先后5次踏进微软公司的大门,最终被公司录用,成为公司的重点培养对象。

Skill 7:以勇敢者的气魄,坚定而自信地对自己说一声“再试一次”!再试一次,你就有可能到达成功的彼岸!

8、天道酬勤

曾国藩是中国历史上最有影响的人物之一,但是他小时候的天赋却并不高。 有一天在家读书,对一篇文章不知道重复了多少遍,还是没有能够背下来。这时候他家来了一个贼,潜伏在他的屋檐下,贼想等到读书人睡觉之后捞点好处。 可是等啊等,就是不见他睡觉,还是翻来覆去地诵读那篇文章。贼大怒,从梁上跳出来说,“这种水平读什么书”?然后将那文章背诵一遍,扬长而去。贼是很聪明,至少比曾先生要聪明,但是他只能成为贼,那贼的记忆力真好,听过几遍的文章都能背下来,可惜,他的天赋没有加上勤奋,变得不知所终,而曾国藩便是凭着勤奋和坚忍的毅力成为一代宗师。

Skill 8:伟大的成功和辛勤的劳动是成正比的,有一分劳动就会有一分收获,日积月累,从少到多,奇迹就可以创造出来。

9、居安思危

一只野狼卧在草上勤奋地磨牙,狐狸看到了,就对它说:“天气这么好,大家在休息娱乐,你也加入到我们队伍中吧!” 野狼没有说话,继续磨牙,把它的牙齿磨得又尖又利。狐狸奇怪地问道:“森林这么静,猎人和猎狗已经回家了,老虎也不在近处徘徊,又没有任何危险,你何必那么用劲磨牙呢?” 野狼停下来回答说:“我磨牙并不是为了娱乐,你想想,如果有一天我被猎人或老虎追逐,到那时,我想磨牙也来不及了。”

Skill9:做事应该未雨绸缪,居安思危,这样在危险突然降临时,才不至于手忙脚乱。“书到用时方恨少”,平时若不充实学问,临时抱佛脚是来不及的。机会只给那些有准备的人。千万不要相信,临阵磨枪不快也光,那是自欺欺人。

10、你也在井里吗?

有一天某个农夫的一头驴子,不小心掉进一口枯井里,农夫绞尽脑汁想办法救出驴子,但几个小时过去了,驴子还是在井里痛苦地哀嚎着。最后,这位农夫决定放弃,他想这头驴子年纪已经太大了。农夫于是请来左邻右舍帮忙一起将井中的驴子埋了。邻居们人手一把铲子,泥土一铲铲进了枯井。但出人意料的是,这头驴子好像安静下来了,农夫好奇地往井底探头,出现在眼前的景象令他大吃一惊:当泥土落在驴子的背部时,驴子便将泥土抖落在一旁,然后站到铲进的泥土堆上面。 就这样,驴子将大家铲倒在它身上的泥土全数抖落在井底,然后再站上去。很快,这只驴子便得意地上升到井口,然后在众人惊讶的表情中快步地跑开了!

Skill 10:在生命的旅程中,有时候我们难免会陷入“枯井”里,会被各式各样的“泥沙”倾倒在我们身上,而想要从这些“枯井”脱困的秘诀就是:将“泥沙”抖落掉,然后站到上面去!

成功等于知识加人脉,不断地补充知识是获得成功的前提.华人首富,我们 的创富凯模李嘉诚先生也说:知识是一个人成就大业的基础.在二十一世纪竞争激烈的今天,我们 大学生必须具备哪些技能才能在这个时代脱颖而出?我个人认为当代大学生在无论是职场还是自己创业都必须获得以下三种技能技能才能更加成功及我对这三种技能的提升计划

1、拥有勇气

万丈高楼平地起,不积跬步无以成千里,不积小流无以成江河。飞机要起飞,先求稳再求快,一个人要成功,打基础非常重要,大学生要成功,勇气是必不可少的基本功。人之一世,殊为不易。在看似平坦的人生道路上却充满了无数的荆棘。有些人会志气消沉变得一蹶不振,有些人会因其迷失前进的道路,从而半途而废,也有些人依然奋勇向前,最终看到的是柳暗花明之后的又一座美丽的村庄。 勇气是成功的保证,每当面临抉择,许多人会犹豫不决,也会因此错过瞬息即逝的机会。但如果拥有当机立断的魄力与勇气,机会就不会溜走。

2、坚持乐观

每天做一件让他人感到舒服的事,或是说让他人感到高兴的话,我可以非常轻松的做到这一点,我可以用电话、明信片的方式,训练自己在每一困境中,用积极的心态面对这一切。每天阅读一篇励志文章,从他人的经验中汲取面对困难的勇气。同时我也会坚信,积极乐观的心态会对一个人的命运产生极大的影响。与成功和积极乐观的人交朋友,从他们身上汲取积极正面的力量,并与他们分享成功的经验。

3、坚定信念

每个人都有一定的理想,这种理想决定着他的努力和判断的方向。在这个意义上,我从来不把安逸和快乐看作是生活目的本身——这种伦理基础 ,我叫它猪栏式的理想。照亮我的道路,并且不断地给我新的勇气去愉快地正视生活的理想,是善、美和真。培养自己的信念,培养保持这种信念的毅力。自己认为对的,要有坚持的信念,人生很多时候不是因为坚持做了什么而后悔,而是因为没有坚持做某事而后悔。别人给予的永远只是建议和参考,理性分析这些建议,摈弃糟粕,取其精华。

推荐第6篇:单片机课程设计

课 程 设 计

设计题目: 基于单片机的8*8点阵显示数字设计

学生姓名: 指导教师: 二级学院: 专

业: 班

级: 学

号:

目 录

摘要„„„„„„„„„„„„„„„„„„„„„„„„„„Ⅱ 1 方案选择及总体设计„„„„„„„„„„„„„„„„„„„1 1.1方案确定„„„„„„„„„„„„„„„„„„„„„1 1.1.1功能要求„„„„„„„„„„„„„„„„„„„„1 1.1.2方案确定„„„„„„„„„„„„„„„„„„„„1 1.2器件选择„„„„„„„„„„„„„„„„„„„„„1 2 控制系统设计„„„„„„„„„„„„„„„„„„„„„„2 2.1 控制系统硬件设计„„„„„„„„„„„„„„„„„2 2.1.1整体模块设计„„„„„„„„„„„„„„„„„„2 2.1.2单片机AT89C51„„„„„„„„„„„„„„„„„2 2.1.3单片机最小系统设计„„„„„„„„„„„„„„„5 2.1.3.1晶振电路设计„„„„„„„„„„„„„„„„„5 2.1.3.2复位电路设计„„„„„„„„„„„„„„„„„5 2.1.4驱动电路设计„„„„„„„„„„„„„„„„„„6 2.1.5LED点阵显示设计„„„„„„„„„„„„„„„„9 2.2控制系统软件设计„„„„„„„„„„„„„„„„„11 2.2.1软件设计思想„„„„„„„„„„„„„„„„„„11 2.2.2主程序流程图„„„„„„„„„„„„„„„„„„11 2.2.3子程序流程图„„„„„„„„„„„„„„„„„„13 3 系统仿真及调试„„„„„„„„„„„„„„„„„„„„14 3.1系统调试„„„„„„„„„„„„„„„„„„„„„14 3.2系统仿真„„„„„„„„„„„„„„„„„„„„„14 3.2.1protrus软件仿真„„„„„„„„„„„„„„„„14 3.2.2程序„„„„„„„„„„„„„„„„„„„„„„14 总结„„„„„„„„„„„„„„„„„„„„„„„„„^„17 参考文献„„„„„„„„„„„„„„„„„„„„„„„„18

I

摘 要

现在市场上各类基于LED的显示屏较多,但大部分产品为单一模式的LED显示屏,其在显示内容的更换及显示屏的重组等方面都存在不便之处。但随着信息化社会的迅速发展,LED显示屏正在向显示内容丰富、信息更改方便等方面发展。因此制作一款多功能的LED广告显示屏是非常有意义地。

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以8×8点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;第8行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

本次课程设计的题目为8×8点阵数字显示,设计的任务为使用单片机控制8×8的点阵显示0到9的数字,不仅显示清晰,并且每经过一定时间,显示的数字加一,从0 到 9 循环。 以AT89C51单片机为核心,采用串行传输、动态扫描技术,制作一款模块化LED多功能显示屏。

在资料收集方面,主要是参考了《51单片机原理及应用—基于Keil C与Proteus》一书,结合了一些网络资料,以及一些集成块的使用说明书。

在整个工作过程中,根据收集来的资料绘制出大概的原理图,然后通过Proteus仿真,与此同时运用Keil 编程,用Keil 与Proteus进行联调,调试成功后确定了原理图和控制程序。

II

第一章 方案选择及总体设计

1.1 方案确定

1.1.1 功能要求

1、采用STC-51单片机作为微处理器。

2、设计一个8×8点阵LED数码字符显示器。

3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。

4、动态显示“0——9”几个字符。

1.1.2 方案确定

采用ST89C51单片机作为微处理器,将共阳极二极管用共阴型接法连接成8×8点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0——9”。

1.2 器件选择

微处理器采用ST89C51系列单片机,ST89C51单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1

第二章 控制系统设计

2.1控制系统硬件设计

2.1.1整体模块设计

本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图2-1所示。

点阵显示器行驱动电路PC上位机单片机8×8点阵LED显示器电路点阵显示器列驱动电路

图2-1 硬件系统框图

此次需要实现的功能是利用一个ST89C51,一个8×8LED点阵,动态显示“0——9”10个字,采用PC上位机驱动显示电路。

2.1.2 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM) ,器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。

AT89C51单片机引脚图如图2-2所示。

2

图2-2 AT89C51引脚图

AT89C51管脚说明: VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行

3

存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚

备选功能: 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(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:

4

来自反向振荡器的输出。

2.1.3 单片机最小系统设计

单片机的最小系统是能够让单片机工作的最小硬件电路。除了单片机外,最小系统还包括复位电路和时钟电路。

复位电路:单片机的复位电路接在复位信号RST上,复位电路用于将单片机内部电路的状态恢复到初始值。需要复位时按下按钮即可。

时钟电路:时钟电路为单片机工作提供基本时钟。时钟电路中包含一个晶体振荡器,简称晶振,频率范围是1.2~12MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快

ST89C51单片机最小系统电路由复位电路、晶振电路两部分组成。 2.1.3.1 晶振电路设计

ST89C52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶振频率采用12MHZ,C

1、C2的电容值取30pF,电容的大小起频率微调的作用。晶振电路图如图2-3所示。

C1XTAL130pFC2XTAL230pF图2-3 晶振电路图

X112MHZ

2.1.3.2 复位电路设计

ST89C51单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。本设计采用最简单的上电复位方式,电路如图2-4所示。上电复位是通过外部复位电路的电容充电来实现的,

5

复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对ST89C51单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使ST89C51单片机可靠复位。当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。

ST89C51单片机复位电路如下图所示:

VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC

图2-4 上电复位电路图

图2-5 按键电平复位电路图

复位电路工作原理:

上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。

当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现ST89C51单片机复位。

2.1.4 驱动电路设计

驱动电路图如图2-6所示。

6

图2-6 驱动电路图

74LS245引脚图如图2-7所示。

图2-7 74LS245引脚图

引出端符号: A A总线端

7

B B总线端

/G 三态允许端(低电平有效) DIR 方向控制端

74LS245是用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。

如果用89C51的P0口输出到数码管,那就要考虑到数码管的亮度以及P0口带负载的能力,当89C51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。选用74LS245提高驱动能力。P0口的输出经过74LS245提高驱动后,输出到数码管显示电路。

工作原理:

当片选端/CE低电平有效时,

DIR=“0”,信号由B向A传输;(接收) DIR=“1”,信号由A向B传输;(发送) 当CE为高电平时,A、B均为高阻态。

正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。而不管是ST89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。

共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,ST89C51本身内置一个反向驱动器,本设计将ST89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。

单片机的串口与行驱动器相连,用来发送显示数据信息。P3口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。

所要显示的信号送入74LS245芯片,然后连接到LED阵列的列阵脚。对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED到输出端,形成正向回路,即可点亮该LED。其中每个晶体管任何时间只需负

8

责驱动一个LED,所以选择30mA射极电流的晶体管。驱动电路如图2-6所示。

2.1.5 LED点阵显示设计

本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,88点阵共阳LED显示器。其中,P0口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源,改变电阻(270×8)的大小可改变显示字符的亮度,驱动用74LS245芯片。

本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。 LED显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足数字显示的要求。8×8点阵LED结构如图2-8所示。

8×8点阵LEDabcdefgh12345678

图2-8 LED数码显示管

8×8 点阵LED的工作原理:LED点阵的显示方式是按显示编码的顺序,一行一行地显示。对于共阳型的点阵来说,当某一点所在的行对应高电平“1”并且其所在的列对应低电平“0”的时候,这一点就会被点亮。将每一行的显示时间进行一定的延时,由于人的视觉暂留现象,就会感觉到8行LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。图2-9为8×8点阵LED外观及引脚图,其等效电路如图2-10所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。一个8×8点阵是由64个发光二极管按规律组成的,如图2-10所示。图中,行接高电平,列接低电平,发光二极管导通发光。

9

图2-9 8×8点阵LED外观及引脚图

图2-10 8×8点阵LED等效电路

8×8点阵数字显示的编码原理: 8×8点阵数字显示主要应用行扫描动态显示的方法实现,如图2-11所示,将行线依次置零,一次对列线编码,有红色填充部分为1,无填充部分为0。

10

图2-11 8×8点阵数字显示的编码原理

如此可得到“0”的编码为{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:

{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}

//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}

//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}

//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}

//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}

//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}

//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}

//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}

//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}

//9 2.2控制系统软件设计

2.2.1 软件设计思想

主程序先进行设置中断,并启动,再进行键盘扫描载入“0——9”字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。设计过程中,能很好得提高按键响应速度。

2.2.2 主程序流程图

主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入“0——9”字型,进行扫描。图2-12为主程序流程图。

11

图2-12 主程序流程图

12

2.2.3 子程序流程图(定时中断服务程序)

图11 子程序流程图(定时中断服务程序)

13

第三章 系统仿真及调试

3.1系统调试

根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好。

通电后,用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。

3.2 系统仿真

3.2.1 proteus软件仿真

使用proteus原理及仿真如图3-1所示。

如图3-1 proteus原理及仿真图

3.2.2 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]=

14

{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,

//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,

//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,

//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,

//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,

0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,

0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00

}; uchar i=0,t=0,Num_Index; //主程序 void main() { P3=0x80;

Num_Index=0;

//从0开始显示

TMOD=0x00;

//T0方式0 TH0=(8192-2000)/32; //2ms定时

TL0=(8192-2000)%32; IE=0x82;

//允许T0中断

TR0=1;

//启动T0 while(1); }

//T0中断函数

void LED_Screen_Display() interrupt 1 { TH0=(8192-2000)/32;

//恢复初值

TL0=(8192-2000)%32; P0=0xff;

//输出位码和段码

P0=~Table_of_Digits[Num_Index*8+i]; P3=_crol_(P3,1);

//P3循环向左一位

5 //5 //6 //7

//8 //9

}

if(++i==8) i=0; if(++t==250) {

} t=0;

//每屏一个数字由8个字节构成 //每个数字刷新显示一段时间

if(++Num_Index==10) Num_Index=0; //显示下一个数字

16

总结

经过单片机的课程设计,我有了很大的收获。

首先,就是让我加深了对单片机的掌握和理解与应用,知道单片机到底是怎样控制点阵,怎样应用在生活中的。并且让我懂得了要善于思考,追求严谨,认真解决问题,才会有更多的收获。

然后,提高了通过查阅资料解决问题的能力。通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料→思考总结→运用→找出差错,再查资料和向别人询问→再次运用”的正确性。

最后,本系统能够完成设计任务,能够显示数字0-9,并且显示也较为稳定清晰。 本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。在本次课程设计中,主要使用了Proteus和Keil等软件进行硬件电路和控制程序的设计,加深了对这些软件的了解。感到Proteus对电子专业的同学来说是一个很有用的软件。总体来说这次的课程设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。

17

参考文献

[1] 张靖武,周灵彬 《单片机系统的PROTEUS设计与仿真》北京 电子工业出版社 [2] 吴金戌,沈庆阳,郭庭吉 《8051单片机实践与应用》北京 清华大学出版社 [3] 李群芳,肖看 《单片机原理、接口及应用》北京 清华大学出版社

[4] 张毅刚,彭喜元等 《新编MCS-51单片机应用设计 》黑龙江 哈尔滨工业大学出版社 [5] 李朝青,刘艳玲编著 《单片机原理及接口技术》北京 航空航天大学出版社

18

推荐第7篇:单片机课程设计

单片机课程设计 跑马灯的控制

摘要:本设计选择对跑马灯的控制,先构思跑马灯实现预想效果,然后进行分 析,根据要求编写程序,选择硬件端口,并进行调试致预想效果,最后浅谈课

程设计的经历,以及总结。

目录

一)课程设计的目的 二)课程设计的要求 三)流程图 四)原理图 五)程序语言 六)

总结 七)参考资料

设计题目:试设计一个闪烁跑马灯控制器,该控制器可以控制8个灯顺序亮灭。 当单片机上电后,8个灯依次从左向右亮,并且每个灯亮的时间为1秒钟。这时,如果按钮K1按下,则灯亮的顺序是从右向左,同样,每个灯亮的时间是1秒钟。这时,如果按下按钮K2,则此时,4个灯亮4个灯灭,延迟4秒钟以后,又开始从左向右点亮。最后,若按下按钮K3,则全部灯亮。此时若想再次点亮灯,必须

重新上电。 题目分析:

该题目要求控制8盏灯的亮灭,可使用单片机的P1.0到P1.8口来控制。按钮K1用P3.4口,K2用P3.2口,及外部中断0,K3用P3.3口,及外部中断1,分别来实现。单片机使用AT89C52,电源使用5V标准电源。顺序亮灭使用外部中断

源构成循环控制语句。

一、课程设计的目的

课程设计是本专业集中实践环节的主要内容之一。训练正确地应用单片机,培养解决工业控制、工业检测等领域具体问题的能力。学生通过所做课题,熟悉单片机应用系统开发研制的过程,软硬件设计的工作方法、内容及步骤,对学生进行基本技能训练。例如组成系统、编程、调试、绘图等。使学生理论联系实际,提高动手能力和分析问题、解决问题的能力。

通过本课程设计,主要达到以下目的:

1.使学生增进对单片机的感性认识,加深对单片机理论方面的理解。2.使学生掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O

口、串行口通讯等。

3.使学生了解和掌握单片机应用系统的软/硬件设计过程、方法及实现,为以后设计和实现单片机应用系统打下良好基础。

二、课程设计的要求

1.学生需认真阅读课程设计任务书,熟悉有关设计资料及参考资料,熟悉各种设计规范的有关内容,认真完成任务书规定的设计内容。

2.课程设计的成果为“课程设计报告”。课程设计报告内容要正确,概念要清楚,完成任务书所规定的内容,附有原理图及程序流程图,程序清单,文字要通顺,书写要工整,设计图纸必须符合规范。

3.课程设计报告应在2000字以上(含相关图纸和计划书等),用A4纸打印。

三、流程图 主程序流程图

原理图说明:该设计选用一块AT89C52型单片机,使用其P0口,P3口的部 分。P0口作为发光二极管的控制信号输出端,P3.0作为按钮K1的信号输入口,P3.2为按钮K2外部中断0信息输入口,P3.3作为K3外部中断0的信息输入口。单片机晶振频率为12MHz,每个机器周期1µs。电源使用5v直流电。

五、程序语言:

ORG 0000H :程序入口地址 AJMP MAIN ORG 0003H :外部中断0入口地址 AJMP ZD0 ORG 0013H :外部中断1入口地址 AJMP ZD1

ORG 0100H :主程序入口地址

MAIN: MOV SP,#40H :初始化,开外部中断1,外部中断0,以及总中断,并

且将外部中断1设为最高优先级,并且是脉冲触发方式。

MOV IE,#85H

MOV IP,#04H MOV TCON,#01H YYY: MOV A,#7FH :将A寄存器中存入7FH.

SETB P3.4 JB P3.4,PPP :判断按键K1是否按下,如果没有按下则跳转到PPP,灯从

左到右依次点亮。 CLR Cy :进位位清零 MOV A,#0FFH :A中存入FFH.MMM: RLC A :A中数据带进位位左移一位。

MOV P2,A :将A中数据送到P0口,灯亮且延迟1秒。 ACALL DELAY SETB P3.4 JB P3.4,PPP :判断K1是否按下,若按下则跳转到MMM,没有则跳转

到PPP,灯依次从左向右亮,且没亮一次,延迟1秒

SJMP MMM PPP: MOV P2,A A中数据转到P0口,点亮灯。

RR A :A中数据右移一位 ACALL DELAY :调用一秒延迟

SETB P3.4 JNB P3.4,YYY :判断K1按键是否按下,按下则跳转到YYY,没有则跳

转到PPP SJMP PPP ZD0: MOV A,#0FFH :外部中断0,将FFH送入A寄存器中,再送到P0口,

灯全灭,且延迟4秒钟,后再循环亮。

MOV P2,A ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY

AJMP MAIN

RETI :中断程序返回

ZD1: MOV A,#0FFH :A寄存器中存入FFH,再送到P0口,灯灭, MOV P0,A AJMP $ :本地一直循环 RETI :中断返回

DELAY: MOV R5,#25 :延迟4秒子程序 D1: MOV R6,#200 D2: MOV R7,#100 DJNZ R7,$ DJNZ R6,D2 DJNZ

R5,D1

RET :子程序返回 END :程序结束

调试说明:打开c51软件,新建工程gao,新建文件,输入以上程序,以.asm 格式保存。在gao工程中添加输入好的程序。点击编译,对有错误地方修改。选择生成HEX文件,再编译,此时已经生成HEX文件。打开AVR烧录软件,将生成好的HEX文件下载到单片机机中,观察单片机的对应发光二极管的状态,看是否与设计预想一致。若不一致,在C51里修改相应地方,再重新编译下载,

直至与预想一致。

六、总结

单片机课程设计是一个很好的实践环节,它将我们所学的课堂知识与实践生活结合,使我们所学知识得到加固。以前的课程都是理论知识的学习,感觉有些抽象,学习起来也比较乏味,没有主观的学习热情。这次课程设计的主要收获就是在运用知识的过程中让我对单片机产生了浓厚的兴趣,课后自己还亲手制作单片机,从而对单片机的结构更加了解,将硬件与软件知识完美的结合。从而增加了我对知识的渴望,这也许就是主观的学习积极性。

老师的指导也是是很重要的,众所周知,实践中,经验占据重要地位。老师的经验和知识都要多于我们。通过老师的指导,使我们的试验过程更加轻松,受益匪浅。 总之,这次课设不仅使我了解了单片机的开发流程,更加地理解运用了知识,而且更重要的是收获了知识以外的学问,这才是我受用一生的。

七、

参考资料:

牛昱光主编《单片机原理与接口技术》电子工业出版社 51单片机实验指导书 胡汉才主编《单片机原理及其应用》清华大学出版社出版 何立民主编《单片机应用文集》北京航空航天大学出版社出版 天津锐志单片机学习资料

推荐第8篇:单片机课程设计

2014单片机课程设计

课程设计基本格式:

一。摘要(300字)

基于何种原理,采用什么方法,达到什么目的,得到什么结果。

二。正文(有图有文):

1.方案论证与比较

系统设计(或设计原理)与理论分析(或测控)方法和计算。

①总体设计、总体框图,有框图中每一个模块的功能说明。

②电路设计及参数计算(主要针对核心电路而言),有电路图、电路说明、主要参数计算。

③软件设计,有流程图及叙述、对其中核心算法进行说明。

三。调试方法与数据

①测试原理(方法),有硬件设计、软件调试、联调。

②使用仪器和工具(型号)。

③测试结果(采用多张表格或图形表示)。

四。结论

用结果说明设计作品成功之处,对某些问题进行分析,展望。

附录硬件线路图和PCB印刷电路板图及程序清单

题目一步进电机控制器设计

设计要求

利用51单片机控制步进电机的旋转方向和旋转速度,各控制功能通过按键实现:

(1)通过正传和反转控制按键,控制步进电机正向和反向旋转。

(2)通过加速和减速控制按键,在一定范围内控制步进电机的旋转速度。

(3)在不切断电源的情况下,通过停止按键可以停止步进电动机。

(4)步进电机的驱动电路自行设计,不能采用现成的驱动芯片和驱动器。

(5)键输入按中断方式进行处理。

题目二直流电机控制器设计

设计要求

利用51单片机控制直流电机的旋转方向和旋转速度,各控制功能通过按键实现:

(1)通过正传和反转控制按键,控制直流电机正向和反向旋转。

(2)通过加速和减速控制按键,在一定范围内控制直流电机的旋转速度。

(3)在不切断电源的情况下,通过停止按键可以停止直流电机。

(4)直流电机的驱动电路自行设计,不能采用现成的驱动芯片和驱动器。

(5)键输入按中断方式进行处理。

题目三基于DS18B20的数字温度计设计

设计要求

以51单片机为核心,设计一数字式温度计:

(1)采用数字式温度传感器DS18B20为温度检测元件,单点检测。

(2)温度采用三位数字显示,两位整数,一位小数。

(3)具有按键设置温度上限和下限的功能。

(4)实测温度超过上下限时,采用声光报警。

PLC课程设计题目

题目一基于PLC的门禁系统设计

一.平衡式自动感应门机组组成部分

平移式自动感应门机组由以下部件组成:

主控制器:它是自动感应门的指挥中心,通过内部编有指令程序的大规模集成块,发出相应指令,指挥马达或电锁类系统工作;同时人们通过主控器调节门扇开启速度、开启幅度等参数。

感应探测器:负责采集外部信号,如同人们的眼睛,当有移动的物体进入它的工作范围时,它就给主控制器一个脉冲信号。

动力马达:提供开门与关门的主动力,控制自动感应门门扇加速与减速运行。

自动感应门扇行进轨道:就像火车的铁轨,约束门扇的吊具走轮系统,使其按特定方向行进。

门扇吊具走轮系统:用于吊挂活动门扇,同时在动力牵引下带动门扇运行。

同步皮带(有的厂家使用三角皮带):用于传输马达所产动力,牵引自动感应门扇吊具走轮系统。

下部导向系统:是自动感应门门扇下部的导向与定位装置,防止门扇在运行时出现前后门体摆动。

二.工作流程

当自动感应门门扇要完成一次开门与关门,感应探测器探测到有人进入时,将脉冲信号传给主控器判断后通知马达运行,同时监控马达转数,以便通知马达在一定时候加力和进入慢行运行。马达得到一定运行电流后做正向运行,将动力传给同步带,再由同步带将动力传给吊具系统使自动感应门扇开启;自动感应门扇开启后由控制器作出判断,若需关自动感应门,通知马达作反向运动,关闭自动感应门。

三.系统设计的主要内容

(一)拟定控制系统设计的技术条件。技术条件一般以设计任务书的形式来确定,它是整个设计的依据;

(二)选择电气传动形式和电动机、电磁阀等执行机构;

(三)选定PLC的型号;

(四)编制PLC的输)k/输出分配表或绘制输入/输出端子接线图;

(五)根据系统设计的要求编写软件规格说明书,然后再用相应的编程语言。

题目二双恒压供水控制系统设计

一.工作流程

PLC控制双恒压供水系统主要有变频器、可编程控制器、压力变送器和现场的水泵机组一起组成一个完整的闭环调节系统,有1个贮水池,3台水泵,采用部分流量调节方法,即3台水泵中只有1台水泵在变频器控制下作变速运行,其余水泵停止。PLC根据管网压力自动控制各个水泵之间切换,并根据压力检测值和给定值之间偏差进行PID运算,输出给变频器控制其输出频率,调节流量,使供水管网压力恒定。各水泵切换遵循先起先停、先

停先起原则。

PLC控制双恒压供水系统主要有变频器、可编程控制器、压力变送器和现场的水泵机组一起组成一个完整的闭环调节系统,该系统的控制工艺流程图如下图所示。

双恒压供水控制系统工艺流程图

从图中可看出,系统可分为:执行机构、信号检测机构、控制机构三大部分,具体为: (l) 执行机构:执行机构是由三台水泵组成,它们用于将水供入用户管网三台水泵可以进行变频调整,用以根据用水量的变化改变电机的转速,以维持管网的水压恒定。

(2) 信号检测机构:在系统控制过程中,需要检测的信号包括管网水压信号、水池水位信号和报警信号。管网水压信号反映的是用户管网/消防管网的水压值,它是双恒压供水控制的主要反馈信号。此信号是模拟信号,读入PLC时,需进行A/D转换。另外为加强系统的可靠性,还需对供水的上限压力和下限压力用电接点压力表进行检测,检测结果可以送给PLC,作为数字量输入;水池水位信号反映水泵的进水水源是否充足。信号有效时,控制系统要对系统实施保护控制,以防止水泵空抽而损坏电机和水泵。此信号来自安装于水池中的液位传感器;报警信号反映系统是否正常运行,水泵电机是否过载、变频器是否有异常,该信号为开关量信号。

(3) 控制机构:供水控制系统一般安装在供水控制柜中,包括可编程控制器、变频器和电控设备三个部分。可编程控制器是整个变频恒压供水控制系统的核心。供水控制器直接对系统中的压力、液位、报警信号进行采集,对来自通讯接口的数据信息进行分析、实施控制算法,得出对执行机构的控制方案,通过变频调速器和接触器对执行机构(即水泵机组)进行控制;变频器是对水泵进行转速控制的单元,其跟踪供水控制器送来的控制信号改变水泵的运行频率,完成对水泵的转速控制。

二.系统设计的主要内容

(一)根据以上控制要求,进行系统总体控制方案设计。

(二)硬件设备选型、PLC选型,估算所需I/O点数,进行I/O模块选型,

(三)绘制系统硬件连接图:包括系统硬件配置图、I/O连接图,分配I/O点数,

(四)列出I/O分配表,熟练使用相关软件,设计梯形图控制程序,

(五)编写设计说明书。

题目三四层电梯控制系统设计

推荐第9篇:单片机课程设计

单片机课程设计

实验报告

——简易温度测量仪

专业班级:电科3班

姓名:李纯

学号:2220112515

摘要

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

温度检测仪是工业生产中应用比较广泛的一种检测装置。温度是生产工艺过程中最基本、最重要的控制参数之一,关系到生产条件的建立,产品的产量、质量、效率,以及生产设备的寿命与安全等。温度是物体冷热程度的表现参数。温度测量仪的由感温元件帮助完成检测。

本次课程设计制作一个基于单片机的简易温度测量仪,设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。

设计任务和要求

设计目标和实现方法

为了满足简易温度测量仪的基本要求,可以进行低精度,一定范围内的温度测量,本次设计基于51单片机,温度传感器DS18B20并用液晶屏显示数据。

整体方案论述

根据简单温度测量仪的功能和本方案中的设计指标要求,本系统选用了MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实

现对简单温度测量仪的设计。具体设计考虑如下:

由于要设计的是简单的温度测量仪,可以进行低精度,一定范围内温度的测量,对结果的精确程度与灵敏度要求不苛刻,故本次设计基于MCS 51 单片机为主控机,并用液晶屏显示数据即可。

实验资料

MCS 51 单片机

在HMOS技术大发展的背景下,Intel公司在MCS-48系列的基础上,于1980年推出了8位MCS-51系列单片机。它与以前的机型相比,功能增强了许多,就其指令和运行速度而言,超过了INTEL8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。较早的MCS-51典型时钟为12MHz,而目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高,现在已有400MHz的单片机问世。51系列单片机有8位CPU,片内带振荡器频率范围为1.2MHz-12MHz, 128B的数据存储器,4KB的程序存储器。程序存储器的寻址空间为64KB,片外数据存储器的寻址空间为64KB,有128个用户位寻址空间,21个字节特殊功能寄存器,4个8位的I/O并行接口:P0、P

1、P

2、P3,两个16位定时、计数器,两个优先级别的五个中断源,还有一个全双工的串行I/O接口,可多机通信。片内采用单总线结构有较强的位处理能力。

DS18B20数字温度传感器

DS18B20数字温度传感器接线方便,封装成后可应用于多种场

合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。其独特的单线接口方式使DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

液晶显示器

在电场的作用下,液晶分子的排列会产生变化,从而影响到它的光学性质,这种现象叫做电光效应。利用液晶的电光效应,英国科学家在上世纪制造了第一块液晶显示器即LCD。今天的液晶显示器中广泛采用的是定线状液晶,如果我们微观去看它,会发现它特象棉花棒。与传统的CRT相比,LCD不但体积小,厚度薄(14.1英寸的整机厚度可做到只有5厘米),重量轻、耗能少(1到10 微瓦/平方厘米)、工作电压低(1.5到6V)且无辐射,无闪烁并能直接与CMOS集成电路匹配。由于优点众多,LCD从1998年开始进入台式机应用领域。

实际制作与调试

原理图

MCS-51 单片机

温度传感器

元器件清单

最小系统板 1块 温度传感器DS18B20 1各 液晶显示器 1个 电阻 18KΩ 1个 滑动变阻器 0-2KΩ 1个 面包板 1块 导线若干

仿真图

Proteus ISIS是一种操作简便而又功能强大的原理图编辑工具,它运行于Windows操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件实现了单片机仿真和SPICE电路仿真的结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真等功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。它支持主流单片机系统的仿真。目前支持的单片机类型有68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。它还具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的电路设计和仿真软件,功能极其强大。本次课程设计基于该软件绘制简易温度测量仪原理图,并进行仿真。得到结果如下

程序流程图

系统程序流程图

温度转换与显示子程序流程图

程序清单

#include #define uint unsigned int #define uchar unsigned char uchar code table[]=\"now temperature:\"; sbit ds = P2^2; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit dula=P2^6; sbit wela=P2^7;

void belay(uint i)//274us { unsigned char j, k; for(j = i; j >0; j--) { for(k = 125; k >0; k--); } } void dsWait() { unsigned int i;

while(ds); while(~ds); //检测到应答脉冲 i = 4; while(i>0) i--; } void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); } void write_com(uchar com) //写指令 本次单片机只用写不用读 { lcdrs=0; //写指令的时候rs=0 P0=com; delay(5); lcden=1; delay(5); lcden=0; } void writeData(uchar date) //写数字

要保证 LCDEN为1

{ lcdrs=1; //写数据的时候rs为1 P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() //初始化

{

dula=0; // 关闭数码管

wela=0; lcden=0; write_com(0x38); //显示设置

write_com(0x0f); //00001DCB(D=1开显示,C=1显示光标,B=1光标闪烁) write_com(0x06); // 00001NS(N=1当读或写一个字符后地址指针加1,且光标加一,S=1当写一个字符,整屏显示左移) write_com(0x01); //清屏

} //初始化DS18B20

//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit() { //一定要使用unsigned int型, 一个i++指令的时间, 作为与DS18B20通信的小时间间隔

//以下都是一样使用unsigned int型 unsigned int i; ds = 0; i = 100; while(i>0) i--; ds = 1; i = 4; while(i>0) i--; }

//向DS18B20读取一位数据

//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平, //之后DS18B20则会输出持续一段时间的一位数据 bit readBit() { unsigned int i; bit b;

ds = 0; i++; //3.25us ds = 1; i++; i++; b = ds; i = 8; while(i>0) i--; return b; }

//读取一字节数据, 通过调用readBit()来实现 unsigned char readByte() { unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i>1); } return dat;

} //向DS18B20写入一字节数据 void writeByte(unsigned char dat) { unsigned int i; unsigned char j; bit b; for(j = 0; j >= 1; //写\"1\", 让低电平持续2个小延时, 高电平持续8个小延时 if(b) { ds = 0; i++; i++; ds = 1; i = 8; while(i>0) i--; } else //写\"0\", 让低电平持续8个小延时, 高电平持续2个小延时 {

ds = 0; i = 8; while(i>0) i--; ds = 1; i++; i++; } } } //向DS18B20发送温度转换命令 void sendChangeCmd() { dsInit(); //初始化DS18B20 // belay(1); //延时1ms dsWait() ; writeByte(0xcc); //写入跳过序列号命令字 writeByte(0x44); //写入温度转换命令字 } //向DS18B20发送读取数据命令 void sendReadCmd() { dsInit(); // belay(1); dsWait() ; writeByte(0xcc); //写入跳过序列号命令字

writeByte(0xbe); //写入读取数据令字 }

//获取当前温度值

unsigned int getTmpValue() { unsigned int value; //存放温度数值 float t; unsigned char low, high; sendReadCmd(); //连续读取两个字节数据 low = readByte(); high = readByte(); //将高低两个字节合成一个整形变量 value = (high

//DS18B20的精确度为0.0625度, 即读回数据的最低位代表0.0625度

t = value * 0.0625 ; //将它放大10倍, 使显示时可显示小数点后一位, 并对小数点后第二2进行4舍5入

//如t=11.0625, 进行计数后, 得到value = 111, 即11.1 度

value = t * 10 + 0.5; return value; }

//显示当前温度值, 精确到小数点后一位 void display(unsigned int v) { uchar tempArray[4]; tempArray[0]=(v/100)+48; tempArray[1]=((v%100)/10)+48; tempArray[2]=\'.\';

tempArray[3]=(v%10)+48; write_com(0x80+0x40); writeData(tempArray[0]); writeData(tempArray[1]); writeData(tempArray[2]); writeData(tempArray[3]); writeData(0xdf); writeData(\'c\'); }

void main() {

int num; unsigned int value; value=0; // value++; init(); write_com(0x80);//写在第一行 for(num=0;num

P1=0xff; while(1) { //启动温度转换 sendChangeCmd(); value = getTmpValue(); //显示3次 if(value>320)

{

belay(5) ;

if(value>320)

P1=0x00;

}

else

{

belay(5) ;

if(value

P1=0xff;

} display(value); } }

成品图

实验数据记录

实验结果分析

根据简单温度测量仪的最终结果,本次设计基本达到最初的方案中的设计指标要求,实现了对温度的低精度,一定范围内的测量。

课程设计总结

本次课程设计,我们组选择的是使用基于单片机设计一个简易温度测量仪。确定这个课题后,通过图书馆,网上查阅资料,与小组内的成员之间的交流,我们对课题有了一个比较充分的了解。

第一次上课时候,由于之前大家都把资料准备好了,就直接开始仿真。刚刚开始仿真时,大家根据资料将仿真图弄好,且把程序导入,但是仿真结果总是不对,经过细心排查后发现是程序少了一条,改正后,就出结果了。过程中也有对软件的不熟悉,使得仿真进行的不是很顺利,好在最后正确出现想要的结果了。

之后,开始连接面包板,这个课题需要连接的元器件较少,连线这方面也很顺利。但是结果就是一直出不来,以为是线路连错,反反复复检查错误不下余十遍后发现还是不能出来结果。由于我们班是最后一个做课设的,安排在考试周,时间也很紧张,大家也开始着急了。最后没有办法,组员觉得是星研软件的问题,于是将面包板带回宿舍,因为他们有单片机学习板,准备将程序导入到芯片内部进行尝试。果不其然,组员在宿舍将程序导入到芯片后脱离星研软件后,立马出来了实验结果。

在这次单片机课程设计中,我们组每个人都将自己的任务完成

的很好,相互合作使得整个课设过程终于顺利的完成。虽然过程中因为总是出不来实验结果等各种原因使整个过程感觉困难重重,但是还是很好的解决了。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正学以致用,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。

推荐第10篇:单片机课程设计

单片机课程设计

课题: 简易电子琴设计

院:

电气与信息工程学院 专

业:

电子信息工程 姓

名:

李琳琳 学

号:

093411106

指导老师:

田巍

河南城建学院

2014年

01 月

01 日

第11篇:单片机课程设计

单片机课程设计

---------

机电汽车工程学院

同组成员:(机091-1) 姓名(学号):

第12篇:单片机课程设计

单片机课程设计_报警器 报警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV R1,A LCALL DISP2 GWPD:CJNE R0,#00H,GWJ1 CJNE R1,#00H,SWJ1 LCALL DISP1 LCALL DISP2 LCALL BJ SWJ1: LCALL YSLMIN MOV R0,#09H LCALL DISP1 DEC R1 LCALL DISP2 GWJ1: LCALL YSLMIN DEC R0 LCALL DISP1 LJMP GWPD DISP1:MOV A,R0 MOVC A,@A+DPTR MOV P2,A RET DISP2:MOV A,R1 MOVC A,@A+DPTR MOV P0,A RET YSLMIN:MOV R7,#60 MOV R6,#10 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#03H SETB TR0 LOOP:JBC TF0,DONE SJMP LOOP DONE:MOV TL0,#0B0H MOV TH0,#03CH CJNE R7,#00H,SIX MOV R7,#60 SIX:DJNZ R6,LOOP DJNZ R7,LOOP RET BJ:MOV TMOD,#11H MOV TH1,0FH MOV TL1,0CH SETB TR1 LOOP1:JBC TF1,LOOP2 SJMP LOOP1 LOOP2:MOV TH1,#0FFH MOV TL1,#0C0H CPL P3.1 SJMP LOOP1 RET TAB:DB 0C0H,0F9H,0A4H DB 0B0H,099H,092H DB 082H,0F8H,080H DB 090H END

第13篇:单片机课程设计

设计题目: 单片机课程设计

学生姓名:

院: 电气与信息工程学院

级: 电子111班 指导教师:

日 期: 2014年9月20日

一、课程设计目的:

了解电子元器件的功能与原理,掌握单片机的结构和原理,学会使用单片机应用开发技术的相关软件如 keill、STC_ISP_V394等,能够使用c语言的语言编程简单的功能。

二、设计的思想:

利用所提供的单片机和开发板的原理图用keill软件编程程序以实现一些功能。然后用STC_ISP_V394 .exe软件将编译完全正确的程序生成的hxe文件下载到开发板上,再调试编译的程序能否实现其所设计的功能。

1、对蜂鸣器的了解:

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,它由振荡器、电磁线圈、磁铁、振动膜片及外壳组成,接通电源后,振荡器产生的音频信号由电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。

2、设计:

我们所使用的开发板实物图如图一,单片机对右上角蜂鸣器的控制是加入三极管接入vcc,单片机的第22引脚和负极上,以此来控制蜂鸣器工作。单片机我们选择STC89C52RC+1602液晶来实现对蜂鸣器的控制及显示所需要的信息。

图一 调试说明:

首先用Keil软件创建一个工程,将程序源代码输入并编译生成单片可执行的.hex文件。 其次,打开单片机实践板的电源,接好串口线,用STC-ISP烧录软件,将.hex文件烧录入单片机中。程序下载完毕后,单片机会自动执行程序功能。最后,观察程序功能的执行情况,看是否达到了设计要求。

如果单片机实践板硬件电路的执行结果与设计结果一致,则说明设计过程及流程没有问题,完全符合设计要求。否则,先检查单片机实践板的硬件电路是否完好,是否有断点、漏焊、虚焊以及元器件是否完好等情况,排除故障重新连接后重新进行调试。如果仍然无法正

常实现,则说明程序编写有误,需要认真检查程序流程,然后经过反复的修改与调试排除故障,实现设计要求的各项功能。 编译和烧写该程序到单片机:

(1)用Keil编译上面的代码,并设置产生16进制代码文件*.hex.(2 )用专用下载线,连接好实验板和电脑串口(DB9) (2)运行hex文件烧写软件STC_ISP_V394.exe

选单片机的型号,并打开编译产生好的hex文件

点击下载,给开发板上电。

3、实现的功能:使用单片机将歌曲《八月桂花》的调子通过蜂鸣器播放出来,用1602液晶将想要表达的信息有步骤地显示在液晶显示屏上,并且调子与显示内容可以任意通过修改的程序烧录到单片机内,实现设计产品的使用性与灵活性。

三、实验程序:

/************************************************************************

[主题] C51音乐程序《八月桂花》

[功能]

通过单片机演奏音乐,显示一些内容

/**********************************************************************/

#include

#include

//本例采用89C52, 晶振为11.0592MHZ

//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.

//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;

//所以拿出谱子, 试探编吧!

unsigned char i=0; sbit Beep = P2^7 ;

unsigned char p,m;

//m为频率常数变量

unsigned char n=0; //n为节拍常数变量

unsigned char code music_tab[] ={

0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,

0x20, 0x40, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x10,

0x1C, 0x10, 0x18 , 0x40,

0x1C, 0x20, 0x20 , 0x20,

0x1C, 0x20, 0x18 , 0x20,

0x20, 0x80, 0xFF , 0x20,

0x30, 0x1C, 0x10 , 0x18,

0x20, 0x15, 0x20 , 0x1C,

0x20, 0x20, 0x20 , 0x26,

0x40, 0x20, 0x20 , 0x2B,

0x20, 0x26, 0x20 , 0x20,

0x20, 0x30, 0x80 , 0xFF,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x20, 0x1C , 0x10,

0x18, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x80,

0x20, 0x30, 0x1C , 0x10,

0x20, 0x10, 0x1C , 0x10,

0x20, 0x20, 0x26 , 0x20,

0x2B, 0x20, 0x30 , 0x20,

0x2B, 0x40, 0x20 , 0x15,

0x1F, 0x05, 0x20 , 0x10,

0x1C, 0x10, 0x20 , 0x20,

0x26, 0x20, 0x2B , 0x20,

0x30, 0x20, 0x2B , 0x40,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x20, 0x15 , 0x20,

0x1C, 0x20, 0x20 , 0x20,

0x26, 0x40, 0x20 , 0x20,

0x2B, 0x20, 0x26 , 0x20,

0x20, 0x20, 0x30 , 0x30,

0x20, 0x30, 0x1C , 0x10,

0x18, 0x40, 0x1C , 0x20,

0x20, 0x20, 0x26 , 0x40,

0x13, 0x60, 0x18 , 0x20,

0x15, 0x40, 0x13 , 0x40,

0x18, 0x80, 0x00

};

void int0() interrupt 1

//采用中断0 控制节拍

{ TH0=0xd8;

TL0=0xef;

n--;

}

void delay (unsigned char m)

//控制频率延时

{

unsigned i=3*m;

while(--i);

}

void delayms(unsigned char a) //豪秒延时子程序

{

while(--a);

//采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!

}

typedef unsigned char BYTE; typedef bit BOOL;

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1; sbit LCD_EP = P2^2;

BYTE code dis1[] = {\"

WLCOME TO

\"}; BYTE code dis2[] = {\"

DanPianJi \"}; BYTE code dis3[] = {\"

111iZnaiD

\"}; BYTE code dis4[] = {\"

eiXeiX \"};

delays(int ms) {

// 延时子程序 int i; while(ms--) {

for(i = 0; i

{

_nop_();

_nop_();

_nop_();

_nop_();

} } }

BOOL lcd_bz() {

// 测试LCD忙碌状态 BOOL result; LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); LCD_EP = 0; return result; }

lcd_wcmd(BYTE cmd) {

while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0;

}

lcd_pos(BYTE pos) {

lcd_wcmd(pos | 0x80);

// 写入指令数据到LCD //设定显示位置

}

lcd_wdat(BYTE dat)

{

//写入字符显示数据到LCD while(lcd_bz()); LCD_RS = 1; LCD_RW = 0; LCD_EP = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; }

lcd_init() {

lcd_wcmd(0x38);

delays(1); lcd_wcmd(0x0c);

delays(1); lcd_wcmd(0x06);

delays(1); lcd_wcmd(0x01);

delays(1); }

void main()

{

BYTE j;

lcd_init();

delays(10);

//LCD初始化设定

//16*2显示,5*7点阵,8位数据//显示开,关光标 //移动光标 //清除LCD的显示内容

// 初始化LCD

lcd_wcmd(0x06);

//向右移动光标

lcd_pos(0);

//设置显示位置为第一行的第1个字符

j = 0;

while(dis1[ j ] != \'\\0\')

{

//显示字符\"Welcome TO\"

lcd_wdat(dis1[ j ]);

j++;

delays(30);

//控制两字之间显示速度

}

lcd_pos(0x40);

j = 0;

while(dis2[ j ] != \'\\0\')

{

lcd_wdat(dis2[ j ]);

j++;

delays(30);

}

delays(800);

lcd_wcmd(0x01);

delays(1);

lcd_wcmd(0x04);

lcd_pos(15);

j = 0;

while(dis3[ j ] != \'\\0\')

{

lcd_wdat(dis3[ j ]);

j++;

delays(30);

}

lcd_pos(0x4F);

j= 0;

while(dis4[ j ] != \'\\0\')

{

lcd_wdat(dis4[ j ]);

j++;

delays(30);

}

delays(800);

//设置显示位置为第二行第1个字符 //显示字符\" DanPianJi \"

//控制两字之间显示速度

//控制停留时间

//清除LCD的显示内容

//向左移动光标

//设置显示位置为第一行的第16个字符

//显示字符\"DianZi111\"

//控制两字之间显示速度

//设置显示位置为第二行的第16个字符//显示字符\" XieXie \"

//控制两字之间显示速度

//控制停留时间

TMOD&=0x0f;

TMOD|=0x01;

TH0=0xd8;TL0=0xef;

IE=0x82;

play:

while(1)

{

a: p=music_tab[i];

if(p==0x00)

{ i=0, delayms(1000); goto play;}

//如果碰到结束符,延时1秒,回到开始再来一遍

else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符

else

{m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数

TR0=1;

//开定时器1

while(n!=0) Beep=~Beep,delay(m);

//等待节拍完成, 通过P1口输出音频(可多声道哦!)

TR0=0;

//关定时器1

}

}

四、电路图的protue仿真

五、单片机课程设计心得体会:

这个学期的单片机课已经早早的上完了,但是理论纯属理论,没有与实践的结合总让我们学的不踏实,感觉没有达到学以致用的效果。所庆幸的是在课程介绍考试完之后,老师给我们安排了这次单片机课程设计,给了我们学以致用的做好的实践

关于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。

第14篇:单片机课程设计

分类号

编号

烟 台 大 学

课 程 设 计

基于单片机8051的密码锁控制

系:

机电学院

业:

机械设计制造及其自动化

名:

号:

2010年

7 月 6 日

0

目录

第一章:引言·················2 第二章:方案设计···············3

1、方案论证与比较 ············3

2、单片机8051·············· 4 第三章:电路原理分析与设计··········7

1、开锁机构 ···············7

2、按键电路及LCD设计 ··········7

3、掉电存储单元设计 ···········14

4、密码锁电源电路设计 ··········14

5、设计总框图 ··············16

6、整体程序设计和程序流程图 ·······16

第四章:程序设计 ··············17

第五章:调试、测试分析及结果 ········35 第六章:小结 ················35 参考文献 ·················36

第一章、引言

目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着cmos化、低功耗、大容量、高性能、低价格和外围电路内装化等方向发展。下面是单片机的 主要发展方向

今年,由于chmos技术的进步,大大的促进了单片机的cmos化。Cmos除了低功耗外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。Cmos电路的特点是低功耗、大容量、高性能、低价格。采用双极型半导体工艺的ttl电路速度快、但功耗低和芯片面积大。

单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在可以用单片机通过软件方法来实现。这种软件代替硬件的控制技术也称为传统控制的一次革命

单片机自二十世纪七十年代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快。由于其的优点多而突出,所以其的应用领域极广,几乎到了无孔不入的地步。在我国广泛的应用于工业自动化控制、自动检测、智能仪表、智能家用电器、航空航天系统和国防军事、尖端武器等各个方面。可以采用软硬件结合的办法提高系统的性能的控制技术为微控技术。

LCD 液晶显示器是 Liquid Crystal Display 的简称,是20世纪70年代初发展起来的一种液晶显示器。随着技术的发展其的分辨率、屏幕发光颜色等进入批量化合实用化。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。

第二章:设计方案

本次设计我组采用液晶显示lcd,按键采用4*4键盘矩阵、8051单片机。本系统由单片机系统、矩阵键盘、lcd显示和报警系统。系统可以完成开锁、密码错误报警、修改用户密码、管理员解密基本的密码锁功能。除上述功能,还应具有掉电存储,声光提示等功能。依据实际情况还可以添加遥控功能。本系统成本低廉,功能可靠实用。

设计本课题时构思了两种方案:一种是用以8051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。

1、方案论证与比较

方案一:采用数字电路,其原理方框图如图1

图2-1 数字密码锁电路方案

采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若输入密码错误报警防止他人的非法操作。 电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路。 方案二:采用一种是用以8051为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声 3

光提示甚至添加遥控控制功能。其原理如图1-2所示。

图2-2单片机控制方案

通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。

2、单片机8051 1>、芯片8051有40条引脚,共分为端口线、电源线和控制线三类 ·4并行I/O端口,每个端口有8条端口线,用于传送数据、地址。 ·可编程串行通道

·5个中断源

·低功耗的闲置和掉电方式 ·两个16位定时器、计数器 ·片内振荡器和时钟脉冲 ·4K内部RoM ·128内部RaM

2>、管脚说明

1)、、主电源引脚VCC和VSS VCC——(40脚)接+5V电压; VSS——(20脚)接地。

2)、外接晶体引脚XTAL1和XTAL2 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。

XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。

3)、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP ①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。

②ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。

对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。

③PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。

④EA/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。

对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。

4)、输入/输出(I/O)引脚P0、P

1、P

2、P3(共32根)

①P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。

②P1口(1脚至8脚):是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动(吸收或输出电流)4个LS型的TTL负载。对80

52、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。

③P2口(21脚至28脚):是准双向8位I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动(吸收或输出电流)4个LS型的TTL负载。

④P3口(10脚至17脚):是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。 作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。

作为第二功能使用时,各引脚的定义如表所示 。

值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。 表 P3各口线的第二功能定义

口线 引脚 第二功能

P3.0 10 RXD(串行输入口) P3.1 11 TXD(串行输出口) P3.2 12 INT0(外部中断0) P3.3 13 INT1(外部中断1)

P3.4 14 T0(定时器0外部输入) P3.5 15 T1(定时器1外部输入) P3.6 16 WR(外部数据存储器写脉冲) P3.7 17 RD(外部数据存储器读脉冲)

2>、MCS-51单片机的片外总线结构

综合上面的描述可知,I/O口线都不能当作用户I/O口线。除8051/8751外真正可完全为用户使用的I/O口线只有P1口,以及部分作为第一功能使用时的P3口。如图,是MCS-51单片机按引脚功能分类的片外总线结构图。

由图我们可以看到,单片机的引脚除了电源、复位、时钟接入,用户I/O口外,其余管脚是为实现系统扩展而设置的。这些引脚构成MCS-51单片机片外三总线结构,即:

①地址总线(AB):地址总线宽为16位,因此,其外部存储器直接寻址为64K字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。

②数据总线(DB):数据总线宽度为8位,由P0提供。

③控制总线(CB):由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。 下表列出各个子系列的配制情况供读则参考。

芯片种类 片内存储器 中断源 定时/计数器 串行口 电源消耗(mA) 制造工艺 ROM/EPROM RAM 8051(8751,8031) 4K 128 5 2 同、异步方式,8位或10位可程序控制 125 HMOS 8052(8752,8032) 8K 256 6 3 同、异步方式,8位或10位可程序控制 100 HMOS 80C51(87C51,80C31) 4K 128 5 2 同、异步方式,8位或10位可程序控制 24 CHMOS 80C52(87C52,80C32) 8K 256 7 3 同、异步方式,8位或10位可程序控制 24 CHMOS 8044(8744,8344) 4K 192 5 2 S.L.U 200 HMOS 3>、控制部件

控制部件是单片机的神经中枢,它包括时钟电路、复位电路、指令寄存器、译码以及信息传送控制部件。它以主振频率为基准发出CPU的时序,对指令进行译码,然后发出各种控制信号,完成一系列定时控制的微操作,用来控制单片机各部分的运行。其中有一些控制信号线能简化应用系统外围控制逻辑,如控制地址锁存的地址锁存信号ALE,控制片外程序存储器运行的片内外存储器选择信号EA,以及片外取指信号PSEN

第二章、电路原理分析与设计

1、开锁机构

通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图2-1所示。密码锁开锁机构示意图如下图:

图3-1密码锁开锁机构示意图

当用户输入的密码正确输入的时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如下图3-2所示。

2、按键电路设计

1、

键盘应用4x4组成的0-9数字键及确认键和功能键。用LCD液晶显示器显示,当密码输入时直接显示,当密码输入完毕按下确认键时对输入的密码和设定的密码比较,若正确则开门,此处用led发光二极管做一秒种提示,同时发出“叮咚”声;若不正确,则发出“滴滴”报警声。

键盘设计采用行列式键盘,同事可以减少键盘与单片机接口时占用的I/O线的数目,在按键比较多的时候通常采用该方法。其原理图如图3-3

每一条行线与列线的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可以组成NXM个按键的键盘

在该行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。

当确认有按键按下后,下一步要识别哪个按键按下。对按键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是先反转法。应要求我们采用第一种方案。

逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。

1>、判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2>、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

按键的操作面板如图3-4所示,共计数字键10个,功能键6个,另外有指示灯一个、LCD液晶显示器一个和蜂鸣器一个。

图3-4按键操作面板示意图

10个数字键用来输入密码,另外六个功能键分别是:CLR\\E、EN、A、B、F

1、F2。其中CLR键的功能是当输入密码错误时,清除前面输入的数据,从新输入。EN键的功能是确认密码。A设置新密码B输入数字密码并检查。F1用作电铃键,F2用来关闭显示器。

2、LCD显示器的基本结构和原理

2>、LCD显示电路d3d2d19LED09LED19LED29LED39LED49bcpbcpbcpbcpbcpbcpYdYdYdYdYdYdPagPagPagPagPagPagDdDdDdDdDdDdfefefefefefeppppppabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdabcdefgdHEADER2vcc12345678123456781234567812345678123456781234567821012301230123012301230123345611113456111134561111345611113456111134561111HEADER1012345670123456701234567QQQQQQQQIC1QQQQQQQQIC2QQQQQQQQIC3012345670123456701234567QQQQQQQQIC4QQQQQQQQIC5QQQQQQQQ12KKKKKKLRLRLRLRLRLRABCMABCMABCMABCMABCMABCM128912891289128912891289C

IC6LED5

LCD模组是由控制器,驱动器,显示器三部份所组成,而目前市面上LCD的模组驱动/控制器都是由日制的HD44780控制器晶片(或是相容产品),因此外部接脚的功能也都相同,这个控制器的内部共有80 个位元组可供储存由外部送进来的资料,因此使用此款控器的LCD模组最多一次可显示80个字HD44780中储存显示资料的80个位元组,称之为Display DataRAM(DDRAM),DDRAM 的位址从00H~67H,共80个Byte。在LCD 上Show 出资料DDRAM 位址与可供显示位置的对应图

至于CPU 如何将资料送给LCD 显示的方法,是将欲显示的字元的ASCII 码写到LCD内部的DDRAM,LCD就会将这个自在其对应的位置显示出来.例如,若想在LCD 的左上角处(位址00h),显示’A’.就将ASCII码-41H,送到DDRAM 的00H 位址.例:

第二节 LCD 的接脚规格

虽然LCD 的接脚因制造厂商的不同而排列方式有所不同,不过都是编号由1 至14,的14 根接脚。

LCD 模组内只有2 个8 位元暂存器,称为指令暂存器(Instruction Register IR),和资料暂存器(Data Register, DR),他们都是8 位元暂存器,由RS 脚来选 用

指令暂存器IR 用来接收单片机送来的命令,例如清除显示,或功能设定等等…资料暂存器DR则用来接收单片机要写到DDRAM(共80Byte)或CGRAM(共64Byte)的资料缓冲区。当单片机写到DR 暂存器之后。LCD 内部的控制电路会将资料自动写到DD RAM或 CG RAM中,而位址是由LCD内部的位址计数器(Addre CounterAC)所指定。而单片机要读取资料时,需先将欲读取的位址放入IR 暂存器中,LCD 就会将其内容放入DR中,然后单片机就可以去读取DR 的资料。

图表、LCD 模组写入时序

图表、LCD 模组读出时序图

3、掉电存储单元设计

掉电存储单元的作用是在电源断开的时候,存储当前设计的单价信息。AT24C02是ATMEL公司的2KB字节的电源可檫除存储芯片,采用两线串行的总线和单片机通讯,电压 14

最低可为2.5V,额定电流为1mA,静态电流10UA,芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装。如图3-5示

图3-5 掉电存储单元电路原理图

图中R

8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据、地址)与单片机传送。

每当设定一次掉电,系统自动调用存储程序,将信息存储在芯片内;当系统重新上电时自动调用读存储器程序,将存储器中的信息读到缓存单元中,供主程序使用。

4、密码锁电源电路设计

为防止停电情况的发生,本电路备有UPS电源,它包含市电供电电路,停电检测电路,电子开关切换电路,蓄电池充电电路和蓄电池组成。电源电路图如图示

图3-6市供电电路

220V市电通过变压器降压成12V的交流电,再经整流桥式整流,7805稳压到5V送往电子切换电路,由于本电路功耗少,所以选10W的小型变压器。

由R

6、R

7、R

8、R9及IC14构成比较电压器,正常情况下,V+V-IC14输出高电平,由T

3、T4构成的达林顿管使继电器J开启,将其常开触点把蓄电池和电路相连,实现市电与蓄电池的切换,保证电子密码锁的正常工作。电路图如3-7所示

图3-7停电检测及电子开关切换电路

T

1、T2构成的蓄电池自动充电电路,其在充电池充满后自动停止充电,其中D1亮为正在充电,D2为工作指示。其电路图如图3-8所示

5、总框图设计

6、整体程序设计和程序流程图

1>、程序分为主程序和中断服务程序两个主要部分,主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。在循环中,首先判断有无按键按下,若有则判断是数字键还是功能键,根据按键的情况执行相应的功能。然后根据密码是否正确的判断情况,执行相应的操作。循环中最后需要显示的内容通过动态扫描子在液晶显示器上显示。中断服务程序需要实现待机计时5秒。

单片机采用MCS51系列的单片机8051作为主要主控制器,外围电路器件包括液晶显示驱动、蜂鸣器的驱动输出、独立式键盘和发光二极管的输出等。

2>、程序主要包括以下几个模块

1)、主程序模块——主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。

2)、键盘扫描及识别子程序——键盘采用查询方式,放于主程序中,当没有按键按下时,单片机循环主程序,当按键按下时便转向相应的子程序处理,处理结束后返回。

3)、掉电存储服务程序——当比较密码的时候,需要读取AT24C02程序,将存储于芯片内的数据读到RAM中,然后和输入密码相比较,当修改密码时需要把密码保存于AT24C02中。

4)、显示子程序——包括关闭状态显示子程序(dis-A)、开锁状态显示子程序(DIS-B)、密码输入及修改状态显示子程序(DIS-C)、密码输入错误报警状态子程序(DIS-D).

3、程序流程图

第四章、程序设计

1#include #define uint unsigned int #define uchar unsigned char void key_scan(); uchar count0,count1,count3,num,n=0,temp,a,j,count4; uchar mima[4];

//初始密码存储区 uchar tab_key[50];

//输入密码存储区 uchar code table[]={

0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; bit enterflag;

//确认键按下与否的标志 bit mimaflag;

//密码正确与否的标志 bit xiugaiflag;

//修改密码标志

bit enter1flag;

//修改密码确认键标志

sbit red=P3^7; sbit bell=P3^6; sbit rs=P2^0; sbit rw=P2^1; sbit lcden=P2^2; sbit alarm_out=P3^2; sbit scl=P3^4; sbit sda=P3^5; uchar code table1[]=\"input the paco\"; uchar code table2[]=\"de:

--------\"; uchar code table3[]=\"*\"; uchar code table4[]=\"right

(^_^)

\"; uchar code table5[]=\"error!!!!\"; uchar code table6[]=\"define the pac\"; uchar code table7[]=\"ode:

--------\"; uchar code table8[]=\"code

is

new\"; //******************************键盘消抖函数******************************* void delay1() { ;; } void delay2(uchar x) { uchar a,b; for(a=x;a>0;a--)

for(b=100;b>0;b--); }

void delay(uint z) { uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--); }

//****************************e^2room的初始化*******************************

void start() //开始信号 {

sda=1; delay1(); scl=1; delay1(); sda=0; delay1(); }

void stop()

//停止 { sda=0; delay1(); scl=1; delay1(); sda=1; delay1(); } //****************************应答信号************************************* void respond()

{ uchar i; scl=1; delay1(); while((sda==1)&&(i

temp=temp

//保持最高位,左移到进位CY

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1(); } scl=0; delay1(); sda=1;//总线释放

delay1(); } //*******************************读字节操作函数***************************** uchar read_byte() { uchar i,k; scl=0; delay1(); sda=1; delay1(); for(i=0;i

scl=1;

delay1();

k=(k

//或运算,放到最低位

scl=0;

delay1();

} return k; } //**********************************写地址函数****************************** void write_add(uchar addre,uchar date) { start(); write_byte(0xa0); respond(); write_byte(addre); respond(); write_byte(date); respond(); stop(); } //*******************************读地址函数************************************* uchar read_add(uchar addre) { uchar date; start();

21

write_byte(0xa0); respond(); write_byte(addre); respond(); start(); write_byte(0xa1); respond(); date=read_byte(); stop(); return date; } //****************************LCD1602的初始化******************************* void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_date(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; }

//***************************************密码比较函数******************************** bit mimacmp()

{ bit flag; uchar i; for(i=0;i

{

if(mima[i]==tab_key[i])

22

flag=1;

else

{

flag=0;

i=4;

}

} return(flag);

//返回flag }

////**********************************LCD显示函数开始************************************** void lcd_display() { uchar i=0; write_com(0x80+0x40+4); for(i=0;i

//****************************************键盘功能分配函数群开始**************************** //** 0 ** 1 **2 ** 3**

//** 4** 5** 6 **7 ** //**8** 9** 确认(en)

//**清除(clr)**修改密码键(a)

void key_manage1() { tab_key[n]=0; n++; if(xiugaiflag==1) { mima[count4]=0; count4++; } }

23 void key_manage2() {

tab_key[n]=1; n++; if(xiugaiflag==1) { mima[count4]=1; count4++; } }

void key_manage3() {

tab_key[n]=2; n++; if(xiugaiflag==1) { mima[count4]=2; count4++; } }

void key_manage4() { tab_key[n]=3; n++; if(xiugaiflag==1) { mima[count4]=3; count4++; } }

void key_manage5() { tab_key[n]=4; n++; if(xiugaiflag==1) { mima[count4]=4;

24 count4++; } }

void key_manage6() { tab_key[n]=5; n++; if(xiugaiflag==1) { mima[count4]=5; count4++; } } void key_manage7() { tab_key[n]=6; n++; if(xiugaiflag==1) { mima[count4]=6; count4++; } } void key_manage8() { tab_key[n]=7; n++; if(xiugaiflag==1) { mima[count4]=7; count4++; } }

void key_manage9() { tab_key[n]=8; n++; if(xiugaiflag==1) { mima[count4]=8;

25

count4++; } } void key_manage10() { tab_key[n]=9; n++; if(xiugaiflag==1) { mima[count4]=9; count4++; } } //**********************************确认键**************************************************************

void key_manage11() { enterflag=1;

//确认键按下

if(n==4)

//只有输入4个密码后按确认才做比较

mimaflag=mimacmp(); else

mimaflag=0;

if(enterflag==1)

{

enterflag=0;

n=0;

//用FFFF清除已经输入的密码

for(count3=0;count3

{

delay(5);

tab_key[count3]=0x0f;

}

TR1=1;

//打开计数器1

count1=0;

//定时器1由50MS累计到1S所用的计数器

if(mimaflag==1)

{

a=0;

write_com(0x01);

write_com(0x80);

for(count3=0;count3

26

{

write_date(table4[count3]); //密码正确,显示RIGHT,绿灯亮

delay(5);

}

}

else

{

n=0;

red=0;

bell=0;

a++;

if(a==1)

{

for(count3=0;count3

{

delay(5);

tab_key[count3]=0x0f;

}

write_com(0x01);

write_com(0x80);

for(count3=0;count3

{

write_date(table5[count3]); //密码错误,显示

error,红灯亮

{ alarm_out=0; //报警灯亮

pw_error=0; //密码错误指示灯亮

audio_out=0; //长鸣声报警

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

delay(60000);

audio_out=1;

//-------------

TR1=1;

//打开定时器计时

cnt_state=2; //下一状态处于15秒计时的状态

}

delay(5);

27

}

TR1=0;

}

} } } void key_manage12() { tab_key[n]=11; n++;

//密码计数清零

} //****************************************************取消键********************************************

void key_manage13() {

n=0;

//密码计数清零

write_com(0x80);

//指针所指位置 for(count3=0;count3

//用FFFF清楚已经输入的密码 }

} //*******************************************修改密码键********************************** void key_manage14() { uchar aa=0; n=0; xiugaiflag=1;

28

write_com(0x01); write_com(0x80); for(count3=0;count3

//用FFFF清楚已经输入的密码 } write_com(0x80+0x40); for(count3=0;count3

//用FFFF清楚已经输入的密码

} write_com(0x01); write_com(0x80); for(count3=0;count3

write_date(table11[count3]);

delay(100); } TR1=1; count1=0; } } void key_manage16()

29

{ tab_key[n]=15; n++; }

//****************************************定时器1的50MS,共延时1秒***************************** void time_1() interrupt 3 {

TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(count1

count1++; } else

//计时到1S {

TR1=0;

count1=0;

mimaflag=0;

red=1;

bell=1;

//显示FFFF

write_com(0x01);

write_com(0x80);

for(count3=0;count3

{

write_date(table1[count3]); //显示PASSWORD A OR B KEY

delay(5);

}

write_com(0x80+0x40);

for(count3=0;count3

{

write_date(table2[count3]); //开机显示FFFF

delay(5);

} } } //***********************************************定时0**********************************************

30

void time_0() interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(count4

//初始化函数 void init() {

uchar i; lcden=0; write_com(0x38);

//打开显示模式设置

write_com(0x0c);

//打开显示,光标等等设置未零

write_com(0x06);

//当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,

write_com(0x01);

//清零指令

write_com(0x80);

//指针所指位置

//定时器初始化

TMOD=0x11;

//T0,T1工作方式1 TH0=(65536-2000)/256; TL0=(65536-2000)%256;

//T0初始化2MS

TH1=(65536-50000)/256; TL1=(65536-50000)%256;

//T1初始化50MS

TR1=0; ET1=1; EA=1; TR0=0; ET0=1;

31

count0=0;

//初始没有密码输入,故为零

enterflag=0;

//没有确认键按下

mimaflag=0;

//密码正确与否键先置零

red=1;

//红灯不亮

//************密码存入EPROM中********************************** sda=1; delay(5); scl=1; delay(5); for(i=0;i

write_add(i,8);

delay2(100); } for(i=0;i

mima[i]=read_add(i);

delay(5); } } void main() { rw=0;

init(); write_com(0x80);

//指针所指位置

for(count3=0;count3

write_date(table1[count3]); //第一行显示INPUT THE PASSPORD:

delay(5); } write_com(0x80+0x40); for(count3=0;count3

write_date(table2[count3]); //开机显示FFFF

delay(5); } while(1) {

key_scan();

//调用键盘扫描函数

lcd_display();

32

}

} //**************************************************键盘扫描函数开始******************************** void key_scan() { //**********扫描第一行********* P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xee: key_manage1(); break;

case 0xde: key_manage2(); break;

case 0xbe: key_manage3(); break;

case 0x7e: key_manage4(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }

33

//**************************************************扫描第二行*********************************** P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: key_manage5(); break;

case 0xdd: key_manage6(); break;

case 0xbd: key_manage7(); break;

case 0x7d: key_manage8(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } //*********************************************扫描第三行*********************************** P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100);

34

if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: key_manage9(); break;

case 0xdb: key_manage10(); break;

case 0xbb: key_manage11(); break;

case 0x7b: key_manage12(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } }

//***************************************************扫描第四行**************************************** P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { temp=P1; switch(temp) {

35

case 0xe7: key_manage13(); break;

case 0xd7: key_manage14(); break;

case 0xb7: key_manage15(); break;

case 0x77: key_manage16(); break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } }

** 0 ** 1 **2 ** 3**

** 4** 5** 6 **7 ** **8** 9**

第五章、调试连接与测试

硬件调试方案:在设计平台中,将单片机的P1.01-P1.7分别与8个独立式键盘通过插线连接起来,将P3.0-P3.3分别与LCD液晶显示器的4引脚连接起来,P3.4与蜂鸣器的输入连接起来。将编程输入软件调试。

第六章、小结

通过这两周的学习,我感觉有何人能打的收获:首先通过学习使自己对对课本是上的知识可以应用于实际,使得理论与实际相结合,加深自己对课本知识的更好理解,同时锻炼了我个人的动手能力;并且在图书馆和网络中查阅资料,增加了许多课外知识。能对所学的软件学以致用。在整个设计过程中懂得了许多东西,也培养了独立思考和设计的能力,树立了对知识的运用信心,并且提高了自己的动手实践操作能力,相信

36

会对以后的学习工作有很大的帮助!虽然本次设计做的不是很顺畅,但是设计过程中所学到的东西是这次最大的收获和财富,是我终身受益!!

参考文献

【1】 胡汉才,单片机原理及接口技术,北京:清华大学出版社2008.【2】 张齐,单片机应用系统设计技术-基于c语言编程.北京:机械工业出版社2006.【3】 赵常德,MCS-51/98单片机原理及应用.北京:机械工业出版社.1997.【4】 曹巧媛,单片机原理及应用.北京:电子工业出版社1998

37

第15篇:单片机课程设计

武汉理工大学单片机实训报告

第一章 绪论 .....................................................................................................................................2 1.1概述 ....................................................................................................................................2 1.2课程设计任务 .....................................................................................................................2 第二章硬件系统设计 .......................................................................................................................3 2.1单片机最小系统 .................................................................................................................3 2.1.1 STC89C52的介绍 .....................................................................................................3 2.1.2 stc89c52系列单片机最小系统的介绍 ...................................................................4 2.2矩阵键盘模块 .....................................................................................................................5 2.3数码管显示单元 .................................................................................................................5 2.4 LCD1602液晶显示电路 .....................................................................................................6 2.5蜂鸣器单元 .........................................................................................................................7 第三章 软件设计 .............................................................................................................................8 3.1数码管实验 .........................................................................................................................8 3.1.1循环数码管显示0—F程序设计结构图: ............................................................8 3.1.2 59秒倒计数流程图 ..............................................................................................9 3.2 矩阵键盘流程图 ..............................................................................................................10 3.3 LCD1602滚动显示年月日时分秒....................................................................................11 3.4 AD转换, .........................................................................................................................12 3.5家电遥控器 .......................................................................................................................13 第四章调试结果分析 .....................................................................................................................14 4.1数码管调试及分析 .........................................................................................................14 4.1.1循环数码管显示0—F ...........................................................................................14 4.1.2数码管59秒倒计数 ............................................................................................15 4.2矩阵键盘...........................................................................................................................15 4.3 LCD1602滚动显示年月日时分秒....................................................................................16 4.4 AD转换 .............................................................................................................................16 4.5家电遥控器 .......................................................................................................................17 第五章小结.....................................................................................................................................17 参考文献:.....................................................................................................................................18

武汉理工大学单片机实训报告

第一章绪论

1.1概述

随着我国工业技术和电子技术的发展和进步,自动控制技术也已经得到了极大的普及和应用,而这些自动控制技术的核心技术就是单片微型计算机,简称单片机。它以其高可靠性、高性价比、低电压、低功耗等一系列优点,被广泛应用于控制系统、数据采集等领域。而51单片机系列以其超高的性价比深受广大电子爱好者和开发者以及大学生群体的欢迎。故而本次课程设计采用STC89C52单片机。

1.2课程设计任务

必做项目(这是每个学生必做的任务):

1. 基本系统:在51单片机开发系统PCB电路板上完成电子元器件的焊接、调试、程序下载,并实现数码管显示、矩阵键盘扫描、中断程序、定时器程序、串口通讯等基本功能; 2. 显示功能:焊接电路并实现对1602液晶屏的显示功能,要求能滚动显示字符;

3. 输出控制:焊接电路并实现对继电器的控制功能;

4. 数据采集:焊接电路并实现对AD0832的数据采集功能; 选做项目(以下任选一):

1. 家电遥控器:实现对红外接收管和发射管的控制功能,要求能够学习遥控器的红外码,并能发射相应的编码,实现红外遥控器的功能。

2. 增强显示:实现光魔方的功能,要求搭建不少于8*8*4单元的光魔方,能够动态显示字符。

3. 空气质量监测:实现对室外空气PM2.5浓度测量,要求能够实时读取PM2.5模块数据计算浓度,并将结果显示在屏幕中,或者通过无线方式发送到PC机中显示,或者超过设定值启动电机模拟开关窗。

4. 入侵在线报警:要求通过采集远红外传感器数据,自动触发相机模块抓拍,照片发至PC或网络中。

5. 穿戴式设备控制:对陀螺仪传感器的数据采集和处理,要求能根据采集到的数据计算出传感器加速度值,识别基本动作触发继电器开合,模拟启动外部设备。

6. 智能台灯:根据环境光强度自动调节LED亮度,通过光敏元器件采集环境亮度,通过PWM方式控制LED灯亮度。定时自动开灯,设定开灯时间,到时间由暗逐渐变亮。通过门控检测夜晚有人回家时自动开启LED灯等功能。

7. 火灾在线探测:采集烟感/异味传感器数据,并进行判断有无火情,继而控制继电器动作同时通过无线发送信息到PC或网络中。

8. 智能门磁:设计门磁开关,一端安装门上,另一端安装在门框。读取霍尔传感器输出,确定门开合状态,并在门状态变化时发送提示信息到PC或者网络中。

9. 智能窗帘:根据光强变化、夜晚休息、人离开等多种条件自动开闭窗帘。可以设计导轨及电机控制机构。 10. 智能信息提示:每天早上自动搜集门户网站头条新闻、当天天气情况等,

武汉理工大学单片机实训报告

滚动显示在屏幕中。也可以将用户设定的提醒信息从PC机推送至单片机系统显示;也可以若置于门背,开门时显示重要提示信息。

上述无线方式包括WIFI,蓝牙,Zigbee,433M等多种

第二章硬件系统设计

2.1单片机最小系统 2.1.1 STC89C52的介绍

STC89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制作技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。其引脚图如下图所示。

图2.1 STC89C52单片机

STC89C52RC引脚功能说明:

VCC(40引脚):电源电压 VSS(20引脚):接地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。

P2端口(P2.0~P2.7,21~28引脚):P2口的基本功能和P1端口相同。 P3端口(P3.0~P3.7,10~17引脚):P3口的基本功能和P1端口相同。

ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

武汉理工大学单片机实训报告

2.1.2 stc89c52系列单片机最小系统的介绍

单片机最小系统是单片机工作的最简单电路,它由单片机、电源、晶体振荡器、复位电路等构成。它是本系统的处理单元也是控制单元,负责处理信号、外设的接口与控制,同时它也是所有软件的载体。对52单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/ 输出设备等。52单片机最小系统见下图。

图2.1.2 STC89C52单片机最小系统

(1)时钟电路:

XTAL1(19 脚) :芯片内部振荡电路输入端。

XTAL2(18 脚) :芯片内部振荡电路输出端。

XTAL1 和XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。图2-2 中采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL

1、XTAL2 的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。

(2)复位电路:

在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。

5l 系列单片机的复位引脚RST( 第9 管脚) 出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST 持续为高电平,单片机就处于循环复位状态。

武汉理工大学单片机实训报告

2.2矩阵键盘模块

矩阵键盘的工作原理是:从0行开始,顺序行扫描,即该行输出为0。每扫描一行,读入列线数据,从0开始,列检查,找该行输出为0的列,若无,则顺序扫描下一行,并检查其各列;若找到某列线为0,则该列与检查行交叉的按键为被按下的键。从0行0列开始,顺序将按键编号,就可以按扫描的值得到按键的值。此外还要消除按键在闭合或断开时的抖动。消除抖动的方法可采用消抖电路(RS触发器闩锁电路硬件消除抖动),也克采用延时方式软件消除抖动(延时后再重读,以跳过抖动期)。在矩阵键盘中,通常采用软件消除抖动。

本设计中主要使用了独立键盘,故电路图中简要的画出了4*4的矩阵键盘,其电路原理图如图2.2所示

图2.2矩阵键盘

2.3数码管显示单元

本次设计的显示单元是由4个共阴的7段LED数码管组成的显示电路。原理电路图见图2.3所示:

图2.3数码管显示单元

如上图所示,4个数码管的段选和位选分别由单片机的不同IO口控制,此图用

武汉理工大学单片机实训报告

了一个锁存器74HC573来实现数码管的段选,而其位选则由单片机的其他IO口控制。

2.4LCD1602液晶显示电路

本次课程设计采用的液晶显示屏是LCD1602,其具有体积小、功耗小、显示操作简单LCD1602主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V

字符尺寸:2.95×4.35(W×H)mm

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表所示:

引脚功能说明: 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

武汉理工大学单片机实训报告

第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 其原理图如图2.4所示:

图2.4LCD1602接口电路

2.5蜂鸣器单元

本次课程设计采用的蜂鸣器为电磁式蜂鸣,其采用直流供电,其可分为两种类型:有源式和无源式。本次课程设计采用的为无源蜂鸣。其原理图如图2.5所示:

武汉理工大学单片机实训报告

图2.5蜂鸣器

第三章 软件设计

3.1数码管实验

3.1.1循环数码管显示0—F程序设计结构图:

实验要求:能循环数码管显示0—F

武汉理工大学单片机实训报告

图3.1.1循环数码管显示0—F

3.1.2 59秒倒计数流程图

实验要求:能用定时器循环显示59秒倒计时。

武汉理工大学单片机实训报告

图3.1.2 数码管59秒倒计数

3.2 矩阵键盘流程图

实验要求:实现按键检测能用按键控制数码管加减,控制定时器的启动和停止

1 0

武汉理工大学单片机实训报告

图3.2矩阵键盘

3.3 LCD1602滚动显示年月日时分秒

实验要求:要求用1602滚动显示年月日时分秒,并可发送到上位机,上位机可修改1602上显示的时间

1 1

武汉理工大学单片机实训报告

3.4 AD转换,

实验要求:实现AD采集电阻的电压,并把采集到的数据通过串口传送给上位机。

1 2

武汉理工大学单片机实训报告

3.5家电遥控器

实验要求:实现对红外接收管和发射管的控制功能,要求能够学习遥控器的红外码,并能发射相应的编码,实现红外遥控器的功能。

图3.5家电遥控器接收红外数据

1 3

武汉理工大学单片机实训报告

第四章调试结果分析

4.1数码管调试及分析

4.1.1循环数码管显示0—F 数码管位选接单片机的P2口,段选接+5V电压。当用KEIL软件把程序编号以后点击编译按钮,程序便编译好了,然后通过数据线把生成的HEX文下载进单片机,其实验现象如图4.1.1所示为数码管循环显示的部分图片。

4.1.1数码管循环显示 由其现象可知其程序调试成功。

1 4

武汉理工大学单片机实训报告

4.1.2数码管59秒倒计数

数码管的段选端接单片机的P2口,四个位选端接单片机P0端口,当编译好后,并把线路连接好后,数码管变开始从60开始每隔一秒倒计数,当记到0时,数码管的值便又变成60,如此开始循环。其部分实验现象图如图4.1.2所示:

图4.2.1数码管59秒倒计数

4.2矩阵键盘

矩阵键盘的接口接单片机的P1口,数码管的段选端接单片机的P2口,四个位选端接单片机P0端口。当开始运行程序时矩阵键盘从0行开始,顺序行扫描,即该行输出为0。每扫描一行,读入列线数据,从0开始,列检查,找该行输出为0的列,若无,则顺序扫描下一行,并检查其各列;若找到某列线为0,则该列与检查行交叉的按键为被按下的键。通过赋予相应按键++或——或停止数码管中断的功能并对相应按键进行编程即可实现数码管++、——、让定时器停止的功能。其实验现像如下:

图4.2矩阵键盘控制数码管加数字加减及定时器开启及停止

1 5

武汉理工大学单片机实训报告

4.3 LCD1602滚动显示年月日时分秒

本次设计的程序的LCD数据端接单片机的P0口,E,RW,RS分别接P3.7,P3.6,P3.5。矩阵键盘接单片机的P1口。当程序正确运行时应该可以在LCD1602上看到年月日,和时分秒的时间,且此时正在计时。其实验现象如下图所示:

图4.3LCD1602滚动显示年月日时分秒

由实验现象可知程序调试成功。

4.4 AD转换

本次实验采用的AD是ADC0832,它是一款8位AD。其各控制引脚接线如下Cs= P1^0; Clk= P1^1; Di=P1^7;Do= P1^7;其通道1接可调电阻,通道应为不用顾不接。当程序正确运行时可以在LCD1602上看到通道1所测试的电压值。并可以通过串口调试助手看到单片机发送到串口调试助手的电压值。其实验现象如图4.4所示:

1 6

武汉理工大学单片机实训报告

图4.4 AD转换

由以上实验现象可知和预测的功能相同顾本次实验调试成功。

4.5家电遥控器

本次遥控器实验采用的是NEC编码方式对遥控器的键值进行编码,以及对遥控器发送的红外线进行解码。其编码图如图4.5所示

图4.5 红外编码时序图

由次时序图可见,本次红外编码成功。

第五章小结

经过这次为期一周的单片机实训,让我受益匪浅。通过这次实训,使我不仅对单片机的各个模块更加的了解了,而且加深了我对于单片机这门课程知识的理解。这次实训不仅提高了我的编程能力,同时也提高了我的动手能力。在刚开始拿到单片机最小系统板的硬件时,面对这那些细如针眼芯片引脚和及其微小的贴片电阻,我感到了十分的无助,然而通过学长的演示和询问其他同学焊接方法,渐渐的我逐渐掌握了方法。焊接贴片电阻和芯片的速度也逐渐变快,然而当

1 7

武汉理工大学单片机实训报告

焊完芯片和贴片电阻后却发现下载不来程序,经过我用万用表对每个部件的电位进行检查后发现,原来焊接的下载芯片的引脚有些部位是虚焊,因而下不进程序,当我对虚焊部位重新焊了一遍后,单片机才可以下载程序。然而在后来的编程过程中我也遇到了许多小问题,让我调了很久的程序,比如把变量的的类型定义错误,该定义为全局变量的变量我定义成了局部变量等等,总之这一次实训让我受益匪浅,使我认识到了自身知识的匮乏,督促我去提升自己。

参考文献:

[1] 李群芳,张士军等.《单片微型计算机与接口技术》(第三版).电子工业出版社.出版年份:2008年。

[2] 杨路明《.C语言程序设计教程》.北京邮电大学出版社.出版年份:2005年。

[4] 赵亮,侯国锐.《单片机C语言编程与实例》.人民邮电出版社.出版年份:2007年 。

[5] 彭虎, 周佩玲, 傅忠谦.《单片机原理与接口技术》(第二版).电子工业出版社.出版年份:2008年。

[5] 郭天祥,《新概念51单片机C语言教程》,电子工业出版社,出版年份:2010年.

1 8

武汉理工大学单片机实训报告

实验5家电遥控器程序:

红外编码程序:

#include "reg52.h" #define uchar unsigned char #define uint unsigned int uchar key,key1,key2,key3,key4; sbit IR_OUT=P1^0 ; void delay_ms(uint ms) {

uint i,j;

for(i=0;i

{

for(j=0;j

} } //T1 13us产生一次中断 用于产生38K载波((1/26)*1000000 //T0 方式1 16位 用于定时

void Init_Timer(void)//初始化定时器1方式2 {

TMOD=0x21; //T0 mode 1 ,T1 mode 2(8位自动重装初值)

TH1=256-(1000*11.0592/38.0/12)/2+0.5; //(0.5为误差)

//特殊

TL1=256-(1000*11.0592/38.0/12)/2+0.5;

ET1=1; //开定时器中断1

EA=1;//开总中断 }

//发送引导码(9ms) 发送方:4.5ms高电平+4.5ms低电平.void Send_Start_Bit(void) //TR1的值=发送的电平{ //4.5ms 1

TH0=(65536-8295)/256;

TL0=(65536-8295)%256;

TR0=1;// 启动定时器0;

TR1=1;

while(!TF0);

TR1=0;

TF0=0;//定时器0溢出标志位。

TR0=0; //关闭定时器0.

武汉理工大学单片机实训报告

IR_OUT=0;

//4.5ms 0

TH0=(65536-4146)/256;

TL0=(65536-4146)%256;

TR0=1;

TR1=0;

while(!TF0);//等待定时器0产生中断。

TR1=0; TF0=0; TR0=0;

IR_OUT=0; }

//发送二进制0(0.565us载波+0.565us空闲) void Send_Bit_0(void) { //0.565us 1 载波

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //0.565us 0 空闲

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

武汉理工大学单片机实训报告

IR_OUT=0; }

//发送二进制 1 (0.565us载波+1.685ms空闲) void Send_Bit_1(void) { //0.565us 1 载波

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //1.685ms 0 空闲

TH0=(65536-1563)/256;

TL0=(65536-1563)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; /*****************************************/ }

void Send_over(void) //发送一个结束码,因为最后一个位只有遇到下降沿才能读取(发射端的上升沿) { //0.565us 1

//小于0.5us 接收端很难识别到

TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=1;

武汉理工大学单片机实训报告

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; //0.565us 0 TH0=(65536-521)/256;

TL0=(65536-521)%256; TR0=1; TR1=0;

while(!TF0);

TR1=0; TF0=0; TR0=0;

IR_OUT=0; } //发送一字节 8位 void Send_Char() { unsigned char i,j1,j2,Key3,Key33,Key4,Key44; j1=0xBE;//用户码

j2=0x41;//用户反码

Key3=0xDE;//key1 键值码

Key33=0x20;//key1 键值反码

Key4=0x30;//key2 键值码

Key44=0xc0;//key2 键值反码

Send_Start_Bit();//发送引导码

Send_Bit_0();//

for(i=0;i

if(j1&0x80)

Send_Bit_0();

else

Send_Bit_1(); j1=j1

武汉理工大学单片机实训报告

//先发射低位

}

j2=0; for(i=0;i

if(j2&0x80)

Send_Bit_0();

else

Send_Bit_1();

j2=j2

//先发射低位

}

for(i=0;i

{

if(key3&0x80)

Send_Bit_0();

else

Send_Bit_1();

key3=key3

}

for(i=0;i

{

if(Key33&0x80)

Send_Bit_0();

else

Send_Bit_1();

Key33=Key33

//先发射低位

}

//}

for(i=0;i

{

if(Key4&0x80)

Send_Bit_0();

else

Send_Bit_1();

武汉理工大学单片机实训报告

Key4=Key4

}

for(i=0;i

{

if(Key44&0x80)

Send_Bit_0();

else

Send_Bit_1();

Key44=Key44

//先发射低位

}

//} Send_over();//结束符

}

void T1_ISR(void) interrupt 3 { IR_OUT=!IR_OUT; }

void main(void) { Init_Timer(); while(1) {

Send_Char();//发送8位数据

delay_ms(1000); } }

武汉理工大学单片机实训报告

红外解码程序:

#include"reg52.h" #define LCD P0 #define uchar unsigned char #define uint unsigned int sbit IR_INPUT = P3^2;//红外接收引脚 sbit E=P2^7;

sbit RW=P2^5; sbit RS=P2^6; sbit int0=P3^2; uchar code tab1[11]={"key value:"}; uchar code tab2[13]={"

-H"}; uchar hongwaivalue[6]; uchar Time; void IrInit();

void delay(uint x)

//10us { unsigned char i; while(x--) {

for (i = 0; i

{} } }

void write_com(uchar cmd)//写指令函数 { RS=0; RW=0; LCD=cmd; delay(1); E=1; delay(5);

E=0; } void write_data(uchar dat)//写数据 { RS=1; RW=0; LCD=dat; delay(1); E=1; delay(10);

武汉理工大学单片机实训报告

E=0; }

void lcd_init() { write_com(0x38); write_com(0x0c);

write_com(0x06); write_com(0x01); write_com(0x80); }

void hongwai_init()//7./* 初始化红外接收功能 */ {

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1; //打开总中

int0=1;//初始化端口 }

void lcd_display() {

hongwaivalue[4]=hongwaivalue[2]>>4;

//高位

hongwaivalue[5]=hongwaivalue[2]&0x0f; //低位

if(hongwaivalue[4]>9)

{

write_com(0xc0+0x09);

//设置显示位置

write_data(0x37+hongwaivalue[4]); //将数值转换为该显示的ASCII码

}

else

{

write_com(0xc0+0x09);

write_data(hongwaivalue[4]+0x30); //将数值转换为该显示的ASCII码

}

if(hongwaivalue[5]>9)

{

write_com(0xc0+0x0a);

write_data(hongwaivalue[5]+0x37); //将数值转换为该显示的ASCII码

}

武汉理工大学单片机实训报告

else

{

write_com(0xc0+0x0a);

write_data(hongwaivalue[5]+0x30); //将数值转换为该显示的ASCII码

} }

void main() {

uchar i;

hongwai_init();

lcd_init();

write_com(0x80);

for(i=0;i

{

write_data(tab1[i]);

}

write_com(0x80+0x40);

for(i=0;i

{

write_data(tab2[i]);

}

while(1)

{

lcd_display();

} }

void Read() interrupt 0 { uchar j,k; uint n; Time=0;

delay(70);

if(int0==0) //确认是否真的接收到正确的信号

{

n=1000;

//1000*10us=10ms,超过说明接收到错误的信号

//当两个条件都为真则循环,如果有一个条件为假的时候跳出循环,免

武汉理工大学单片机实训报告

//程序出错的时侯,程序死在这里

while((int0==0)&&(n>0)) //等待前面9ms的载波低电平过去

{

delay(1);//10us

n--;

}

键码反码)

过去

if(int0==1)

//如果正确等到9ms低电平{ n=500; while((int0==1)&&(n>0))//等待4.5ms的空闲起始高电平过去

{

delay(1);//10us

n--; } for(k=0;k

for(j=0;j

{

n=60;

while((int0==0)&&(n>0))//等待信号前面的560us低电平

{

delay(1);//10us

n--;

}

n=500;

while((int0==1)&&(n>0)) //计算高电平的时间长度。

{

delay(1);

Time++;

n--;

if(Time>30)

{

EX0=1;

return;

}

}

hongwaivalue[k]>>=1; //k表示第几组数据

if(Time>=8)

//如果高电平出现大于565us,那么

武汉理工大学单片机实训报告

是1

{

hongwaivalue[k]|=0x80;

}

Time=0; //用完时间要重新赋值

} }

} } } if(hongwaivalue[2]!=~hongwaivalue[3]) { return; }

第16篇:单片机课程设计

设计题目:直流电子负载

姓 名 张红俊 学 院 信息与电气工程学院

专 业 电气工程及其自动化 年 级 2009级 学 号 20092926012 指导教师 常新华

摘要:简易直流电子负载主要由恒流电路、电流电压检测电路、过压保护电路、模数转换以及单片机控制部分等功能模块组成。由单片机产生高电平作为电路的控制电压,从而控制产生恒流。电压、电流的检测与采集的方式都是通过运算放大器与电阻的组合的方式的电压,再通过基准电阻得出电路电流。将运放作为比较器来实现待测电源电压与

关键词:恒流电路,过压保护,ADC,.电压、电流的检测。

Abstract:Simple dc electronic load is mainly made up with the constant current circuit、current and voltage measure circuit、over-voltage protection circuit and single-chip microcomputer control functions .The constant current circuit by the hardware circuit so as to realize closed loop current stabilization output current stability control.The module to detect Voltage and electric current uses amplifier to realize the power supply voltage are collected.Over-voltage protection function module by operational amplifier and certain resistance to for the power supply voltage and the comparison of the benchmark voltage (4) single chip microcomputer control module to MSP430 microcontroller as control core, combining the keyboard, ADC and LCD module of the control system, the voltage acquisition and display, and other functions.Key:constant current circuit , over-voltage protection, detect Voltage and electric current ,ADC

一、系统方案论证与设计

1、恒流电路方案

方案1:采用软件闭环控制方式

由键盘预置电流值,经MCU处理产生电压信号,同时将采样电路采集到的实际输出电流值转化为电压信号,两者进行比较并通过适当的控制算法,调整输出电流值使其与设定电流值相等,从而构成闭环控制系统。

图1 硬件闭环稳流电路

方案2:采用硬件闭环控制

硬件的闭环稳流的典型电路如图1所示,根据集成运放的虚短概念,可得到:VR3错误!未找到引用源。Vi*[R2/(R2+R1)]式中VR3为负载R3的电压,R3为取样电阻,Vi为单片机输出的电压。而此时电流I=VR3/R3。若固定电阻所有电阻不变,则I完全由Vi决定,故无论电路如何发生变化,利用反馈环的自动调节作用,都能使I保持稳定。

方案1最大的问题是:调整电流稳定的周期过长。而方案2硬件电路不仅简单而且能快速得实现稳定的电流输出,且当固定电阻所有电阻不变,则电流I完全由Vi决定,故无论电路如何发生变化,利用反馈环的自动调节作用,都能使I保持稳定。

2、电压检测电路方案

方案1:通过单片机直接进行电压的检测。直接将待测电压经过ADC模块处理后传送给单片机进行检测。

图2

方案2:通过运放及相应的电阻对电压进行相应的处理后的结果传送给ADC模块处理并将其处理后的结果传送给单片机。

方案一最大的问题是其要检测的电压很有可能要高于单片机的最大输入电压,严重时可能将把单片机烧毁。同时在方案一中其待测的电路所产生的电流将影响测量电压的结果。

方案二则不然,当电压过大时可以利用其放大特性将待测的电压按一定比例减小,这样可以降低将单片机烧坏的可能性。同时利用运算放大器的虚断特性,

在很大程度上降低了被测电路其电流对检测结果的影响。

二、功能描述

题目要求功能:

(1) 恒流(CC)工作模式的电流设置范围为100mA~1000mA ,设置分辨率为10mA,设置精度为±1%。还要求CC工作模式具有开路设置,相当于设置的电流值为零。

(2) 在恒流(CC)工作模式下,当电子负载两端电压变化10V时,要求输出电流变化的绝对值小于变化前电流值的1%。

(3) 具有过压保护功能,过压阈值电压为18V±0.2V

三、具体实现部分

1、恒流源电路部分

1)具体电路分析

电路原理图如下图5所示,主要由采样电阻,12位DAC芯片TLV5618和控制运放LM258,以及大功率管几部分组成。大功率管实现扩流,12位DAC输出控制电压送到运放同相输入端,根据运放虚短的概念,运放的反相输入端电压将等于控制电压,采样电阻的电压经20倍放大后连接到运放反相端,从而实现电压控制采样电阻的电压,进而控制采样电阻的电流,即控制恒流源输出电流。由于电流设置分辨率为1mA/2000mA=1/2000,12位 DAC芯片TLV5618的分辨率为1/4096,满足设计要求。

根据题目要求选择合适的元器件很重要。

图5 恒流源电路

2)采样电阻R的选择

对电阻而言,减额因子:S=实际功率/额定功率错误!未找到引用源。0.5,因此电阻的功耗I2R应尽量小,同时应避免温度过高引起阻值变化过大使得输出电流值产生偏差。鉴于以上考虑,此电路选用0.1Ω/10W的电阻。为避免采样电阻通过大电流时发热引起阻值变化影响输出电流,本电路将4个0.1Ω/10W的电阻两两并联后再串联接入电路,如此可提高电源输出电流稳定性。 3)运算放大器的选择

由于此电源系统不提供负电压,所以必须采用单电源运放,本设计采用LM258。其输入电压范围0.3~32V,输入失调电压2~5mV,满足精度要求。 4)功率管的选择

常见的电流源多采用达林顿管和VMOS管两种,经过实际实验检测,达林顿管的管压降在0.8V左右,而VMOS管的管压降只有0.02V左右,考虑到提高电源效率问题,本电路采用VMOS大功率管。 5) DAC与控制电路的配合

TLV5618的输出电压为UO=2×VREF×DIN/4096,当VREF=2.084V,DIN=4000时,UO=4.000V,恰好满足IL=2.000A时,反馈电压=4.000V的要求。

2、单片机控制显示

1)MCU的选择

由于电流设置分辨率为1mA/2000mA=1/2000,故ADC和DAC的分辨率必须错误!未找到引用源。1/2000,即DAC和ADC的位数必须在11位以上。为保证精度,通常选用12位的ADC和DAC,外接ADC将使电路变复杂。市场上MCU种类繁多,TI公司的MSP430F149单片机是使用比较广泛的一款单片机,其内部含有60K FLASH以及8通道12位ADC,正好满足本系统4个通道的要求。加之其低功耗设计也有利于提高电源效率。故本系统采用MSP430F149单片机作为控制芯片。 2)键盘扫描和LCD显示

键盘扫描选用键盘管理芯片ZLG7290,通过I2C串行接口,可方便地与处理器连接。

1.软件流程图

图6 单片机系统电路图

四、系统软件设计

其一共可扫描64个按键,本设计采用4×4键盘矩阵。单片机接口以及键盘、而低功耗必须采用LCD显示器。连接电路如图6所示。

开始初始化主菜单1 恒流源2 恒压源3 软启动恒流源?YY负载短路?N取电流值IsN恒压源?Y取电压值Us软启动?N读FLASH中的IsUs->DACIs/10=ΔIs显示Is测显UoΔIs+1→DACIs->DAC存FLASHNΔis=Is?过压保护Y

图7 系统软件流程图

开始液晶主菜单上显示三种选项,对应设置电源三种工作模式:恒流源、恒压源和恒流源软启动模式。

2、恒流源部分

当按下选择恒流源的按键并按确定后单片机进入恒流源功能模式。首先单片机要判断负载是否开路,若有开路情况,声光报警并文字提示;若无开路,则设置电流值IS送DAC,控制输出电流,然后检测负载电压,进行过压检测和保护。

过压保护要求输出过压时进行保护处理并声光报警,当过压故障排除后系统能够自动恢复为正常工作状态。过压保护的流程如图8所示,送出设置电流值IS后检测输出负载电压,如果过压则声光报警,同时自动降低输出电流,以进行保护,当过压故障排除后,恢复IS值继续正常供电,保护的程序如下: /************取负载电压并显示**************/

ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC;

while(!fll); fll=0;

ADC12CTL0 &=~ ENC; temp=transforma(aa,0); temper=transforma(aa,1);

displayVrl(temp,22,3);//显示负载电压值

if(Amp1>Amp)

{ do {

Amp=Amp+20; func(Amp

while(!fll); fll=0;

temp=transforma(aa,0); temper=transforma(aa,1); displayVrl(temp,22,3); displayIsp(temper,11,4); ADC12CTL0 &=~ENC;

} while(judgeVrl(temp,10.2)&&(!(Amp==Amp1)));

} /*********负载电压超过11V开始报警并步进减小输出电流**********/

if(!judgeVrl(temp,11))

{

displayIp();

displayjg();//警告过压 P1OUT |= BIT0;//声光报警

delays(1000);

do {

Amp=Amp-20; displayshu(11,3,Amp);

func(Amp

delays(500000); ADC12CTL0 |= ENC; ADC12CTL0 |= ADC12SC;

while(!fll); fll=0;

temp=transforma(aa,0); temper=transforma(aa,1); displayVrl(temp,22,3); displayIsp(temper,11,4); ADC12CTL0 &=~ENC; }while(!judgeVrl(temp,10.6)); //负载电压小于10.6V时退出

P1OUT &=~BIT0; //关声光报警

3、恒压源部分

单片机主要完成取电压预置数,数据处理后送DAC转换为控制电压控制电压源输出电压,检测实际输出电压值并显示。

4、软启动部分

软件自动在FLASH中取出上次关闭电源时的电流值,并自动控制输出电流步进增至该电流值。系统恢复上次关闭电源时的工作状态。

五、系统测试及分析

1、测试方法

采用分别测试各个单元模块,调试通过后再进行整机调试的方法。

2、测试电路

测量效率的电路示意图如下图9所示,在串接电流表检测显示输出电流为2000mA时测试效率,由于电流表本身具有内阻(0.2Ω),所以此电阻也是负载电阻的一部分,故测试输出电压应把电流表加到负载上一起测量。

图9 测量效率的电路示意图

4247

3、误差分析

误差分析:电流实际输出值和设置值之间存在微小误差,一方面是由于闭环控制不够准确,可能是因为稳流闭环增益还不够。另一方面,由于DAC转换芯片本身具有一定的非线性误差,造成输出电流具有微弱的偏差。当电流不是很小时,由于12位DAC及测量仪表的分辨率大于设计要求的精度,所以实际输出电流值与设定电流值基本相等。且步进可达到1mA。

六、结论

由上述电路设计分析计算和测试数据可知:本系统基本实现了题目中基础部分和发挥部分的功能要求,并达到各项参数指标,且在此基础上添加软启动,电压源和扩大输入电压范围等其它扩展功能并能够较好的实现。本系统设计基本达到预期目标。

参考文献

[1]阎石著《数字电子技术基础》第五版 高等教育出版社,2006 [2]华成英,童诗白著《模拟电子技术基础》第四版 高等教育出版社,2006 [3]吴炳胜著《80C51单片机原理及应用技术》冶金工业出版社,2006 [4]张迎新著《单片微型计算机原理应用及接口技术》国防工业出版社,1993 [5]何希才著《新型集成电路及其应用实例》科学出版社,2003 [6]徐爱钧著《智能化测量控制仪表原理与设计》北京航空航天大学出版社,2006 [7] 孙肖子,邓建国,陈南等著《电子设计指南》高等教育出版社,2006

第17篇:单片机课程设计

单片机课程设计报告

专业:电气工程及其自动化 班级:电0901-4班 姓名:代红新 学号:20092444 指导老师:石彦辉

电气与电子工程学院

2012/6/22

一、设计题目:电子时钟

二、设计要求:

1.通过键设置当前时间(时分秒) 2.可切换显示年月日

3.可设定闹钟,到时报警,一个发光管闪烁(1次/秒),有复位键停止报警 4.可切换显示闹钟时间和当前时间

5.本机地址为02H,当接到上位机发的02H时,则回发02H 当接到上位机发的AAH时,则将当前时间发给上位机 当收到上位机发的55H时,则修改当前时间(时分秒)

三、设计思路

经过思考,该电子时钟试验须有六个八段数码管,分别指示时分秒,切换指示年月日,由指示灯指示闹钟提醒,以及上位机对下位机的控制,更改时间。

硬件设计思路:下位机显示时间和日期,以及闹钟指示灯,时间日期的更改由两个中断实现,一个位选,一个加一。上位机显示发送的数据和接受显示,仅由一个外部中断来切换方式。

软件设计思路:通过之前的单片机实验的练习,加上对本实验的理解,知道该由数码管显示时间,日期,进位转换,定时器计数器的应用,将数字转换为24进制,60进制,30进制以及365进制,并通过位选和片选实现显示。

四、硬件设计

五、软件设计

(一) 上位机编程设计

SOK EQU 24H ;fasongdezhonglei HOUR EQU 25H ;xiangcongjifade hour MIN EQU 26H

;xiangcongjifade min SOK1 EQU 27H

;weixuanze HOUR1 EQU 28H

;zhujijieshoude hour MIN1 EQU 29H

;zhujijieshoude min ORG 0000H AJMP MAIN ORG 0003H AJMP X0IN ;zhongleigaibian ORG 000BH AJMP T0IN

; zhujixiugaicongji ORG 0013H AJMP X1IN

;weixuanze

ORG 0030H MAIN:MOV SOK,#01H

MOV HOUR,#00H

MOV MIN,#00H

MOV SOK1,#01H

MOV HOUR1,#00H

MOV MIN1,#00H

MOV 21H,#02H

MOV 22H,#0AAH

MOV 23H,#55H

MOV TMOD,#26H

MOV TH1,#0FAH

MOV TL1,#0FAH

MOV TH0,#0FFH

MOV TL0,#0FFH

MOV PCON,#00H

MOV SCON,#50H

SETB PX0

CLR PS

CLR PT1

CLR PT0

CLR PX1

CLR ET1

SETB TR1

CLR ES

CLR TI

SETB IT0

SETB IT1

SETB EX0

SETB EX1

SETB ET0

SETB TR0

SETB EA ccc:MOV A,SOK

CJNE A,#1,aaa

LCALL DISP1

SJMP ccc aaa:MOV A,SOK

CJNE A,#2,eee

LCALL DISP2

SJMP ccc

eee:MOV DPTR,#8004H

MOV A,#6DH

MOVX @DPTR,A

MOV A,#02H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#6DH

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

LJMP ccc

;XIANSHI ;WAIT3:JNB TI,WAIT3

; CLR TI

;cc:MOV A,SOK

; CJNE A,#03H ,aa

; MOV A,23H

; MOV SBUF,A

;WAIT13:JNB TI,WAIT13

; CLR TI

X0IN:INC SOK

MOV A,SOK

CJNE A,#04H,dd

MOV SOK,#01H

SJMP ddd

dd:MOV A,SOK

CJNE A,#02H,qqq

MOV A,#0AAH

MOV SBUF,A WAITa:JNB TI,WAITa

CLR TI

WAIT4:JNB RI,WAIT4

CLR RI

MOV A,SBUF

MOV MIN1,A WAIT5:JNB RI,WAIT5

CLR RI

MOV A,SBUF

MOV HOUR1,A ddd: RETI qqq:MOV A,#55H

MOV SBUF,A WAITB:JNB TI,WAITB

CLR TI

RETI X1IN:INC SOK1

MOV A,SOK1

CJNE A,#03H,ee

MOV SOK1,#01H

ee:RETI T0IN:MOV A,SOK1

CJNE A,#1,ff

MOV A,SOK1

MOV SBUF,A WAIT6:JNB TI,WAIT6

CLR TI

MOV A,HOUR

CJNE A,#23,hh

MOV HOUR,#00H

MOV A,HOUR

MOV SBUF,A WAIT7:JNB TI,WAIT7

CLR TI

RETI

hh:INC HOUR

MOV A,HOUR

MOV SBUF,A WAIT8:JNB TI,WAIT8

CLR TI

RETI

ff: MOV A,SOK1

MOV SBUF,A WAIT9:JNB TI,WAIT9

CLR TI

MOV A,MIN

CJNE A,#59,ii

MOV MIN,#00H

MOV A,MIN

MOV SBUF,A WAIT10:JNB TI,WAIT10

CLR TI

RETI

ii:INC MIN

MOV A,MIN

MOV SBUF,A WAIT11:JNB TI,WAIT11

CLR TI

RETI DISP1:MOV DPTR,#8004H

MOV A,#3FH

MOVX @DPTR,A

MOV A,#04H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#5BH

MOVX @DPTR,A

MOV A,#02H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#76H

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#3FH

MOVX @DPTR,A

MOV A,#20H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#5BH

MOVX @DPTR,A

MOV A,#10H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#76H

MOVX @DPTR,A

MOV A,#08H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

RET

DISP2:MOV DPTR,#8004H

MOV A,#77H

MOVX @DPTR,A

MOV A,#02H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,#77H

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#TAB

MOV A,HOUR1

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 40H,A

MOV A,B

MOVC A,@A+DPTR

MOV 41H,A

MOV A,MIN1

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 42H,A

MOV A,B

MOVC A,@A+DPTR

MOV 43H,A

MOV DPTR,#8004H

MOV A,40H

MOVX @DPTR,A

MOV A,#20H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,41H

MOVX @DPTR,A

MOV A,#10H

MOV DPTR,#8002H

MOVX @DPTR,A (二) 下位机编程设计

SOK2 BIT 20H.0 ;秒标志位 SOK5 BIT 20H ;秒标志位

SEC EQU 30H

;秒

MIN EQU 31H

;分

HOUR EQU 32H

;时

DAY EQU 33H

;天

MON EQU 34H

;月

YEAR EQU 35H

;年

SEC1 EQU 36H

;闹钟的秒

MIN1 EQU 37H

;闹钟的分

HOUR1 EQU 38H ;闹钟的时

SOK1 EQU 57H

;模式切换

SOK3 EQU 58H ; 位选择标志

SOK4 EQU 59H ;模式表示

ORG 0000H

SJMP MAIN

ORG 0003H

LJMP X0IN

ORG 000BH

LJMP T0IN

ORG 0013H

LCALL DEL

MOV DPTR,#8004H

MOV A,42H

MOVX @DPTR,A

MOV A,#08H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,43H

MOVX @DPTR,A

MOV A,#04H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

RET

;XIANSHI

DEL:MOV R1,#750

zzz:DJNZ R1,zzz

RET

TAB:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH

END

LJMP X1IN

ORG 0023H

LJMP ESIN

ORG 0070H MAIN:MOV SOK1,#00H

MOV SOK3,#01H

MOV SEC,#00H

MOV MIN,#11

MOV HOUR,#11

MOV DAY,#21

MOV MON,#06

MOV YEAR,#12

MOV SEC1,#00H

MOV MIN1,#00H

MOV HOUR1,#00H

MOV R0,#10

MOV TMOD,#21H

MOV TL1,#0FAH

MOV TH1,#0FAH

MOV TH0,#3CH

MOV TL0,#0B0H

MOV PCON,#00H

MOV SCON,#50H

CLR TI

SETB ES

SETB PS

CLR PT1

CLR PX1

CLR PT0

CLR PT1

SETB P1.1

SETB EX0

SETB EX1

SETB IT0

SETB IT1

SETB ET0

CLR ET1

SETB TR0

SETB TR1

SETB EA

aa:JNB SOK2,ff

CLR SOK2

MOV A,SEC

CJNE A,#59,gg

MOV SEC,#00H

MOV A,MIN

CJNE A,#59,hh

MOV MIN,#00H

MOV A,HOUR

CJNE A,#23,ii

MOV HOUR,#00H

MOV A,DAY

CJNE A,#30,jj

MOV DAY,#01

MOV A,MON

CJNE A,#12,kk

MOV MON,#01

INC YEAR

gg:INC SEC

AJMP ff

hh:INC MIN

AJMP ff

ii:INC HOUR

AJMP ff

jj:INC DAY

AJMP ff

kk:INC MON

AJMP ff

ff:MOV A,HOUR

CJNE A,HOUR1,zz

MOV A,MIN

CJNE A,MIN1,zz

JNB SOK5,xx

CLR SOK5

SETB P1.0

LJMP zz

xx:CLR P1.0

zz:MOV A,SOK1

CJNE A,#00H,bb

AJMP DISP1

bb:CJNE A,#01,cc

AJMP DISP2

cc:AJMP DISP3

DISP1:MOV SOK4,#01H

MOV DPTR,#TAB

MOV A,DAY

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 45H,A

MOV A,B

MOVC A,@A+DPTR

MOV 46H,A

MOV A,MON

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 47H,A

MOV A,B

MOVC A,@A+DPTR

MOV 48H,A

MOV A,YEAR

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 49H,A

MOV A,B

MOVC A,@A+DPTR

MOV 50H,A

MOV DPTR,#8004H

MOV A,49H

MOVX @DPTR,A

MOV A,#20H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

LJMP aa

DISP2:MOV SOK4,#02

MOV DPTR,#TAB

MOV A,HOUR

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 43H,A

LCALL DEL

MOV DPTR,#8004H

MOV A,50H

MOVX @DPTR,A

MOV A,#10H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,47H

MOVX @DPTR,A

MOV A,#08H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,48H

MOVX @DPTR,A

MOV A,#04H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,45H

MOVX @DPTR,A

MOV A,#02H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,46H

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

MOV A,B

MOVC A,@A+DPTR MOV 44H,A MOV A,MIN MOV B,#10 DIV AB

MOVC A,@A+DPTR MOV 41H,A MOV A,B

MOVC A,@A+DPTR MOV 42H,A MOV A,SEC MOV B,#10 DIV AB

MOVC A,@A+DPTR MOV 39H,A MOV A,B

MOVC A,@A+DPTR MOV 40H,A MOV DPTR,#8004H MOV A,43H MOVX @DPTR,A MOV A,#20H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,44H MOVX @DPTR,A MOV A,#10H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,41H

MOVX @DPTR,A

MOV A,#08H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,42H

MOVX @DPTR,A

MOV A,#04H

MOV 54H,A

MOV A,SEC1

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 51H,A

MOV A,B

MOVC A,@A+DPTR

MOV 52H,A

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,39H

MOVX @DPTR,A

MOV A,#02H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

MOV DPTR,#8004H

MOV A,40H

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

LJMP aa

DISP3:MOV SOK4,#03

MOV DPTR,#TAB

MOV A,HOUR1

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 55H,A

MOV A,B

MOVC A,@A+DPTR

MOV 56H,A

MOV A,MIN1

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV 53H,A

MOV A,B

MOVC A,@A+DPTR

MOV DPTR,#8004H MOV A,55H MOVX @DPTR,A MOV A,#20H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,56H MOVX @DPTR,A MOV A,#10H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,53H MOVX @DPTR,A MOV A,#08H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,54H MOVX @DPTR,A MOV A,#04H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL MOV DPTR,#8004H MOV A,51H MOVX @DPTR,A MOV A,#02H MOV DPTR,#8002H MOVX @DPTR,A LCALL DEL

MOV DPTR,#8004H

MOV A,52H

MOVX @DPTR,A

MOV A,#01H

MOV DPTR,#8002H

MOVX @DPTR,A

LCALL DEL

LJMP aa

X0IN:INC SOK1

CJNE A,#12,uu

MOV MON,#1

RETI

uu:INC MON

RETI

tt:INC YEAR

RETI

vv:MOV A,SOK4

CJNE A,#02H,ww

MOV A,SOK1

CJNE A,#3,dd

MOV SOK1,#00H

dd:RETI

T0IN:MOV TH0,#3CH

MOV TL0,#0B0H

DJNZ R0,ee

SETB SOK2

SETB SOK5

MOV R0,#10

ee:RETI

X1IN:JNB P1.1,kkk

MOV A,HOUR

CJNE A,HOUR1,aaa

MOV A,MIN

CJNE A,MIN1,aaa

INC MIN

aaa:INC SOK3

MOV A,SOK3

CJNE A,#4,ll

MOV SOK3,#01H

ll:RETI

kkk:MOV A,SOK4

CJNE A,#01H,vv

MOV A,SOK3

CJNE A,#01H,www

MOV A,DAY

CJNE A,#30,

MOV DAY,#1

RETI

:INC DAY

RETI

www:MOV A,SOK3

CJNE A,#2,tt

MOV A,MON

MOV A,SOK3

CJNE A,#1,nn

MOV A,SEC

CJNE A,#59,mm

MOV SEC,#00H

RETI mm:INC SEC

RETI nn:MOV A,SOK3

CJNE A,#2,pp

MOV A,MIN

CJNE A,#59,oo

MOV MIN,#00H

RETI oo:INC MIN

RETI pp:MOV A,HOUR

CJNE A,#23,qq

MOV HOUR,#00H

RETI qq:INC HOUR

RETI ww:MOV A,SOK4

CJNE A,#03H,bbb

MOV A,SOK3

CJNE A,#1,ccc

MOV A,SEC1

CJNE A,#59,ddd

MOV SEC1,#00H

RETI ddd:INC SEC1

RETI ccc:MOV A,SOK3

CJNE A,#2,eee

MOV A,MIN1

CJNE A,#59,ggg

MOV MIN1,#00H

RETI

ggg:INC MIN1

RETI

eee:MOV A,HOUR1

CJNE A,#23,fff

MOV HOUR1,#00H

RETI

fff:INC HOUR1

bbb:RETI

ESIN: CLR RI ;很容易被忽略

MOV A,SBUF

CJNE A,#02H,aaaa

MOV A,#02H

MOV SBUF,A WAIT1:JNB TI,WAIT1

CLR TI

RETI aaaa:

CJNE A,#0AAH,bbbb

MOV A,MIN

MOV SBUF,A

WAIT2:JNB TI,WAIT2

CLR TI

MOV A,HOUR

MOV SBUF,A

WAIT3:JNB TI,WAIT3

CLR TI

RETI

bbbb: CPL P1.7

;WAIT7:JNB RI,WAIT7

;

CLR RI

;

MOV A,SBUF

;

CJNE A,#01H,cccc

;WAIT4:JNB RI,WAIT4

;

CLR RI

;

MOV A,SBUF

;

MOV HOUR,A

;cccc: NOP

; WAIT5:JNB RI,WAIT5

;

CLR RI

;

MOV A,SBUF

; MOV MIN,A

RETI

DEL:MOV R1,#750

zzz:DJNZ R1,zzz

RET

TAB:DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH

END

六、设计总结。

单片机已渗透到我们生活的各个领域,几乎很难找到没有单片机足迹的领域。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说全自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的工程师和科学家。科技越发达,智能化的东西就越多。因此学习单片机是社会发展的必然需求。

为期十天的单片机课程设计结束了,回想起这十天的设计过程,有紧张激烈的构思讨论过程,有忙碌甚至绞尽脑汁的编程调试阶段。有久久实现不了的无奈,也有灵机一动的兴奋,更有老师的肯定和鼓励。

几天的单片机课程设计,较之前的实验上机实现了更多的功能,使得单片机实力有更充分的发挥,硬件设计还算简单,但是其编程技巧有了更深更高的要求,软件编程是本课程设计的难点和重点,通过对题目要求的仔细研究,外加之前实验的经验,加上老师的悉心指点,并提出了宝贵的意见,我们的“时钟“功能得以实现。在这里,我必须要感谢老师的悉心指导,同学们的互相帮助,谢谢你们!

第18篇:单片机课程设计

《单片机技术》课程设计说明书

音乐盒

院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学

号:1330340220 完成时间: 2016年1月11日

摘要

音乐盒起始于中世纪欧洲,当时为使教会的钟塔报时,而将大小的钟表上装置机械设备,被称为可发出声音的组钟。

本次的课题主要分为数码管显示模块、供电模块、按键模块、发声模块、复位电路和AT89S52单片机。数码管显示模块采用共阳极数码管,通过P0口控制,实现歌曲序号的显示;供电模块采用+5V供电;按键通过P3口控制,实现歌曲播放顺序的调换和暂停播放功能;扬声器由P3.1口控制,实现歌曲播放。

主要的工作过程是通过按键控制下一首和上一首播放以及暂停和播放,同时有数码管显示当前正在播放的歌曲序号,扬声器播放出音乐。

此次设计主要用到PROTEUS、KEIL编程和AD作图软件。用PROTEUS画出原理图,用KEIL编写程序,将程序导入原理图中进行仿真。最后用AD画出PCB图,打印图纸进行腐蚀焊接。将程序下载到单片机中,利用I/O口产生方波,驱动扬声器,发出音调,从而演奏乐曲。

关键词:扬声器;AT89S52单片机;I/0口

目 录

1 背景意义、任务要求及设计原理、框图··························1 1.1 背景意义···············································1 1.2 任务要求···············································1 1.3 设计原理···············································1 1.4 设计框图···············································1 2 硬件系统····················································3 2.1 数码管模块··············································3 2.2 键盘模块················································3 2.3 复位电路················································3 2.4 蜂鸣器模块··············································4 3 软件系统·····················································5 3.1 主程序介绍及流程图······································5 3.2 各个模块及功能介绍······································6 3.2.1 定时器模块········································6 3.2.2 延时模块··········································6 3.2.3 中断模块··········································7 3.2.4 数码管显示模块 ···································9 4 电路仿真和程序检测··········································10 5 实物制作及调试··············································11 结束语 ····························································12 参考文献 ··························································13 致 谢· ···························································14 附 录· ···························································15

1 背景意义、任务要求及设计原理、框图

1.1 背景意义

音乐盒的起源是中世纪欧洲的教会用来钟塔报时,后来,随着工业的发展,逐渐的体积变小,功能变多,不过多数以机械音乐盒为主,这样的音乐盒大部分体积较大音调单一,容易受到外界的影响,而且,代价昂贵。

此次设计的音乐盒,是基于单片机设计制作的电子音乐盒。与传统的相比更加小巧,音质更优美而且可以演奏和弦音乐。单片机音乐盒的动力是+5V的电源,制作简单,可以批量生产,控制功能强大,可以随时的加减歌曲,使用更加的方便而且不易受到外界的影响而音质变坏,另外,可以根据需要,添加流水彩灯等外设更改外观,使音乐盒的功能更加丰富。

1.2 任务要求

此次的设计要求为:设计一个具有特定功能的音乐盒,要求包含软件和硬件两大模块,能够通过按键来选择曲目,切换曲目,显示器来显示曲目编号,能够准确的播放曲目。

1.3 设计原理

本次的设计最主要的在于蜂鸣器的设计,想要蜂鸣器发出不同的音调,通过单片机的定时器产生一定长度的方波,方波脉冲驱动蜂鸣器发声。要产生音频脉冲,只需要算出某一音频的周期,然后取半周期的时间定时。利用定时器计时这半个周期时间,每当计时到之后,就将输出脉冲的I/O反向,然后在重复计时此周期时间再对I/O口反相,就可在I/O口得到此频率的脉冲。如中音DO,频率为523HZ,其周期T=1/523=1912微秒,因此只要令计数器定时1912/2=926。在每计数956次时将I/O口反相,就可以得到中音。

每当有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出曲目。数码管采用共阳极数码管,通过单片机P0口控制,实现曲目序号的显示。功能键盘采用按键开关,通过P3口控制,实现曲目播放顺序的调换和暂停播放功能,蜂鸣器由P3.1口控制,实现音乐播放。

1.4 设计框图

单片机接+5V电源供电,晶振电路负责产生单片机所需要的时钟信号,通过功能键产生外部中断,控制音乐盒的上一曲和下一曲。在由I/O口输出控制蜂鸣器发声。另外可以用复位电路对程序初始化,在程序出错时,重启单片机。具体

的设计框图如图1所示。

图1 总体设计框图

编程设置好定时时间,通过编程器写入AT89S52单片机系统中。由AT89S52单片机的定时器每秒通过P1口控制LED数码管显示,复位信号由按键输入,没按一次,系统恢复原始状态。电源,晶振电路,单片机,功能键,和扬声器部分具体介绍在后面有介绍。

2 硬件系统

2.1 数码管模块

歌曲显示部分用数码管来显示,LED显示器件是通过发光二极管显示字段的器件,该设计采用的是7段数码管,原理是由P0口控制数码管中的7端LED发光二极管,通过单片机给予P0口不同的数值来显示不同的数字。数码管分为共阳极和共阴极两种,共阳极的数码管,当管脚是低电平有效,而阴极的数码管,是管脚高电平有效。这样,单片机给予P0口的数值将会发生差异,也就是说,不同种类的数码管,对应的ASCII码就会不同。本次选用的是共阳极数码管,其引脚如图2所示。

图2 数码管引脚

2.2 键盘模块

本次的键盘模块采用按键开关这样操作简单,辨别容易的开关。用到4个按键开关,分别是复位按键,下一首按键,上一首按键,和暂停按键。上一首按键和下一首按键接单片机的外部中断0,外部中断1。暂停按键接定时器1,复位按键在复位电路中,接单片机RES。

2.3 复位电路

复位电路主要用于初始化程序,当单片机音乐盒发生死机时,用复位电路初始化程序来重启单片机。两个电容,两个电阻和一个复位按键组成,当单片机死机时,按下按键,即可重启,其电路原理图如图3所示。

图3 复位电路原理图

2.4 扬声器模块

扬声器模块最为重要,当单片机输出脉冲经过扬声器时,会是扬声器发声,不过因为设计中用到的元件较多,不能保证通过扬声器的电流足够大,所以要用三极管放大电路来放大电流,这样才能让扬声器正常工作,具体的原理图如图4所示。

图4 扬声器原理图

3 软件系统

3.1 主程序介绍及流程图

一个系统的正常运行不仅需要硬件的运行,还需要软件系统的支持。同时软件要根据硬件的连接来设计,来配合硬件的工作,例如,本次的设计用到的是P 0口和P3口。所以,设计的时候就要注意,只能用到P0和P3。本次用到的软件设计选用课堂学到的汇编语言。另外用KEIL软件来编写程序,用课堂上学到的中断和循环等来编写程序。

主程序要开始定义音频输出端口,歌曲总数以及每首歌的入口地址;然后对定时器初始化,确定工作方式,赋初值,开放中断启动定时器工作;对音频输出端口初始化;设置音节起始位置和节拍间距,把音节和节拍的入口地址信息存放在固定存储单元中,查询音乐的节拍表;当6首歌曲的节拍查询结束后,音乐播放完毕,程序结束。主程序的清单在附录中,其流程图如图5所示。

图5 主程序流程图

3.2 各个模块及功能介绍 3.2.1 定时器模块

单片机中有两个16位的可编程计数器/定时器,他们具有定时和计数的功能,

可用于定时控制,延时,对外部的事件检测和计数。

定时器的核心部件是加一计数器,通过TMOD寄存器可以使定时器工作在定时或者计数,还可以选择工作方式,工作方式关系到后面音调和节拍的调用,因此,要选择合适的工作方式。定时器模块的程序清单见附录。图6为定时程序流程图。

图6 定时器模块流程图

3.2.2 延时模块

此处的延时模块并不是固定的延时程序,而是将节拍表中的接拍数存放在固定的单元中,再将固定单元中的内容送给延时程序中,这样空拍就可以将节拍分开,这样,图7为延时程序流程图。

图7 延时流程图

3.2.3 中断模块

中断模块主要用来进行上一首,下一首和暂停的控制,本次的中断主要用到INT0,INT1和T1三个I/O口。不同的中断有不同的程序。因为单片机中只有两个外部中断,因此,我决定选用定时器1来改变成中断,即应定时器1的F0判断,当F0为1时,为中断。在此仅具体介绍上一曲的功能。下面为流程图介绍。

图8 中断程序流程图

3.2.4 数码管显示模块

本次设计采用的是共阳极的数码管,因此要采用相应的数值来控制数码管的亮灭。另外还要求通过按键在改变曲目顺序的时候改变数码管显示数字。下面为数码管显示模块的流程图。

图9 数码管显示模块流程图

4 电路仿真和程序检测

仿真图作图用到的是PROTEUS软件,对于这个软件,我们已经相当的熟悉,所以用起来比较顺利,首先将各个元件搜索出来,必须要有单片机最小系统,显示模块,按键模块,发声模块。根据要求,可以画出仿真图。如图10所示。

图10 设计仿真图

将KEIL中写好的程序导入到单片机中,开始检测,首先检测是否能够清晰的播放出音乐,其次通过控制三个按键来检测上一首,下一首和暂停的功能是否实现,观察数码管的数字是否随着按键的变化,通过以上检测,发现程序和仿真完全符合标准,表示仿真和程序检测通过,可以制作实物。

5实物调试

将程序编译好产生.hex文件,通过无需驱动程序将编译好的.hex文件导入到三合一的实验板中,在外边接入三个按键开关来控制上一首,下一首和暂停,调试过程与仿真图的调试过程相同,可以通过按键来控制歌曲的调换和暂停,而且也可以控制数码管按曲目的调换来显示序号。实验成功,实验成品如图11所示。

图11 实物图 11

结束语

首先要感谢凌老师平时的耐心教导,才能让我对单片机这门课程产生兴趣,在平时的课堂上都会跟着老师的思路走,下课后,努力的完成老师布置的作业是凌老师让我学到了很多关于单片机的知识。

其次对这次制作课程设计的感想。本次的课题是音乐盒,最主要的就是程序设计,经过比较分,决定采用51编程语言,因为平时上课接触最多的就是汇编语言,对于C语言,了解比较少,并不是非常熟练。运用课堂上学到的定时,中断,循环,以及数码管显示和按键程序,可以比较完整的制作出这次的课题。不仅可以复习近平时学到的知识,还会有新的能力学到,比如AD绘图的使用和熟悉。

最后,了解了单片机的方便性,和强大性。这是我们走向岗位的通行证,必须学会单片机,才会在大四毕业的时候找到适合自己的好工作。

参考文献

[1]李广弟.单片机基础[M].第3版.北京:北京航空航天大学出版社,2003.06.[2]李全利.单片机原理及应用(C51编程)[M].北京:高等教育出版社,2012.12.[3]楼然苗.51系列单片机设计实例[M].北京:北京航空航天大学出版社,1999.06.

[4]李叶紫.单片机应用教程[M].北京:清华大学出版社,2002.01.[5]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.09.

这次的设计可以说是给了我很多,不仅仅是学习上的,更多的是精神上和生活中的

首先要感谢老师的教育,让我学到了这么多的知识,在这段制作单片机课设的时候更是有感触,当听到设计的音乐盒发出声音的时候,第一感觉是好舒畅,因为第一次可以看到自己制作出这样的东西,在这些自豪中,更能感觉到老师对我们的栽培是那么的重要。

还要感谢同学们的帮助,有的时候,自己真的是不懂了,就去问同学,这不仅仅是问问而已,更能加深同学之间的友情,而且还会收获更多的知识,在这样的学习氛围中,收益的是我们大家。所以我要感谢在这次课设里帮助过我的所有同学。

这次的设计给我最大的启发就是,在学习中马虎不得。当你马虎的对待学习,学业也会马虎的对待你,这样吃亏的还是自己,学业本来就是自己的,自己不努力,难道就会白白得来吗?所以以后的学习中不能有一丝的马虎大意,就算是为了自己也要学下去。

附录A 电路原理图

附录B 电路实物图

附录C 元器件清单

芯片

AT89S52 1 数码管八段2

电容

22µF

电容

33pF

2 三极管1

电阻

470Ω

电阻

300Ω

1

电阻

200Ω

1

电阻

1KΩ

2 LED灯8

下载口

晶振

12MHZ1

按键

9 排阻8位4

排阻

2位1

短路帽

插针

若干

18 附录D 程序清单

OUT BIT p3.1

N EQU 6 OUT_NUM EQU P0 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ORG 000BH LJMP F_T0 ORG 0013H AJMP NEXT_SONG ORG 001BH AJMP START_PAUSE ORG 0030H MAIN: MOV SP ,#60H MOV DPTR,#TABLE MOV R0 ,#30H MOV R5 ,#00H MOV R6 ,#1 SET_TAB: MOV A,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A ,R5

19 MOVC A ,@A+DPTR MOV @R0 ,A INC R5 INC R0 MOV A,R5 MOVC A,@A+DPTR MOV @R0 ,A INC R0 INC R5 INC R6 CJNE R6,#N+1,SET_TAB MOV TMOD ,#61H MOV TH1,#0FFH MOV TL1,#0FFH SETB ET1 SETB ET0 CLR PT0 SETB PT1 SETB IT0 SETB PX0 SETB IT1 SETB PX1 SETB EX1 SETB EX0 SETB EA SETB TR1 SETB OUT CLR F0 MOV 22H ,#01H MOV DPTR,#OUT_TAB MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,#00H

START0: MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A NEXT:MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR JZ END0 MOV R1,A ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING CLR TR0

21 SJMP SING1 SING:DEC A MOV R3,A RL A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0 SING1: LCALL DELAY JB F0,FOR AJMP NEXT FOR:CLR TR0 JB F0,$ AJMP NEXT END0: CLR TR0 MOV A,22H CJNE A,#N,WW MOV 22H,#01H MOV R7,#00H MOV OUT_NUM,#11111001B AJMP WWW WW:MOV A,R7

22 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A POP DPL POP DPH WWW:SETB EA AJMP START0 F_T0:MOV TH0,21H MOV TL0,20H CPL OUT RETI NEXT_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#N,Q MOV R7,#00H MOV 22H,#01H AJMP BACK Q: INC 22H MOV A,R7 ADD A,#4 MOV R7,A BACK: MOV R4,#00H

23 MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B ,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA RETI LAST_SONG: PUSH ACC PUSH DPH PUSH DPL CLR EA MOV A,22H CJNE A,#1,QQ MOV 22H,#N MOV B,#4

24 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 QQ: DEC 22H MOV A,R7 SUBB A,#4 MOV R7,A BACK2: MOV R4,#00H MOV A,22H MOV DPTR ,#OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A MOV B,R0 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0 ,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR MOV 26H ,A DEC R4 MOV R0,B POP DPL POP DPH POP ACC SETB EA

25

RETI START_PAUSE: CPL F0 JB F0,RETURN SETB TR0 RETURN: RETI DELAY: MOV 27H,26H D2: D3:

MOV 28H,#125 MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RET OUT_TAB: DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3,SONG4,TABLE4,SONG5,TABLE5,SONG6,TABLE6 TABLE1: DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524 SONG1: DB 04H DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,4H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H DB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32 26

H,52H,54H,32H,34H,31H,21H,12H,24H,34H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H DB 22H,0D1H,11H,0E2H,0D2H,0C2H,0C4H,0C4H,32H,52H,52H,32H,62H,05H,61H,54H,31H,52H,31H,12H,31H,32H,54H,52H,32H,52H,52H,32H DB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52H,32H,62H,51H,61H,54H,31H,12H,32H,12H,32H,12H,32H,32H,54H,52H

DB DB DB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14H 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,34H,31H,21H,12H,24H,24H DB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4H TABLE2: DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178 SONG2: DB 02H DB 04H,94H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02H

02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H DB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H, 27

DB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8H DB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24H DB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,0D8H,78H,28H,38H,34H,24H

DB DB DB

58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H, 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H 94H,98H,98H,08H 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H 02H DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H

DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8H DB 0C8H,0C8H,0C8H,08H DB 00H DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,DB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 SONG3: DB 03H DB 28

04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54H DB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04H DB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54H DB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H DB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04H DB 04H,04H,04H,04H DB 00H TABLE4: DW 64260,64400,64524,64580 ,64684,64777,64280,64898,64968,65030,65058,65110,65157,65178,65217 SONG4: DB 04H

DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H 29

DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 0C4H,0B4H,04H DB 00H DB 82H,01H,81H,94H,84H TABLE5: DW 64021,64103,64260,64400 ,64524,64580,64684,64777,64820,64898,64968,65030,64934 SONG5:

DB 05H DB 42H,82H,82H,82H,84H,02H,72H DB 62H,72H,62H,52H,48H DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H DB 12H,0A2H,0D2H,92H,88H DB 82H,0B2H,0B2H,0A2H,84H,02H,72H DB 62H,72H,62H,52H,44H,02H,12H DB 12H,62H,62H,52H,44H,02H,82H DB 72H,62H,52H,32H,48H DB 00H TABLE6: 64021,6103,64260,64400,64524,64580,64624,64777,64820,64898,64958,65030,65058,65110,65157 SONG6: DB 06H

DB 0A2H,0B2H,0D2H,0B2H,0A4H,0B2H,0D2H DB 0B2H,0A2H,82H,72H,88H DB 72H,82H,0A2H,82H,72H,62H,42H,62H DB 0A4H,02H,0B2H,0A4H,84H DB 72H,82H,72H,62H,72H,84H,72H DB 64H,62H,12H,34H,02H,42H DB 38H,38H DW DB 38H,38H 30

DB 44H,02H,32H,44H,64H DB 72H,74H,82H,0A4H,02H,062H DB 0A8H,0A8H DB 0B2H,0B4H,0A2H,84H,82H,72H DB 62H,72H,82H,0A2H,88H DB 72H,74H,62H,42H,32H,32H,62H DB 78H,78H DB 82H,84H,72H,82H,0A2H,84H DB 72H,82H,72H,62H,48H DB 32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H DB 68H,68H DB 0B2H,0B2H,0B2H,0A2H,82H,84H,02H DB 72H,74H,62H,42H,32H,42H,62H DB 78H,78H DB 0A2H,0B2H,0A2H,72H,82H,84H,82H DB 72H,74H,62H,44H,64H DB 0A8H,0A4H,02H,0A2H DB 0A2H,0B1H,0A1H,82H,0A2H,0B4H,0B2H,0C2H DB 0A2H,0B2H,0A2H,82H,78H DB 84H,72H,62H,44H,02H,62H DB 72H,81H,71H,62H,72H,84H,02H,0A2H DB 0B4H,02H,82H,74H,82H,72H DB 68H,68H DB 00H END DB 72H,82H,72H,62H,72H,84H,0A2H 31

第19篇:单片机课程设计

中北大学单片机原理及接口技术课程设计说明书

1 绪论

电子钟已成为人们日常生活中必不可少的物品,广泛用于个人、家庭以及车站、影院、办公室等公共场所,给人们的生活、学习、工作带来了极大的方便。随着电子技术的发展,人们已不再满足于钟表原先最简单的报时,希望出现一些新的功能,诸如日历的显示、闹钟的非接触式止闹、秒表功能、重要日期倒计时显示等,以带来更大的方便,而所有这些,又都是以数字化的电子时钟为基础的。因此,研究数字电子钟及其扩展应用,有着非常现实的意义和实用价值。

单片机是指将微处理器、一定容量的RAM和ROM以及I/O口、定时器等电路集成在一块芯片上的完整计算机系统。89C51单片机是一种低功耗、高性能的,它采用CMOS工艺和高密度非易失性存储器(NURAM)技术,其输出引脚和指令系统都与MCS-51兼容;片内的Flash ROM允许在系统内改编程序或用常规的NURAM编程器来编程。因此,89C51是一种功能强、灵活性高,而且价格合理的单片机,可以方便的利用AT89C51定时器和6位7段数码管,设计一个电子时钟。显示格式位 “XX XX XX”,从左向右分别是:时、分、秒。 1.1 设计目的

利用MCS-51芯片及相关芯片设计数字钟。 1.2 设计内容 1)硬件设计

设计数字钟的电路原理图,用PROTEUS绘制硬件电路。制作实物。 2)软件设计

(1)时、分、秒的设置及显示; (2)画出程序框图; (3)调试与分析。用PROTEUS仿真。

第 1 页

共1 页 中北大学单片机原理及接口技术课程设计说明书

2 硬件设计

2.1 设计的总体思路

硬件系统主要由单片机最小应用系统、LED数码管显示模块、晶振模块、按键模块等组成。在使用单片机的过程中必定会使用单片机的最小系统,由于我购买的单片机内部没有晶振,所以设计了外接的晶振模块。鉴于本次课程设计要求制作数字钟,所以使用了六位7段数码管来显示“XX XX XX”,从左向右分别是:时、分、秒。除了能上电复位,还设计了用三个按键实现时、分、秒的调制,使用方便灵活。 2.2 单片机最小系统

对51系列单片机来说,单片机+晶振电路+复位电路,便组成了一个最小系统。见图2.1。

图2.1 2.3 晶振模块

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

第 2 页

共2 页 中北大学单片机原理及接口技术课程设计说明书

图2.2 2.4 按键模块

用三个按键实现对时分秒的设置,其中一个按键实现对时分秒的控制,接P1.4口,另外两个按键接单片机的P1.5和P1.6口实现加一和减一的功能。 2.5 LED数码管显示模块

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

将数码管的位选信号接P2口的六个位,段选信号接P0口的八个位。再通过Keil软件以及51C语言编程实现数字钟的功能。本系统利用6位LED数码管显示时间,共阴极结构,当要显示某个数字时只要将数字所对应的引脚送入低电平。 2.6 硬件连接图

通过对设计电路的各个模块的分析,可以用PROTEUS绘制硬件电路。如图2.3所示。

第 3 页

共3 页 中北大学单片机原理及接口技术课程设计说明书

图2.3 2.7制作实物

(见附录A)

第 4 页

共4 页 中北大学单片机原理及接口技术课程设计说明书

3 软件设计

单片机最主要的功能是通过程序来实现各种功能,有了硬件的描述,再加上软件的编程,通过不断的调试与修改程序就能实现本次课程设计的目的。 3.1 程序流程图

系统总的流程图,见图3.1。

图3.1 3.2 调试与分析

由于在焊接实物之前,我大量查阅了资料,弄明白了此次课程设计任务的基本原理,对原理有了基本的认识后,就开始了焊接工作。虽然焊接花费了我大量的时间,但是在焊好以后上电时,所有的数码管都亮,说明焊接连线没有短路情况。

硬件连接好以后就是软件编程,但是编写程序中遇到了挺多问题,比如:编写程序是没有消除抖动。在同学的帮助下,使得数码管能正常实现数字钟的功能。 3.3 源程序

(见附录B)

第 5 页

共5 页 中北大学单片机原理及接口技术课程设计说明书

4 心得与结论

本次课程设计以AT89C51为核心部件,实现时间的设置功能。通过六位7段数码管显示可方便地校对时间,利用Keil软件编程完成时钟的功能。

通过实物的焊接以及软件的仿真和编写程序基本完成了数字电子钟的功能,尽量做到了硬件电路简单稳定,减小电磁干扰和其它环境干扰,充分发挥了软件编程的优点,减小了因器件精度不够引起的误差。由于时间有限和本身知识水平的局限,我认为此次设计还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定等。

第 6 页

共6 页 中北大学单片机原理及接口技术课程设计说明书

参考文献

[1] 杨文龙.单片机原理及应用[M].西安电子科技大学出版社,1993.[2] 李朝青.单片机原理及接口技术[M].北京航空航天大学出版社,2003.[3] 胡汉才.单片机原理及系统设计[M].清华大学出版社,2003.[4] 杨忠煌,黄博俊,李文昌.单芯片8051实务与应用[M].中国水利水电出版社,2001.[5] 王守中,51单片机开发入门与典型实例[M].人民邮电出版社.[6] 黄文梅.系统分析与仿真:MATLAB语言及应用[M].国防科技大学出版社,1999.[7] 阎石.数字电子技术(第五版)[M].北京高等教育出版社,2006.[8] 蔡明文,冯先成.单片机课程设计[M].华中科技大学出版社,2007.[9] 陈明萤.8051单片机课程设计实训材料[M].清华大学出版社,2004.[10] 李可为.数字钟电路及应用[M].电子工业出版社,1996.[11] 夏继强,沈德金.单片机实验与实践教程

(二)[M]北航出版社,2001.[12] 张红润,蓝清华.单片机应用技术教程[M]清华大学出版社,1997.[13] 周立功.单片机实验与实践[M]北京航空航天大学出版社,2004.[14] 何立民.单片机应用文集

(一)[M].北京航空航天大学出版社,1991.[15] 方大千,鲍俏伟.使用电子控制电路[M].国防科技出版社,2003.[16] 曾繁泰.EDA工程概论[M].清华大学出版社,2002.[17] 谭会生,张昌凡.EDA技术及应用[M].西安电子科技大学出版社,2004.[18] 李强.键盘接口程序计数[J].电子设计出版社,2003.[19] 肖来胜.单片机技术实用教程[M].华中科技大学出版社,2004.[20] 杨晓川.Portel设计指导教程[M].清华大学出版社,2003.

第 7 页

共7 页 中北大学单片机原理及接口技术课程设计说明书

致谢

首先,很感谢学院给我们电气工程及其自动化专业的学生一次把理论加深的机会,使得我们更好的理解《单片机原理及接口技术》这门课程,通过实物的焊接以及软件仿真使得自己的动手能力有了一定的提高;其次,虽然这次课程设计是每个人制作一个实物,但是大家一起讨论,分析,最终调试成功,使大家的思维更加开阔;最后,感谢余老师的研究生给予我们焊接工具的支持。

第 8 页

共8 页

中北大学单片机原理及接口技术课程设计说明书

附录A

制作的实物照片

第 9 页

共9 页 中北大学单片机原理及接口技术课程设计说明书

附录B

源程序清单 #include #define uint unsigned int #define uchar unsigned char uint hhh,mmm,; uint status; //函数声明

void delayMS(uint t) ; void keyproce(unsigned char key); void display(); void timer0(); main() //主函数 { ucharsegcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0,1,2,3,4,5,6,7,8,9 uchar dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管位选码 buffer[]={0,0,0,0,0,0,0,0}; bit keyrel; uchar buf; uchar keyin; keyrel=1; buf=0xff; TMOD=0x01; //T0工作在方式1,16位计数器 TH0=(65536-1000)/256;// 定时器0设置延时1ms中断初始值 TL0=(65536-1000)%256; TR0=1; IE=0x82; //开定时器0中断

第 10 页

共10 页 中北大学单片机原理及接口技术课程设计说明书

status=0; //延时函数

void delayMS(uint t) // 晶振频率12MHZ { uint i;

while(t--)

for(i=0;i

{ keyin=P1&0xf0; if(keyin!=0xf0) {

delayMS(10);

if(keyin!=0xf0)

{

if(keyrel==1)

{

keyrel=0;

buf = keyin;

}

else

{ keyrel=1; keyproce(buf); //

buf = 0xff; } } else

用来暂时存放键值

调用按键处理函数

第 11 页共11 页 //buf

中北大学单片机原理及接口技术课程设计说明书

{

keyrel=1; keyproce(buf); buf=0xff; } display(); } } //按键处理函数

void keyproce(unsigned char key) //键值处理,正常计时,设置时分秒 { switch (key) { case 0xe0:status++; //按下设置键 if (status>=4) status = 0;

break; case 0xd0:switch(status) //按下加1键,3种模式下加1

{

case 0x01:if(hhh

else hhh=0; break; case 0x02:if(mmm

else mmm=0; break; case 0x03:if(

else =0; break; } break; case 0xb0:switch(status) //按下减1键 { case 0x01:if(hhh>0) hhh--;

else hour=23; break;

第 12 页

共12 页 中北大学单片机原理及接口技术课程设计说明书

case 0x02:if(mmm>0) mmm--;

else min=59; break;

case 0x03:if(>0) --;

else =59; break;

} break; default:break; } } //数码管显示函数 void display() { uchar i;

//正常计时显示

{

buffer[0]=hhh/10; // 显示时的十位

buffer[1]=hhh%10 // 显示时的个位

buffer[2]=mmm/10; // 显示分的十位

buffer[3]=mmm%10; // 显示分的个位

buffer[4]=/10; // 显示秒的十位

buffer[5]=%10; // 显示秒的个位

for(i=0;i

{

P0=segcode[buffer[i]];

P2=dispbit[i];

delayMS(1); //防止数码管显示的时候闪动

P2=0xff; //

P0=0xff;

}

第 13 页共13 页

中北大学单片机原理及接口技术课程设计说明书

} } //定时器0中断函数

void timer0() interrupt 1 using 2 { static uint count; TH0=(65536-1000)/256; // 定时器0设置初始值1ms中断初始值 TL0=(65536-1000)%256; TR0=1; count++; //正常计时

if(count>=1000) // 定时 1S 到,以下为时钟的正常走钟逻辑 { count=0; ++; if(>60) { =0; mmm++; if(mmm>60) { mmm=0; hhh++; if(hhh>24) { hhh=0; }

} } }

}

第 14 页共14 页

第20篇:单片机课程设计

镇江高等专科学校课程设计1 项目要求

基于AT89S51单片机的密码锁设计,具体功能如下: (1)总共可以设置8位密码,每位密码值范围为1~8。 (2)用户可自行设定和修改密码。 (3)按每个密码时都有声音提示。

(4)若键入的8位开锁密码不完全正确,则报警5s已提醒他人注意。

(5)开锁密码连续错3次要报警1分钟,报警期间输入密码无效,以防窃贼多次试探密码。

(6)键入的8位开锁密码完全正确才能开锁,开锁时要有1s的提示音。 (7)电磁锁的电磁线圈每次充电5s,然后恢复初态。

(8)密码键盘上只允许有8个密码按键。锁内有备用电池,只有内部上电复位才能设置或修改密码,因此,仅仅在门外按键是不能修改或设置密码的。 (9)密码设置完毕后要有2s的提示音。

2 硬件设计

2.1 设计思路

按照系统设计的要求和功能,将系统分为主控模块;按键扫描模块;蜂鸣器;电源电路;复位电路晶振电路;驱动电路几个模块,系统组成框图如图1-1所示。主控模块采用AT89S51单片机。

电源电路复位电路主控模块晶振电路AT89S51按键扫描模块驱动器蜂鸣器 图1-1 基于AT89S51单片机的密码锁组成框图 镇江高等专科学校课程设计2.2 硬件图及说明(硬件图见图1-2,)

元件型号单片机晶振电容型号数量/个用途元件型号蜂鸣器电阻型号数量/个用途AT89S52 1 控制核心12MHz 1 晶振电路30pF 2 晶振电路1 报警电路1kΩ10kΩ4.7kΩ1 上拉电路1 复位电路1 放大电路电阻电阻继电器电源电解电容20uF/10V 1 复位电路按键三极管二极管9 按键电路8550 2 放大电路IN4004 1 5V 1 控制对象+5V/0.5A 1 提供+5V电源 图1-3 基于AT89S51单片机的密码锁元件清单

注:1.AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

2.蜂鸣器的工作原理:

3 软件设计

2.1 设计思路 镇江高等专科学校课程设计应位置的,分析程序时可以仔细对照参考。 该密码锁中RAM存储单元的分配方案如下所示

如图1-3所示给出了该单片机密码锁电路的软件软件流程图。图中AA1~AA8以及START,SET,SAVE是程序中的标号,是为了理解程序而专门标在流程图的对 31H~38H;依次存放8位设定的密码,首位密码存放在31H单元中。  R0:只指向密码地址  R2;已经输入密码的位数

 R3:存放允许的错码次数3与实际错码次数的差值。  R4~ R7:延时用。  00H:错码标志位。

对于ROM存储单元的分配,由于程序比较短,而且占用的存储空间的较少,因此,在无特殊要求时,可以从0030H单元(其他地址也可以)开始存放主程序。 3.2 程序流程图

开始初始化1s提示音等待设置密码NN有键按下?Y短音提示保存设置密码N是否够8位?Y长音提示错误次数清零错误标识清零N有键按下?Y短音提示密码对否?Y是否够8位?Y标志=1?N开锁并长音提示延时锁恢复错误清零错3次?Y报警1 min错误次数清零报警5s错误标志清零Y错误次数加1NN错误标志置1 图1-4 基于AT89S51单片机的密码锁程序流程图

3.3 程序清单(注释)

LOC OBJ LINE SOURCE

0000 1 ORG 0000H 0000 0130 2 AJMP START 0030 3 ORG 0030H 镇江高等专科学校课程设计0030 11A1 4 START:ACALL BP 0032 7831 5 MOV R0,#31H 0034 7A08 6 MOV R2,#8 0036 7590FF 7 SET1:MOV P1,#0FFH 0039 E590 8 MOV A,P1 003B B4FF02 9 CJNE A,#0FFH,L8 003E 0136 10 AJMP SET1

0040 11B0 11 L8: ACALL DELAY 0042 B4FF02 12 CJNE A,#0FFH,SAVE 0045 0136 13 AJMP SET1 0047 11A1 14 SAVE: ACALL BP 0049 F6 15 MOV @R0,A 004A 08 16 INC R0 004B DAE9 17 DJNZ R2,SET1 004D 7D10 18 MOV R5,#16 004F 11A1 19 D2S: ACALL BP 0051 DDFC 20 DJNZ R5,D2S 0053 7831 21 MOV R0,#31H 0055 7B03 22 MOV R3,#3 0057 7A08 23 AA1: MOV R2,#8 0059 7590FF 24 AA2: MOV P1,#0FFH 005C E590 25 MOV A,P1 005E B4FF02 26 CJNE A,#0FFH, L9 0061 0159 27 AJMP AA2 0063 11B0 28 L9:ACALL DELAY 0065 B4FF02 29 CJNE A,#0FFH,AA3 0068 0159 30 AJMP AA2 006A 11A1 31 AA3: ACALL BP 006C C3 32 CLR C 006D 96 33 SUBB A, @R0 006E 08 34 INC R0 006F B40002 35 CJNE A,#00H,AA4 0072 0176 36 AJMP AA5 0074 D200 37 AA4: SETB 00H 镇江高等专科学校课程设计0076 DAE1 38 AA5: DJNZ R2,AA2 0078 20000E 39 JB 00H,AA6 007B C2B5 40 CLR P3.5 007D 7D08 41 L3:MOV R5,#8 007F 11A1 42 ACALL BP 0081 DCFA 43 DJNZ R4,L3 0083 7B03 44 MOV R3,#3

0085 D2B5 45 SETB P3.5 0087 0157 46 AJMP AA1 0089 DB0C 47 AA6: DJNZ R3,AA7 008B 7D18 48 MOV R5,#24 008D 7CC8 49 L5: MOV R4,#200 008F 11A1 50 L4: ACALL BP 0091 DCFC 51 DJNZ R4,L4 0093 DDF8 52 DJNZ R5,L5 0095 7B03 53 MOV R3,#3 0097 7D28 54 AA7: MOV R5,#40 0099 11A1 55 ACALL BP 009B DDFA 56 DJNZ R5,AA7 009D C200 57 AA8: CLR 00H 009F 0157 58 AJMP AA1 00A1 C2B7 59 BP: CLR P3.7 00A3 7FFA 60 MOV R7,#250 00A5 7E7C 61 L2: MOV R6,#124 00A7 DEFE 62 L1: DJNZ R6,L1 00A9 B2B7 63 CPL P3.7 00AB DFF8 64 DJNZ R7,L2 00AD D2B7 65 SETB P3.7 00AF 22 66 RET 00B0 7F14 67 DELAY:MOV R7,#20 00B2 7E7D 68 L7: MOV R6,#125 00B4 DEFE 69 L6: DJNZ R6,L6 00B6 DFFA 70 DJNZ R7,L7 00B8 22 71 RET 镇江高等专科学校课程设计 72 END 3.4 程序调试

按键AN1~AN7分别代表数码1~7,按键AN0代表8。在没有键按下时,P1.0~P1.7全是高电平1;若某个键被按下,相应的口就变为低电平0.加入设定的密码是612345678,当按键AN6被按下时,P1.6变为低电平,P1端口其余口线为高电平,此时从P1口输入的数值为10111111,存到31H单元的密码值就是10111111,也就是BFH。以此类推,存到32H至38H单元的密码值分别是FDH,FBH,F7H,EFH,DFH,7FH,FEH。开锁时必须先按AN6,使从P1口读入的第一个密码值与31H单元存储的设定值相同,再按顺序按AN1 ,AN2,AN3, AN4, AN5, AN7 ,AN0才能开锁。否则不能开锁,同时开始报警。

4 小结

通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰

参考文献:(另起一页)

【1】杨居义。单片机课程设计指导。北京:北京大学出版社,2009。

【2】王效华,张咏梅。单片机原理与应用。北京:北京交通大学出版社,2007。 【3】杨光义,马宁,靳光明等。单片机原理与工程应用。北京:清华大学出版社,2009。

《单片机课程设计指导.doc》
单片机课程设计指导
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

相关推荐

实施方案自查报告整改措施先进事迹材料应急预案工作计划调研报告调查报告工作汇报其他范文
下载全文