单片机水位控制及矩阵键盘Word文档格式.docx
《单片机水位控制及矩阵键盘Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机水位控制及矩阵键盘Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
单片机的概念:
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器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,$
JNBP1.0,K1
MOVP0,#0F8H
LCALLDELAY
MOVR0,#0F8H
L2:
JBP1.1,L3
JBP1.1,L2
K2:
JNBP1.1,$
JNBP1.1,K2
MOVP0,#82H
MOVR0,#82H
L3:
JBP1.2,L4
JBP1.2,L3
K3:
JNBP1.2,$
JNBP1.2,K3
MOVP0,#92H
MOVR0,#92H
L4:
JBP1.3,L5
JBP1.3,L4
K4:
JNBP1.3,$
JNBP1.3,K4
MOVP0,#99H
MOVR0,#99H
L5:
JBP1.4,L6
JBP1.4,L5
K5:
JNBP1.4,$
JNBP1.4,K5
MOVP0,#0B0H
MOVR0,#0B0H
L6:
JBP1.5,L7
JBP1.5,L6
K6:
JNBP1.5,$
JNBP1.5,K6
MOVP0,#0A4H
MOVR0,#0A4H
L7:
JBP1.6,L8
JBP1.6,L7
K7:
JNBP1.6,$
JNBP1.6,K7
MOVP0,#0F9H
MOVR0,#0F9H
L8:
LJMPL1
2、水位检测部分
INT:
JBP1.6,$;
水位上升
SETBP1.7
MOVP0,#0F9H
JBP1.5,$;
2
CJNER0,#0A4H,REL1
AJMPRE1
REL1:
JBP1.4,$;
3
CJNER0,#0B0H,REL2
AJMPRE2
REL2:
JBP1.3,$;
4
CJNER0,#99H,REL3
AJMPRE3
REL3:
JBP1.2,$;
5
CJNER0,#92H,REL4
AJMPRE4
REL4:
JBP1.1,$;
6
CJNER0,#82H,REL5
AJMPRE5
REL5:
JBP1.0,$;
7
MOVP3,#0FFH
JBP1.0,$;
水位下降
JNBP1.0,$
CLRP1.7
MOVP0,#0F8H
RE5:
JBP1.1,$;
RE4:
RE3:
RE2:
RE1:
JBP1.5,$;
1
LJMPINT
RETI
F:
MOVTMOD,#10H;
延时125MS
MOVTL1,#0DCH
MOVTH1,#0BH
SETBTR1
JNBTF1,$
CLRTF1
CLRTR1
RET
DELAY:
MOVR3,#10;
延时1秒
D1:
MOVR4,#200
D2:
MOVR5,#248
D3:
DJNZR5,D3
NOP
DJNZR4,D2
DJNZR3,D1
END
四、调试及运行
程序基本上没有什么问题(最多就是有的语句没有注意打错了),按照分析中所设想的编完之后就完成了仿真,仿真过程也没有问题,由于仿真软件没有考虑到电源在实际中会相互影响,同时电机的启动和停止会对单片机的工作有影响。
开始我在仿真中直接用三极管做开关驱动电机转动,后来在焊接好实物之后,对水位的检测和显示没有问题了,问题最多的就是出在控制这方面,p1.7口输出的驱动电压和电流不能使三极管工作,更不能使继电器工作带动电动机,总的来说就是三极管的开关功能没有实现。
在老师的指导下,我使用光电耦合器,没有出现所预期的结果。
最后我在三极管的基极加了一个上拉电阻,问题顺利解决了。
我明白了,用光电耦合器是可以实现的,而且更加的稳定安全,我当时没有注意到,p1.7口接光电耦合器的时候也应该接一个上拉电阻,这样就达到了老师要求的效果,更贴近实际。
虽然我的成功了,但是不完善。
五、矩阵键盘
1、仿真图
2、程序
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
JNBACC.2,L2
MOVA,#1
JNBACC.1,L3
MOVA,#2
JNBACC.0,M
MOVA,#3
S2:
MOVA,R3
JNBACC.7,M
RLA
MOVR3,A
MOVA,R4
ADDA,#4
MOVR4,A
AJMPK
DIS:
ADDA,R4;
键值显示子程序
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP2,A
DEL:
MOVTMOD,#10H;
延时2ms
MOVTL1,#30H
MOVTH1,#0F8H
SETBTR1
JNBTF1,$
CLRTF1
TAB:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,088H,083H,0C6H,0A1H,086H,08EH
END
3、实验结果
6、心得体会
基于密码锁的设计基础,我对按键的运用可以说是很熟练了,所以按键这部分就不多说了。
主要说说我对单片机外围电路的感想:
在进行这个课程设计之前,我们已经进行了两个星期的基础电路学习,要注意的是,仿真可以的电路在做成实物时候不一定就可以用。
举个例子,在仿真电路中,单片机可以驱动三极管工作,使其能扮演开关的角色,但是在实物中是不能的,因为从单片机的一个口出来的电压不够。
同时,仿真软件不会注重各个元件的功率问题,所以,在设计电路的时候应当更加注重功率和脉冲电流对相互的影响,比如说电机启动和停止时会对单片机的工作产生影响,使程序执行是产生混乱,没有按要求执行。
在我的设计中,我在三极管的基极连接一个上拉电阻,可以很好的完成三极管的开关作用,同时接入一个继电器,把电动机的电源和单片机的电源分开,这样就有效的把互相的影响进一步的降低。
按键在编程的过程中,要注意消抖,同时焊接的时候要注意别焊接坏了,以避免不必要的麻烦。