1、单片机课设11 设计的意义最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。 “单片机原理及应用课程设计”是电子类专业的学科基础科,它是继“汇编语言程序设计” , “接口技术”等课程之后开出的实践环节课程。与此同时,现代社会越来越多的场所会涉及到温度与湿度并将其显示。由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,例如:冬天温度为 18 至 2
2、5,湿度为 30%至 80%;夏天温度为 23 至 28,湿度为 30%至 60%。在此范围内感到舒适的人占 95%以上。在装有空调的室内,室温为 19 至 24,湿度为 40%至 50%时,人会感到最舒适。如果考虑到温、湿度对人思维活动的影响,最适宜的室温度应是工作效率高。18,湿度应是40%至 60%,此时,人的精神状态好,思维最敏捷。所以,本课程设计就是通过单片机驱动 LCD1602,液晶显示温湿度,通过此设计,可以发现本设计有一定的扩展性,而且可以作为其他有关设计的基础。单片机课设22 设计原理2.1 设计目标2.1.1 基本功能检测温度、湿度显示温度、湿度过限报警2.1.2 主要技术
3、参数 温度检测范围: -30至+55测量精度: 2湿度检测范围: 20%-90%RH检测精度: 5%RH显示方式: 温度:四位显示 湿度:四位显示报警方式: 三极管驱动的蜂鸣器报警2.2 设计原理温湿度监测系统要满足以下条件:温湿度监测系统能完成数据采集和处理、显示、串行通信、输出控制信号等多种功能。由数据采集、数据调理、单片机、数据显示等4个大的部分组成。该测控系统具有实时采集(检测粮库内的温湿度)、实时显示(对监测到的进行显示) 、实时警报(根据监测的结果,超出预设定的值的进行蜂鸣警告)的功能。传感器是实现测量首要环节,是监测系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和
4、转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。一般温湿度控制系统中的温湿度测量均采用热敏电阻与湿敏电容,这种传统的模拟式温湿度传感器一般都需要设计信号调理电路并经过复杂的校准和标定过程,因此测量精度难以保证,且在线性度、重复性、互换性等方面也存在单片机课设3一定问题。这种传感器只适合那些测量点数较少,对精度要求不高的场合。因此设计出一款精度高、稳定性好、成本低的温湿度检测控制系统将具有一定的市场。2.2.1 温湿度传感器的选择DHT11 数字温湿度传感
5、器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在 OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产
6、品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。2.2.2 信号采集通道的选择 在本设计系统中,温度输入信号为 4 路的模拟信号,这就需要多通道结构采用多路分时的模拟量输入通道。这种结构的模拟量通道特点为:对ADC、 S/H 要求高。处理速度慢。硬件简单,成本低。软件比较复杂。如图 1所示:信号调理电路信号调理电路信号调理电路多路切换器采样/保持器A/D转换器接口 CPU图 1 多路分时的模拟量输入通道单片机课设42.2.3 系统的总体框图系统的总体设计框图如图 2 所示:本设计由信号采集、信号分析和信号处理三个部分组成的。(一) 信号采集 由 DHT11 温湿度传感器和
7、多路模式选择开关组成;(二) 信号分析 由 A/D 转换器和单片机 80C51 组成;(三) 信号处理 由串行口 LCD 显示器和报警系统等组成。DHT11温湿度检测多 路模 式选 择开 关单片机串行口与LCD报警电路ADC0832图 2 系统总体框图单片机课设53 主要芯片简介3.1 DHT11 数字传感器3.1.1 主要特性DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。因此该产品具有
8、品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在 OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。3.1.2 应用领域该 DHT11 可以用于暖通空调、测试及检测设备、汽车、数据记录器、消费品、自动控制、湿度调节器及医疗等应用领域。3.1.3 引脚图 DHT11 有四个引
9、脚,3 号引脚一般悬空,如图 3 所示。DHT11 的供电电压为 35.5V。 传 感器上电后 , 要等待 1s 以越过 不稳定 状态在 此期间 无需发送任何指令。 电 源引 脚 ( VDD, GND) 之间可增加一个 100nF 的 电 容 , 用 以 去 耦 滤 波 。建议连接线长度短于 20 米时用 5K 上拉电阻,大于 20 米时根据实际情况使用合适的上拉电阻。单片机课设63.1.4 封装信息封装图如图 4 所示:3.2 液晶显示器 LCD1602在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,
10、显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。发光管和LED 数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。 图 3 DHT11 引脚图图 4 DHT11 封装图单片机课设7在单片机系统中应用晶液显示器作为输出器件有以下几个优点:(一)显示质量高(二)数字式接口(三)体积小、重量轻(四)功耗低3.2.1 液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直
11、接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA 移动通信工具等众多领域。3.2.2 液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。3.2.3 液晶显示器各种图形的显示原理首先是液晶的线段的显示。点阵图形式液晶由 MN 个显示单元组成,假设 LCD 显示屏有 64 行,每行有 128 列,每 8 列对应 1 字节的 8
12、位,即每行由16 字节,共 168=128 个点组成,屏上 6416 个显示单元与显示 RAM 区 1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由 RAM 区的 000H00FH 的 16 字节的内容决定,当(000H )=FFH 时,则屏幕的左上角显示一条短亮线,长度为 8 个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H) =FFH,(001H )=00H,( 002H)=00H,(00EH)=00H ,(00FH)=00H 时,则在屏幕的顶部显示一条由 8 段亮线和 8 条暗线组成的虚线。这就是 LCD 显示的基本原理。其
13、次是液晶字符的显示。用 LCD 显示一个字符时比较复杂,因为一个字符由 68 或 88 点阵组成,既要找到和显示屏幕上某几个位置对应的显示 RAM区的 8 字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,单片机课设8为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在 LCD 上开始显示的行列号及每行的列数找出显示 RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。3.2.4 LCD1602 的基本参数及引脚功能1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,
14、带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图 5所示:LCD1602 的主要技术参数:1、显示容量:162 个字符2、芯片工作电压:4.55.5V3、工作电流:2.0mA(5.0V)4、模块最佳工作电压:5.0V5、字符尺寸:2.954.35 (WH)mm引脚功能说明LCD1602 采用标准的 14 脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如图 6 所示:图 5 LCD1602 尺寸图单片机课设9编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 数据2 VDD 电源正极 10 D3 数据3 VL 液晶显示偏压 11 D4 数据4 R
15、S 数据/命令选择 12 D5 数据5 R/W 读/写选择 13 D6 数据6 E 使能信号 14 D7 数据7 D0 数据 15 BLA 背光源正极8 D1 数据 16 BLK 背光源负极图 6:引脚接口说明表第 1 脚:VSS 为地电源。第 2 脚:VDD 接 5V 正电源。第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 R
16、S 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。图 6 引脚接口说明单片机课设10第 714 脚:D0D7 为 8 位双向数据线。第 15 脚:背光源正极。第 16 脚:背光源负极。3.2.5 LCD1602 的指令说明及时序1602 液晶模块内部的控制器共有 11 条控制指令,如图 7 所示:序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D01 清显示 0 0 0 0 0 0 0 0
17、 0 12 光标返回 0 0 0 0 0 0 0 0 1 *3 置输入模式 0 0 0 0 0 0 0 1 I/D S4 显示开/关控制 0 0 0 0 0 0 1 D C B5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *6 置功能 0 0 0 0 1 DL N F * *7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址8 置数据存贮器地址 0 0 1 显示数据存贮器地址9 读忙标志或地址 0 1 BF 计数器地址10写数到 CGRAM 或DDRAM) 1 0要写的数据内容11从 CGRAM 或 DDRAM读数 1 1读出的数据内容1602 液晶模块的读写操作、
18、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电平)指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。指令 2:光标复位,光标返回到地址 00H。图 7 控制命令表单片机课设11指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令 4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令 5:光标或显示移位 S/C:高电平时移动显
19、示的文字,低电平时移动光标。指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符。指令 7:字符发生器 RAM 地址设置。指令 8:DDRAM 地址设置。指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令 10:写数据。指令 11:读数据。3.2.6 LCD1602 的 RAM 地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不
20、忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图 8 是 1602 的内部显示地址。例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最图 8 LCD1602 内部显示地址单片机课设12高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态
21、。1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A ”的代码是 01000001B(41H),显示时模块把地址 41H 中的点阵字符图形显示出来,我们就能看到字母“A”。3.2.7 硬件原理图1602 液晶显示模块可以和单片机 AT89C51 直接接口,电路如图 9 所示:3.3 单片机 89C51为了设计此系统,我们采用了 80C51 单片机作为控制芯片。89C51 是MCS-51 系列单片机中 CHMOS 工艺的一个典型品种
22、;其它厂商以 8951 为基图 9 硬件原理图单片机课设13核开发出的 CMOS 工艺单片机产品统称为 89C51 系列。该系列单 片 机 是采用高性能的静态 89C51 设计由先进 CMOS 工艺制造并带有非易失性 Flash 程序存储器全部支持 12 时钟和 6 时钟操作 P89C51X2 和 P89C52X2/54X2/58X2 分别包含 128 字节和 256 字节 RAM 32 条 I/O 口线 3 个 16 位定时/计数器 6 输入 4优先级嵌套中断结构 1 个串行 I/O 口可用于多机通信 I/O 扩展或全双工 UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提
23、供很宽的操作频率范围,频率可降至 0。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结 CPU 但 RAM 定时器,串口和中断系统仍然工作,掉电模式保存 RAM 的内容,但是冻结振荡器导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据,运行可从时钟停止处恢复。3.3.1 89C51 的基本结构89C51 的微处理器(CPU ); 运算器;累加器 ACC ;寄存器 B ;程序状态字寄存器 PSW;控制器;程序计数器 PC ;指令寄存器 IR ;定时与控制逻辑;89C51 的片内存储器;内部 ROM 容量 4K 字节;内部 RAM 容量 128 字节;89
24、C51 的 I/O 口及功能单元;四个 8 位的并行口,即 P0P3。它们均为双向口,既可作为输入,又可作为输出。每个口各有 8 条 I/O 线; 有一个全双工的串行口(利用 P3 口的两个引脚 P3.0 和 P3.1);有 2 个 16 位的定时/计数器 ;有 1 套完善的中断系统;89C51 的特殊功能寄存器(SFR);低功耗的闲置和掉电模式;片内振荡器和时钟电路;单片机课设143.3.2 89C51 的引脚图89C51 的引脚图如图 10 所示:89C51 的制作工艺为 CMOS,采用 40 管脚双列直插 DIP 封装,引脚说明如下:VCC:供电电压。 GND:接地。 P0 口:P0 口
25、为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P1 口的管脚第一次写 1 时,被定义为高阻输入。 P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉高。 图 10 89C51 引脚图单片机课设15P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接收输出 4TTL 门电流。 P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLA
26、SH 编程和校验时, P1 口作为第八位地址接收。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口:
27、P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个TTL 门电流。当 P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL )这是由于上拉的缘故。 P3 口也可作为 AT89C51 的一些特殊功能口,如下所示: 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(外部数据存储器读选通
28、);P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时,ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外
29、,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。 单片机课设16/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。 /EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1 时,/EA 将内部锁定为 RESET;当/EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的
30、输入。 XTAL2:来自反向振荡器的输出。3.3.3 89C51 的存储器配置89C51 的存储器配置如图 11 所示:对于程序存储器,与 ROM 密切相关的两个引脚是地址锁存允许信号端和外部程序存储器允许输出信号端。当 ROM 容量不够时,尽量选择高容量存储器空间的单片机,如 89C52,89C54,89C58 等,应避免外扩程序存储器,因为会增加硬件负担,通过 16 位 PC 寻址,最大可寻址 64kB 地址空间。数据存储器用于存放运算中间的结果、数据暂存、缓冲、标志位、待测程序等功能。片内的 128B 的 RAM 地址为 00H7FH ,供用户做 RAM 用,但是图 11 89C51 存
31、储器配置单片机课设17在这中间的前 32 单元,00H1FH 即引用地址寻址做用户 RAM 用,常常做工作寄存器区,分做四组,每组由 8 个单元组成通用寄存器 R0R7,任何时候都由其中一组作为当前工作寄存器,通过 RS0,RS1 的内容来决定选择哪一个工作寄存器。低 128 字节中的 20H2FH 共 16 字节可用位寻址方式访问各位,共128 个位地址,30H7FH 共 80 个单元为用户 RAM 区,作堆栈或数据缓冲用,片内 RAM 不够用时,须扩展片外数据存储器。此时单片机通过 P2 口和 P0 口选出 6 位地址,使用 ALE 作低 8 位的锁存信号,再由 P0 口写入或读出数据。写
32、时用 ,读时用 做外部数据存储器的选通信号。3.3.4 89C51 的工作模式89C51 有四种工作模式:模式 0,模式 1,模式 2,模式 3。模式 0:选择定时器的高 8 位和低 5 位组成一个 13 位定时器/计数器。TL低 5 位溢出时向 TH 进位,TH 溢出时向中断标志位 TF 进位,并申请中断。定时时间 t=(213-初值) 振荡周期12;计数长度位 213=8192 个外部脉冲。模式 1:与模式 0 的唯一差别是寄存器 TH 和 TL 以全部 16 位参与操作。定时时间 t=(216-初值) 振荡周期12;计数长度位 216=65536 个外部脉冲。模式 2:把 TL0 和 T
33、L1 配置成一个自动重装载的 8 位定时器/计数器。TL用作 8 位计数器,TH 用以保存初值。TL 计数溢出时不仅使 TF0 置 1,而且还自动将 TH 中的内容重新装载到 TL 中。定时时间 t=(28-初值)振荡周期 12;计数长度位 28=256 个外部脉冲。模式 3:对 T0 和 T1 不大相同。若设 T0 位模式 3,TL0 和 TH0 被分为两个相互独立的 8 位计数器。TL0 为 8 位计数器,功能与模式 0 和模式 1 相同,可定时可计数。TH0 仅用作简单的内部定时功能,它占用了定时器 T1 的控制位 TR1 和中断标志位 TF1,启动和关闭仅受 TR1 控制。定时器 T1
34、 无工作模式 3,但 T0 在工作模式 3 时 T1 仍可设置为 02。3.3.5 89C51 的系统时钟设计时钟电路是用来产生 89C51 单片机工作时所必须的时钟信号,89C51 本身就是一个复杂的同步时序电路,为保证工作方式的实现,89C51 在唯一的时钟信号的控制下严格的按时序执行指令进行工作,时钟的频率影响单片机的速度和稳定性。通常时钟由于两种形式:内部时钟和外部时钟。单片机课设18我们系统采用内部时钟方式来为系统提供时钟信号。89C51 内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为 XTAL1 和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个
35、自激励振荡器。电路中的 C1、C2 的选择在 30PF 左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为在 1.2MHZ12MHZ 之间,频率越高单片机的速度就越快,但对存储器速度要求就高。为了提高稳定性我们采用温度稳定性好的NPO 电容,采用的晶振频率为 12MHZ。时钟电路如图 12 所示:图 12 系统时钟电路单片机课设194 硬件与软件4.1 硬件设计4.1.1 硬件要求根 据 设 计 要 求 确 定 了 系 统 的 总 体 方 案 , 整 个 系 统 由 单 片 机 、 温 湿 度传 感 器 、 显 示 模块 和 报 警 器 等 几 部 分 组 成 。 温 湿 度 传 感
36、 器 监 测 值 传 输 给 单 片 机 ,并 液 晶 显 示 。 当 单 片 机监 测 到 的 数 值 超 出 所 设 定 阈 值 时 , 驱 动 蜂 鸣 器 报 警。4.1.2 具体硬件设计单 片 机 是 整 个 系 统 的 控 制 中 枢 , 它 指 挥 外 围 器 件 协 调 工 作 , 从 而 完 成 特 定 的 功能 。 硬 件 实 现 上 采 用 模 块 化 设 计 , 每 一 模 块 只 实 现 一 个 特 定 功 能 , 最 后 再 将 各 个 模块 搭 接 在 一 起 。 这 种 设 计 方 法 可 以 降 低 系 统 设 计 的 复 杂 性 。 系 统 电 路 原 理 图
37、 如 图13 所 示 。本 系 统 主 要 硬 件 设 计 包 括 电 源 电 路 、 蜂 鸣 器 电 路 、 晶 振 电 路 、 复 位 电 路 、LCD 显 示 电 路以 及 温 湿 度 传 感 器 电 路 。控 制 电 路 的 核 心 器 件 AT89C52 单 片 机 , 属 于 MCS-51 系 列 。 AT89C52 是 一 种 低 功耗 、 高 性 能 的 CMOS8 位 微 控 制 器 , 具 有 8K 在 系 统 可 编 程 Flash 存 储 器 , 采 用 的 工 艺 是Atmel 公 司 的 高 密 度 非 易 失 存 储 器 技 术 ; 片 上 Flash 允 许 程
38、 序 存 储 器 在 系 统 可 编 程 , 亦适 于 常 规 编 程 器 ; 在 单 芯 片 上 , 拥 有 灵 巧 的 8 位 CPU 和 在 系 统 可 编 程 Flash, 使 得AT89C52 为 众 多 嵌 入 式 控 制 应 用 系 统 提 供 高 灵 活 、 超 有 效 的 解 决 方 案 ; 价 格低 廉 、 性 能可 靠 、 抗 干 扰 能 力 强 。 因 此 广 泛 应 用 于 工 业 控 制 和嵌 入 式 系 统 中 。单片机课设20系 统 的 蜂 鸣 器 电 路 、 振 荡 电 路 、 复 位 电 路 如 图 14、 图 15、 图 16 所 示 。图 13 系 统
39、电 路 原 理 图图 14 蜂 鸣 器 电 路单片机课设21蜂 鸣 器 额 定 电 流 IB30mA, 而 对 于 AT89C52 单 片 机 , P1 口 的 灌 电 流 为 1 6mA,拉 电 流 为 60A, 由 此 可 见 , 仅 靠 单 片 机 的 P1 口 电 流 是 不 能 驱 动 蜂 鸣 器 的 , 必 须 使 用集 晶 体 管 放 大 电 路 , 为 了 使 单 片 机 消 耗 的 功 率 更 小 , 所 以 使 用 PNP 型 晶 体 管9012。 AT89C52 采 用 的 晶 振 电 路 采 用 12MHz 的 无 源 晶 振 , 微 调 电 容 大 小 取 30pF。
40、 显 示模 块 选 用 1602 字 符 型 液 晶 模 块 , 是 目 前 工 控 系 统 中 使 用 最 为 广 泛 的 液 晶 屏 之 一 ,电 路 图如 图 17 所 示 。 1602 字 符 型 液 晶 模 块 是 点 阵 型 液 晶 , 驱 动 方 便 , 经 编 码 后 显 示 内 容 多图 15 振 荡 电 路图 16 复位电路单片机课设22样 化 。 系 统 的 输 入 模 块 采 用 中 断 扫 描 的 44 矩 阵 键 盘 , 相 比 定 时 扫 描 方 式 , 提 高 了 MCU的 使 用 效 率 。4.2 软件设计系统软件程序基于 Keil 开发平台,采用 C 语言编
41、写。本程序采用模块化程序方法,主要分为一下两个模块: LCD 初始化显示模块 DHT11 数据采集模块LCD 初始化显示流程图和 DHT11 数据采集流程图分别如图 18、图 19 所示:图 17 LCD1602 电路图单片机课设23图 18 LCD 初始化显示流程图图 19 DHT11 数据采集流程图单片机课设245 设计总结课 程 设 计 是 培 养 学 生 综 合 运 用 所 学 知 识,发 现 ,提 出 ,分 析 和 解 决 实 际 问 题 ,锻 炼 实 践能 力 的 重 要 环 节 ,是 对 学 生 实 际 工 作 能 力 的 具 体 训 练 和 考 察 过 程。 随 着 科 学 技
42、 术 发 展 的日 新 日 异 , 单 片 机 已 经 成 为 当 今 计 算 机 应 用 中 空 前 活 跃 的 领 域 , 在 生 活 中 可 以 说 得是 无 处 不 在 。 因 此 作 为 二 十 一 世 纪 的 大 学 来 说 掌 握 单 片 机 的 开 发 技 术 是 十 分 重 要 的 。回 顾 起 此 次 单 片 机 课 程 设 计 , 我 仍 感 慨 颇 多。 在 接 近 一 星 期 的 日 子 里 , 可 以 说 是苦 多 于 甜 , 虽 然 如 此 , 却 学 到 很 多 很 多 的 的 东 西 , 同 时 还 巩 固 了 以 前 所 学 过 的 知 识 , 并学 到 了
43、 很 多 在 书 本 上 所 没 有 学 到 过 的 知 识 。 通 过 这 次 课 程 设 计 使 我 懂 得 了 理 论 与 实际 相 结 合 的 重 要 性 , 只 有 理 论 知 识 是 远 远 不 够 的 , 只 有 把 所 学 的 理 论 知 识 与 实 践 相 结合 起 来 , 从 理 论 中 得 出 结 论 , 才 能 真 正让 自 己 有 所 了 解 , 有 所 体 会 , 从 而 提 高 自 己 的 实际 动 手 能 力 和 独 立 思 考 的 能 力 。 当 然 , 在 设 计 的 过 程 中 遇 到 了 很 多 问 题 , 但 是 通 过 这 些问 题 , 我 又 能
44、发 现 自 己 的 不 足 之 处 。 虽 然 问 题 重 重 , 但 在 老 师 和 同 学 的 帮 助 下 , 问 题 都得 以 解 决 , 所 以 , 非 常 感 谢 那 些 帮 助 过 我 的 老 师 和 同 学 。总 之 , 通 过 这 次 课 程 设 计 , 我 知 道 了 很 多 , 了 解 了 很 多 , 学 到 了 很 多。单片机课设25参考文献1 何立民.单片机高级教程-应用与设计M.北京航空航天大学出版社,2002.2 徐爱钧.单片机高级语言 C51 Windows 环境编程与应用M.电子工业出版社,2001.3白雪冰,张延林,等.单片机原理及应用M.哈尔滨东北林业大学出
45、版社,2006.4张佳薇,孙丽萍,等.传感器原理与应用M.哈尔滨东北林业大学出版社,2003.单片机课设26附录源程序:#include #define uint unsigned int #define uchar unsigned chartypedef bit BOOL ; sbit io = P10 ;sbit rs = P25; sbit rw = 26 ;sbit ep = P27 ;uchar data_byte;uchar RH,RL,TH,TL;void delay(uchar ms) / 延时子程序uchar i ;while(ms-)for(i = 0 ; i18msio
46、=1;delay1();/20-40usdelay1();delay1();delay1();delay1();uchar receive_byte()/接收一个字节uchar i,temp,count;for(i=0;i8;i+)count=2;while(!io)delay1();delay1();delay1();delay1();if(io=1)temp=1;count=2;while(io)if(count=1)break;data_byte=1;data_byte|=temp;return data_byte;单片机课设30void receive()/接收数据uchar T_H,
47、T_L,R_H,R_L,check,num_check;uchar count;start();/开始信号io=1;if(!io)/读取 DHT11 响应信号count=2;while(!io)/DHT11 高电平 80us 是否结束count=2;while(io)R_H=receive_byte();R_L=receive_byte();T_H=receive_byte();T_L=receive_byte();check=receive_byte();io=0;/拉低延时 50usdelay1();delay1();delay1();delay1();delay1();io=1;num_check=R_H+R_L+T_H+T_L;if(num_check=check)RH=R_H;RL=R_L;TH=T_H;TL=T_L;check=num_check;void main()lcd_init();