单片机水塔水位毕业设计论文基于单片机的水塔水位控制的软硬件设计内容摘要:
P1. 0 和 P1. 1输人.当 P1. 5为高电平时蜂鸣器89C51 32 南京工程学院毕业设计说明书(论文) 第 10 页 报警。 水位超过高警戒水位,单片机控制系统使电机停止转动,向水塔内供水工作也停止。 存储器 扩展接口电路 了便于系统扩展,存放大容量应用程序,系统设计扩展一片程序存储器,用于存放源程序代码。 74LS373 用于锁存地址,单片机的 P0. 0~ P0. 7 通过复用方式分别接锁存器 74LS373 的 DO~ D7 和存储器 2764 的 D0~ D7端,地址锁存信号线 ALE 接锁存器的 OE 端,通过软件设置实现地址和数据信息的传输,锁存器的输出端 O0~ O7与存储器地址线 A0~ A7 相连,剩余的 3根地址线 A8~ A11 接P2. 0~ P2. 2.单片机选通引脚丽接存储器 OE 端,因只扩展一片存储器,片选端 CE 接地。 显示接口电路 发光二极管 LED 显示器是单片机应用系统中常用的廉价输出设备,它由若干个发光二极管组成。 当发光二极管到他时,相应的一个点或一个笔画发光。 控制相应的发光二极管导通就能显示出各种字符,尽管显示的字符形状有些失真,能显示的字符数量也有限,但控制简单,使用方便。 发光二极管的阳极连在一起称为共阳极显示器,阴极连在一起称为共阴极显示器。 共阳极显示器用低电平驱动,而共阴极显示器用高电平驱动。 点亮显示器有静态和动态两种方式。 本文使用的是动态点亮显示器的方法。 所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。 虽然在同一时间只有一位显示器在工作 (点亮 ),但利用人眼的视觉暂留效果和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。 显示器亮度即与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。 调整电流和时间参数,可实现亮度较高较稳定的显示。 若显示器的位数不大于八位,则控制显示器的公共极电位只需一个 8 位 I/O 口(称为扫描口或字位口),控制各位LED 显示器所显示的字形也需要一个 8 位口(称为数据口或字形口)。 南京工程学院毕业设计说明书(论文) 第 11 页 下图 33 为六位共阴极显示器与 8255 的接口示意图。 图中 8255 的端口 A作为扫描口(字位口),经反相驱动器 75452 接显示器公共极,端口 B 作为段 数据口(字形口),经同相驱动器 7407 接显示器的各极。 对于图示的六位显示器,在 89c51 单片机内部 RAM 中设置 6 个显示缓冲单元 ,存放 6 位欲显示的字符数据, 8255 的端口 A 扫描输出总是只有一位是高电平,即 6 位显示器中仅有一位共阴极为低电平(只选中一位),其他位为高电平, 8255 的 B 口输出相应位的显示字符的段数据,使该位显示出相应的字符,其他位为暗。 依次改变端口 A 输出为高电平的位以及端口 B 输出对 应的数据段, 6 位 LED 显示器就显示出缓冲器中字符数据所确定的字符。 当多位 LED 显示时,为了节约 I/O 口,简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个 8 位 I/O 口控制,而各位的共阳极或共阴极分别由相应的 I/O 口线控制,实现各位的分时选通,这就是动态扫描显示方法。 采用动态扫描显示方式,每一位 LED 的选通时间为 1~2ms。 选通时间不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱人眼无法看清;选通时间也不能太长,否则占用 CPU 时间太长。 89C51 图 33 南京工程学院毕业设计说明书(论文) 第 12 页 由于人眼有视觉暂 留现象,只要每位显示时间足够短,就能够造成多位同时亮的假象,每一位显示的时间间隔不能超过 20ms;若时间间隔太长,就会造成闪烁现象。 采用动态扫描方式,降低了功率消耗。 程序中设计了使 8 位 LED 发生 00000000— 11111111— 22222222— — 99999999— 00000000 循环显示。 键盘接口电路 键盘是由若干个按键组成的开关矩阵,它是最简单的单片机输入设备,操作员可以通过键盘输入数据或命令,实现简单的人机通信。 若键盘闭合键的识别是由专用硬件实现的,则 称为编码键盘;若用软件实现闭合键识别的,则称为非编码键盘。 非编码键盘又分为行列式和独立式两种,本文选用非编码键盘中的行列式键盘。 图 34 行列式键盘结构示意图图 键盘接口应具有以下功能: ( 1)键盘扫描功能,即检测是否有键闭合; ( 2)键盘识别功能,即确定被闭合键所在的行列; ( 3)产生相应的键的代码(键值)功能; ( 4)消除按键抖动及对付多键串按(复键)功能。 按键盘示意图中行线 X0X1 通过电阻接 +5V 电源,当键盘没有键闭合 南京工程学院毕业设计说明书(论文) 第 13 页 时所有的行线和列线断开,行线 X0X1 均呈高电平。 当键盘上某键闭合时,按键所对应的行线和列线短路此时该行线的电平将由被短路的列线电平所决定。 如果将行线接至单片机的输入端口,列线接至单片机的输出端口,则在单片机的控制下使列线 Y0 为低电平,其余三根列线 Y Y Y3 均为高电平,然后单片机度输入口状态,若 X0、 X1 均为高电平,则 Y0 这一列上没有键闭合,如果读出的行线状态不全为高电平,则为 低电平的行线和 Y0 相交的键处于闭合状态。 如果 Y0 这一列没有键闭合,紧接着使列线 Y1 为低电平,其余列线为高电平,用同样的方法检查 Y1 这一列有没有键闭合,如此类推。 这种逐行逐列地检查键盘状态的过程称为对键盘的扫描。 CPU 对键盘的扫描可以采用程序控制的随机方式, CPU 空闲时才扫描键盘;也可以采用定时控制方式,每隔一段时 间,对键盘扫描一遍;还可以采用中断方式,当键盘上有键闭合时,向 CPU 请求中断, CPU 响应键盘发出的中断请求,对键盘进行扫描,以识别哪一个键处于闭合状态,并对键输入信息作相应的处理。 CPU 对键盘上的闭 合键号的确定,可以根据行线的状态计算求得,也可以查表求得。 对键盘扫描还应有一个去抖动的过程,即当有键按下时, CPU 不立即对键输入信息作处理,一般过 510ms后再次扫描键盘,如果这个键还是按下,则确定有键按下,此时 CPU 才做出相应的处理。 单片机对键盘扫描时,可以通过读取被按按键的行值和列值计算出关键字,再由关键字得到键值,然后根据键值转到相应的子程序处理。 因此,弄清行值和列值与关键字和键值之间的关系是分析非编码键盘工作原理的关键问题。 表 35 为按键的行列位置分布,有些键具有双重功能,可用键盘操作步骤加以区 别。 36 为键值表。 表 35 按键位置排布 列行 R7 R6 R5 R4 R3 R2 R1 R0 L1 0 1 2 3 4 5 6 7 L0 8 9 → ← C(DEL) A(ENTER) B(EXIT) 南京工程学院毕业设计说明书(论文) 第 14 页 表 36 键值表 键名 关键字 键值 行顺序号 行值 列值 0 0FH 00H 0 01H 0FH 1 0AH 01H 0 01H 1AH 2 0BH 02H 0 01H 1BH 3 0CH 03H 0 01H 1CH 4 0DH 04H 0 01H 1DH 5 0EH 05H 0 01H 1EH 6 01H 06H 0 01H 21H 7 00H 07H 0 01H 20H 8 1FH 08H 1 02H 0FH 9 1AH 09H 1 02H 1AH → 1BH 10H 1 02H 1BH ← 1CH 11H 1 02H 1CH del 1DH 12H 1 02H 1DH EXEC 1EH 13H 1 02H 1EH ENTER 11H 14H 1 02H 21H 判别有键按下的方法是把全“ 1”送到 8255 的 C 口,此时在 所有行线( L0~ L1)上得到 TTL 低电平,然后读取 B 口的列值就可以判断是否有键按下。 若无键按下,所读列值必为 1FH;当读出的列值不等于 1FH 时,则有键按下。 判断按下键所在行列的方法是轮流使 C 口中每条行线变为低电平,读取 B 口的列值,当列值不为 1FH 时,则对应的行值和列值就按按键的列值和行值。 例如:被按按键是图 68 中虚线所包络的键,则 CPU 获得的行值为 02H( L1为低电平)、列值为 17H(R3 为低电平 )。 求取关键字的方法是将行序号左移 4 位。 例如:按键在 L1 行,故行 南京工程学院毕业设计说明书(论文) 第 15 页 序号为 01H,移到高 4 位后为 10H。 该按键 在 R3 列,列值为 17H,其低 4位为 7,求得的关键字为 17H。 按键的关键字在键值表中的顺序号定义为改建的键值。 因此数字键“ 2”的键值为 02H。 在键值表中,可以看到数字键的键值都小于 10H,功能键的键值是大于或等于 10H 的。 因此判别被按按键是数字键还是功能键是非常容易的。 相关芯片介绍 单片机 89C51 芯片 89C51 是一种带 4K 字节闪烁可编程可擦除 只读存储器 ( FPEROM— Flash Programmable and Erasable Read Only Memory)的低电压、高性能 CMOS8 位 微处理器 ,俗称 单片机。 单片机 的可擦除 只读存储器 可以反复擦除 100次。 该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS51 指令集和输出管脚相兼容。 由于将多功能 8位 CPU和闪烁 存储器 组合在单个芯片中, ATMEL的 89C51 是一种高效微控制器, 89C2051 是它的一种精简版本。 89C 单片机为很多 嵌入式控制系统 提供了一种灵活性高且价廉的方案。 相关引脚功能介绍: 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口缓冲器可接收,输 南京工程学院毕业设计说明书(论文) 第 16 页 出 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的一些特殊功能口,如 37图所示: 口管脚 备选功能 RXD(串行输入口)。单片机水塔水位毕业设计论文基于单片机的水塔水位控制的软硬件设计
相关推荐
常见的集成稳压器有固定式三端稳压器与可调式三端稳压器。 此电路部分采用集成稳压器。 固定式三端稳压器的常见产品有两种: CW78**系列稳压器输出固定的正点压,如 7805 输出为 +5V, 7812 输出为 +12V; CW79**系列稳压器输出固定的负电压 ,如 7905 输出为 5V, 7912 输出为 12V。 输出端接电容 C2 进一步滤去纹波,输出端接电容 C3 能改善负载的瞬态影响
键盘是人与微机系统打交道的主要设备。 关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。 站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引 7 起误操作和操作失控现象。 在单片机应 用中键盘用得最多的形式是独立键盘及矩阵键盘。 图 25
址功能 双列直插 40PinDIP 封装 单一 +5V 电源供电 40 个引脚 的 介绍 40 个引脚按引脚功能大致可分为 4 个种类: 电源、时钟、控制和 I/O 引脚。 ⒈ 电源 : ⑴ VCC 芯片电源,接 +5V; ⑵ VSS 接地端; 注:用万用表测试单片机引脚电压一般为 0v或者 5v,这是标准的 TTL电平。 但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于 0v5v
单片机概述 单片机是一种集成在 电路 芯片,是采用 超大规模集成电路 技术把具有数据处理能 力的中央处理器 CPU随机存储器 RAM、 只读存储器 ROM、多种 I/O口和中断系统、定时器 /计时器 等功能(可能还包括显示驱动电路、 脉宽调制 电路、模拟多路转换器、 A/D转换器 等电路)集成到一块硅片上构成的一个小而完善的 计算机系统。 单片机内部也用和电脑功能类似的模块,比如 CPU,内存
实物图 第二步用万用表检测。 先用万用表复核目测中有疑问的连接点,在检测各种电源线与底线是否有短路现象。 将万用表打在欧姆挡,然后将表笔接在被测线路之间,看实数是否有变化,有则表明导通。 如图 52为万用表测试实物图。 泸州职业技术学院 系统测试 14 如图 52 第二节 软件调试 软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
ng。 using。 using。 using。 using。 基于单片机活动门控制系统的设计与实现 第 13 页 共 31 页 using。 namespace WEUDUCELIANG { public partial class Form1 : Form { public Form1() { InitializeComponent()。 = 1000。 //设置 timer控件时间间隔 =