单片机水位控制及矩阵键盘.docx
- 文档编号:11672374
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:12
- 大小:21.47KB
单片机水位控制及矩阵键盘.docx
《单片机水位控制及矩阵键盘.docx》由会员分享,可在线阅读,更多相关《单片机水位控制及矩阵键盘.docx(12页珍藏版)》请在冰豆网上搜索。
单片机水位控制及矩阵键盘
目录
题目分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、2
硬件设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、2
软件设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6
调试及运行、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、12
矩阵键盘、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、12
心得体会、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、16
一、题目分析
1、题目:
单片机水位检测、显示及控制
2、分析:
从题目来看,这个设计的任务很明确。
首先,检测水位是通过把水对容器底部的压力转化成电信号(这就是模拟信号),但是单片机对模拟信号不做响应(单片机对数字信号做响应),所以我的首要任务是把模拟信号转换成数字信号,利用转换芯片ADC0809把模拟信号转换成数字信号再输入到单片机中;显示这部分比较简单,就是把检测到的数字信号和相对应的字型码绑定,再把字型码通过单片机的一个I\O口输出,该I\O口接共阳的数码显示管;控制这部分,利用检测到的信号,和设置好的两个水位值(一个最低水位默认为1水位一个最高水位)相比较,如果小于最低水位就启动电机加水,如果大于最高水位就关闭电机停止加水。
电路的具体工作原理在之后的报告中会做进一步的阐述。
实际运用的价值,可以自动关注水塔中水位的情况,这样就可以不需要人为的检测,从而更精确的知道水位并控制水位。
二、硬件设计
1、电路图
设计框图
说明:
我和老师探讨过,不用压力检测器。
直接用按钮来当做水位,水位的上升是从低到高,所以可以把按钮当做水位的生升和下降。
在具体实践中也可以实现,两个水平的触点,一个是高电位,一个是低电位,当水上升到两个触点的时候,接通,都为低电位。
此过程中,一个触点由高电位变为低电位,信号被单片机接受,就可以执行之后所需要的步骤了。
2、重要元件选择依据
(1)单片机
单片机的概念:
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
基本特点如下:
芯片虽小,五脏俱全,是单片机主要特点之一。
其内部设有程序存储器、数据存储器、各种接口电路。
而大型的处理器运算速度较高,运算器位数较多,处理能力较强,但需要在外部配置接口电路;单片机主频一般在100MHZ以下,适合用于独立工作的小型产品之中,引脚数量从几个到百余个。
;应用简单、灵活,可用汇编语言及C语言开发单片机产品。
单片机的工作过程:
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。
为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。
存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC在中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
(2)三极管
在电路中的主要作用是开关作用,因为单片的电流不可以直接驱动电机转动,所以需要一个开关。
(3)继电器
把电机的工作电源和单片机的工作电源分开,这样在电机的启动和停止时,就不会对单片的程序执行有太大影响。
(4)数码管
显示部分就需要数码管来实现,要注意这是一个共阳的数码管。
(5)电容和电阻
和数码管相接的上拉电阻,因为p0口本身没有上拉电阻,所以电压小需要接上拉电阻。
左边的电阻和电容相连是对单片机进行上电复位用的
(6)按钮开关
代替水位上升和下降,另外的一个功能是设置最低水位和最高水位。
3、原件清单
Design:
单片机水位检测
Created:
05/07/07
Modified:
11/07/13
Resistors
8R1,R3-R8,R10100RM100R
1R21kM100R
Capacitors
1C222ufMaplinRG49D
IntegratedCircuits
1U1AT89C51
Transistors
1Q1NPN
Diodes
1D1DIODE
Miscellaneous
1RL1G2R-14-DC5
三、软件设计
1、设置最高水位
ORG0000H
AJMPMAIN
ORG0013H
AJMPINT
MAIN:
MOVP1,#0FFH
SETBIT1
SETBEA
SETBEX1
CLRP1.7
L1:
JBP1.0,L2
ACALLF
JBP1.0,L1
K1:
JNBP1.0,$
ACALLF
JNBP1.0,K1
MOVP0,#0F8H
LCALLDELAY
MOVR0,#0F8H
L2:
JBP1.1,L3
ACALLF
JBP1.1,L2
K2:
JNBP1.1,$
ACALLF
JNBP1.1,K2
MOVP0,#82H
LCALLDELAY
MOVR0,#82H
L3:
JBP1.2,L4
ACALLF
JBP1.2,L3
K3:
JNBP1.2,$
ACALLF
JNBP1.2,K3
MOVP0,#92H
LCALLDELAY
MOVR0,#92H
L4:
JBP1.3,L5
ACALLF
JBP1.3,L4
K4:
JNBP1.3,$
ACALLF
JNBP1.3,K4
MOVP0,#99H
LCALLDELAY
MOVR0,#99H
L5:
JBP1.4,L6
ACALLF
JBP1.4,L5
K5:
JNBP1.4,$
ACALLF
JNBP1.4,K5
MOVP0,#0B0H
LCALLDELAY
MOVR0,#0B0H
L6:
JBP1.5,L7
ACALLF
JBP1.5,L6
K6:
JNBP1.5,$
ACALLF
JNBP1.5,K6
MOVP0,#0A4H
LCALLDELAY
MOVR0,#0A4H
L7:
JBP1.6,L8
ACALLF
JBP1.6,L7
K7:
JNBP1.6,$
ACALLF
JNBP1.6,K7
MOVP0,#0F9H
LCALLDELAY
MOVR0,#0F9H
L8:
LJMPL1
2、水位检测部分
INT:
JBP1.6,$;水位上升
JNBP1.6,$
SETBP1.7
MOVP0,#0F9H
JBP1.5,$;2
JNBP1.5,$
MOVP0,#0A4H
CJNER0,#0A4H,REL1
CLRP1.7
AJMPRE1
REL1:
JBP1.4,$;3
JNBP1.4,$
MOVP0,#0B0H
CJNER0,#0B0H,REL2
CLRP1.7
AJMPRE2
REL2:
JBP1.3,$;4
JNBP1.3,$
MOVP0,#99H
CJNER0,#99H,REL3
CLRP1.7
AJMPRE3
REL3:
JBP1.2,$;5
JNBP1.2,$
MOVP0,#92H
CJNER0,#92H,REL4
CLRP1.7
AJMPRE4
REL4:
JBP1.1,$;6
JNBP1.1,$
MOVP0,#82H
CJNER0,#82H,REL5
CLRP1.7
AJMPRE5
REL5:
JBP1.0,$;7
JNBP1.0,$
CLRP1.7
MOVP0,#0F8H
MOVP3,#0FFH
JBP1.0,$;水位下降
JNBP1.0,$
CLRP1.7
MOVP0,#0F8H
RE5:
JBP1.1,$;6
JNBP1.1,$
MOVP0,#82H
RE4:
JBP1.2,$;5
JNBP1.2,$
MOVP0,#92H
RE3:
JBP1.3,$;4
JNBP1.3,$
MOVP0,#99H
RE2:
JBP1.4,$;3
JNBP1.4,$
MOVP0,#0B0H
RE1:
JBP1.5,$;2
JNBP1.5,$
MOVP0,#0A4H
JBP1.6,$;1
JNBP1.6,$
SETBP1.7
MOVP0,#0F9H
LCALLDELAY
LJMPINT
RETI
F:
MOVTMOD,#10H;延时125MS
MOVTL1,#0DCH
MOVTH1,#0BH
SETBTR1
JNBTF1,$
MOVTL1,#0DCH
MOVTH1,#0BH
CLRTF1
CLRTR1
RET
DELAY:
MOVR3,#10;延时1秒
D1:
MOVR4,#200
D2:
MOVR5,#248
D3:
DJNZR5,D3
NOP
DJNZR4,D2
DJNZR3,D1
RET
END
四、调试及运行
程序基本上没有什么问题(最多就是有的语句没有注意打错了),按照分析中所设想的编完之后就完成了仿真,仿真过程也没有问题,由于仿真软件没有考虑到电源在实际中会相互影响,同时电机的启动和停止会对单片机的工作有影响。
开始我在仿真中直接用三极管做开关驱动电机转动,后来在焊接好实物之后,对水位的检测和显示没有问题了,问题最多的就是出在控制这方面,p1.7口输出的驱动电压和电流不能使三极管工作,更不能使继电器工作带动电动机,总的来说就是三极管的开关功能没有实现。
在老师的指导下,我使用光电耦合器,没有出现所预期的结果。
最后我在三极管的基极加了一个上拉电阻,问题顺利解决了。
我明白了,用光电耦合器是可以实现的,而且更加的稳定安全,我当时没有注意到,p1.7口接光电耦合器的时候也应该接一个上拉电阻,这样就达到了老师要求的效果,更贴近实际。
虽然我的成功了,但是不完善。
五、矩阵键盘
1、仿真图
2、程序
ORG0000H
START:
ACALLM
AJMPSTART
M:
MOVR3,#0EFH
MOVR4,0
K:
MOVP0,R3
MOVA,P0
ANLA,#0FH;屏蔽高四位
XRLA,#0FH;异或判断是否有键按下
JZS2;消抖
S1:
ACALLDEL
JZS2
JNBACC.3,L1;判断寄存器A中的第4位是否为1,不为1则调到L1
MOVA,#00H
ACALLDIS
AJMPM
L1:
JNBACC.2,L2
MOVA,#1
ACALLDIS
AJMPM
L2:
JNBACC.1,L3
MOVA,#2
ACALLDIS
AJMPM
L3:
JNBACC.0,M
MOVA,#3
ACALLDIS
AJMPM
S2:
ACALLDEL
MOVA,#00H
MOVA,R3
JNBACC.7,M
RLA
MOVR3,A
MOVA,#00H
MOVA,R4
ADDA,#4
MOVR4,A
AJMPK
DIS:
ADDA,R4;键值显示子程序
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP2,A
RET
DEL:
MOVTMOD,#10H;延时2ms
MOVTL1,#30H
MOVTH1,#0F8H
SETBTR1
JNBTF1,$
CLRTF1
CLRTR1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,088H,083H,0C6H,0A1H,086H,08EH
END
3、实验结果
6、心得体会
基于密码锁的设计基础,我对按键的运用可以说是很熟练了,所以按键这部分就不多说了。
主要说说我对单片机外围电路的感想:
在进行这个课程设计之前,我们已经进行了两个星期的基础电路学习,要注意的是,仿真可以的电路在做成实物时候不一定就可以用。
举个例子,在仿真电路中,单片机可以驱动三极管工作,使其能扮演开关的角色,但是在实物中是不能的,因为从单片机的一个口出来的电压不够。
同时,仿真软件不会注重各个元件的功率问题,所以,在设计电路的时候应当更加注重功率和脉冲电流对相互的影响,比如说电机启动和停止时会对单片机的工作产生影响,使程序执行是产生混乱,没有按要求执行。
在我的设计中,我在三极管的基极连接一个上拉电阻,可以很好的完成三极管的开关作用,同时接入一个继电器,把电动机的电源和单片机的电源分开,这样就有效的把互相的影响进一步的降低。
按键在编程的过程中,要注意消抖,同时焊接的时候要注意别焊接坏了,以避免不必要的麻烦。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 水位 控制 矩阵 键盘