模块五单片机接口电路及应用Word格式.docx

上传人:b****6 文档编号:18151973 上传时间:2022-12-13 格式:DOCX 页数:60 大小:943.82KB
下载 相关 举报
模块五单片机接口电路及应用Word格式.docx_第1页
第1页 / 共60页
模块五单片机接口电路及应用Word格式.docx_第2页
第2页 / 共60页
模块五单片机接口电路及应用Word格式.docx_第3页
第3页 / 共60页
模块五单片机接口电路及应用Word格式.docx_第4页
第4页 / 共60页
模块五单片机接口电路及应用Word格式.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

模块五单片机接口电路及应用Word格式.docx

《模块五单片机接口电路及应用Word格式.docx》由会员分享,可在线阅读,更多相关《模块五单片机接口电路及应用Word格式.docx(60页珍藏版)》请在冰豆网上搜索。

模块五单片机接口电路及应用Word格式.docx

键盘控制程序需完成的任务有:

监测是否有键按下,有键按下时,在无硬件去抖动电路时,应用软件延时方法消除按键抖动影响;

当有多个按键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。

1、行列式键盘的结构及工作原理

行列式键盘电路如图5-2所示。

图5-2行列式键盘电路

在图5-2中,P1口的6位P1.0~P1.5为键盘口线,组成2行4列共8个按键的行列式键盘矩阵,其中行线P1.0和P1.1为键盘扫描输出线,列线P1.2~P1.5为键盘扫描输入线,通过4个上拉电阻接到电源。

在行列线的交叉点上为按键,行线和列线分别接到按键开关的两端。

当键盘上没有键闭合时,行线和列线之间是断开的,所有列线输入全部为高电平。

当键盘上某个按键按下时,则对应的行线和列线短接,行线输出即为列线输入。

当键盘初始化时所有行线输出低电平,则通过读取的列线值状态是否全为1,即可判断有无键按下。

究竟是哪个键按下的,此时并判断不出来,还必须通过键盘扫描才能判断。

在键盘扫描时,先让第一行P1.0输出低电平0,其余行(即P1.1行)输出高电平1,检查各列(P1.2~P1.5列)的输入状态值,如某列的输入电平为0,则第一行线和对应列线相交的键按下,否则可判断在P1.0行的键没有被按下。

如P1.0行无键按下,则继续扫描下一行(P1.1行),让P1.1行输出低电平0,其余行(即P1.0行)输出高电平1,同样检查各列(P1.2~P1.5列)的输入状态值,如某列的输入电平为0,则第二行和对应列线相交的键按下,否则P1.1行无键按下。

当两行均扫描完后,仍未检查到列线输入值有0的情况,则表示此次并无键按下。

这种工作方式称为键盘扫描。

2、行列式键盘控制程序需完成的任务

(1)判断键盘有无按键按下

(2)按键去抖动处理

(3)键盘扫描

(4)计算按键值

3、行列式键盘编程

按以上分析可得行列式键盘程序的流程如图5-3所示,按键功能子程序流程图如图5-4所示。

图5-3键盘子程序流程图

按以上流程图编写的键盘子程序如下:

ORG0100H

KEYSCAN:

MOVP1,#3CH;

两条键盘输出线(行线P1.0和P1.1)均输出为0

MOVA,P1;

读取键盘口P1的值

ANLA,#3CH;

取出输入线(列线P1.2~P1.5)状态值

CJNEA,#3CH,KEY1;

判断输入线状态是否全为1(即有无键按下)

LJMPKEYEND;

无键按下返回

KEY1:

LCALLDEL12;

有键按下调用12ms延时子程序,以消除按键抖动

MOVA,#3EH;

扫描第一行,即P1.0输出为0

KEY2:

MOVR2,A;

将扫描码暂存于R2中

MOVP1,A;

扫描码输出给键盘口P1

读取键盘口的状态

取出输入线(列线)的状态

CJNEA,#3CH,KEY3;

判断列线是否全为1,即第一行是否有键按下,有键按下转计算键值

MOVA,#3DH;

第一行没有键按下,接着扫描第二行

MOVR2,A;

将第二行扫描码输出给P1

读取P1口的状态

取出列线的状态

判断列线是否全为1,即第二行是否有键按下,有键按下转计算键值

返回

KEY3:

MOVB,#0FBH;

键值寄存器B赋初值FBH

RLA;

因P1.7和P1.6没接按键,所以应将其移出

RLA

KEY4:

RLCA;

判断是哪列按键按下的

INCB;

第一列键值加1、第二列键值加2、第三列键值加3、第四列键值加4

JCKEY4

MOVA,R2;

将扫描码送A

KEY5:

RRCA;

判断是哪行按键按下的

第一行键值加4

第二行键值加8

INCB

JCKEY5

KEY6:

MOVA,P1;

取出键盘列线状态

CJNEA,#3CH,KEY6;

判断按键是否释放,没释放等待按键释放

LCALLDEL12;

调用12ms延时子程序,以消除按键抖动

LCALLOPREAT;

调用按键功能子程序

KEYEND:

RET;

根据任务要求,编写的按键功能子程序流程图如图5-4所示。

图5-4按键功能子程序流程图

根据流程图及设计任务要求编写的按键功能子程序如下所示:

ORG0200H

OPREAT:

MOVA,B;

从B中取出键值送入A

A的值左移一位,即A的值乘2

MOVDPTR,#TABLE1;

将按键功能入口地址表表首地址送DPTR

JMP@A+DPTR;

根据A的值(即键值)跳转至相应的按键功能入口地址处

TABLE1:

AJMPK0;

0号键功能入口地址

AJMPK1;

1号键功能入口地址

AJMPK2;

2号键功能入口地址

AJMPK3;

3号键功能入口地址

AJMPK4;

4号键功能入口地址

AJMPK5;

5号键功能入口地址

AJMPK6;

6号键功能入口地址

AJMPK7;

7号键功能入口地址

K0:

MOVR3,#00H;

0号键按下时将灯光模式寄存器R3置0(模式1)

LJMPOPR

K1:

MOVR3,#01H;

1号键按下时将灯光模式寄存器R3置1(模式2)

LJMPOPR

K2:

MOVR3,#02H;

2号键按下时将灯光模式寄存器R3置2(模式3)

K3:

MOVR3,#03H;

3号键按下时将灯光模式寄存器R3置3(模式4)

K4:

MOVR4,#00H;

4号键按下时将灯光路数寄存器R4置0(4路)

K5:

MOVR4,#04H;

5号键按下时将灯光路数寄存器R4置4(8路)

K6:

MOV30H,#04H;

6号键按下时将30H单元(灯光速度存储单元)置4(慢速)

K7:

MOV30H,#02H;

7号键按下时将30H单元(灯光速度存储单元)置2(快速)

OPR:

MOVA,R3;

R3与R4相加形成灯光数据表入口地址

ADDA,R4

MOVDPTR,#TABLE2;

将灯光数据入口地址表表首地址送DPTR

根据A的值(灯光路数和模式)跳转至相应的灯光数据入口地址处

TABLE2:

AJMPKK0;

4路模式1时灯光数据入口地址

AJMPKK1;

4路模式2时灯光数据入口地址

AJMPKK2;

4路模式3时灯光数据入口地址

AJMPKK3;

4路模式4时灯光数据入口地址

AJMPKK4;

8路模式1时灯光数据入口地址

AJMPKK5;

8路模式2时灯光数据入口地址

AJMPKK6;

8路模式3时灯光数据入口地址

AJMPKK7;

8路模式4时灯光数据入口地址

KK0:

MOVDPTR,#TAB41;

将4路模式1灯光数据表表首地址送DPTR

SJMPOPREND

KK1:

MOVDPTR,#TAB42;

将4路模式2灯光数据表表首地址送DPTR

KK2:

MOVDPTR,#TAB43;

将4路模式3灯光数据表表首地址送DPTR

KK3:

MOVDPTR,#TAB44;

将4路模式4灯光数据表表首地址送DPTR

KK4:

MOVDPTR,#TAB81;

将8路模式1灯光数据表表首地址送DPTR

KK5:

MOVDPTR,#TAB82;

将8路模式2灯光数据表表首地址送DPTR

KK6:

MOVDPTR,#TAB83;

将8路模式3灯光数据表表首地址送DPTR

KK7:

MOVDPTR,#TAB84;

将8路模式4灯光数据表表首地址送DPTR

OPREND:

MOVR1,#00H;

将灯光数据表索引值寄存器清0

RET

四、任务实施

1、灯光控制器硬件电路设计

根据以上任务分析及相关知识设计出的灯光控制器电路原理图如图5-5所示。

图5-5灯光控制器电路原理图

2、灯光控制器程序设计

根据以上任务分析及相关知识编写的灯光控制器程序如下:

ORG0000H;

主程序

MOVP0,#0FFH;

将P0口置为FFH,所有灯全灭

MOVR1,#00H;

MOVR3,#00H;

将灯光模式寄存器R3置0(模式1)

MOVR4,#04H;

将灯光路数寄存器R4置4(8路)

MOVSP,#20H;

将栈指针置20H

MOV30H,#04H;

将灯光速度存储单元置4(慢速)

MOVDPTR,#TAB81;

将8路模式1灯光数据表首地址送DPTR

START:

MOVA,R1;

将索引值送A

MOVCA,@A+DPTR;

查表得灯光数据

CJNEA,#0D3H,DISP;

判断灯光数据是否为结束码D3H

为结束码,则将索引值清0

SJMPSTART;

跳转至START处,重新进行下一次灯光循环

DISP:

MOVP0,A;

不为结束码,将灯光数据输出给P0口

INCR1;

索引值加1

LCALLKEYSCAN;

调键盘扫描及处理子程序

LCALLDISPDEL;

调显示延时子程序

跳转至START处

ORG0100H;

键盘扫描及处理子程序

KEYSCAN:

MOVP1,#3CH

MOVA,P1

ANLA,#3CH

CJNEA,#3CH,KEY1

LJMPKEYEND

LCALLDEL12

MOVA,#3EH

MOVR2,A

MOVP1,A

CJNEA,#3CH,KEY3

MOVA,#3DH

MOVR2,A

MOVB,#0FBH

RLCA

JCKEY4

MOVA,R2

RRCA

MOVA,P1

CJNEA,#3CH,KEY6

LCALLDEL12

LCALLOPREAT

KEYEND:

RET

ORG0200H;

按键功能子程序

MOVA,B

MOVDPTR,#TABLE1

JMP@A+DPTR

AJMPK0

AJMPK1

AJMPK2

AJMPK3

AJMPK4

AJMPK5

AJMPK6

AJMPK7

MOVR3,#00H

MOVR3,#01H

MOVR3,#02H

MOVR3,#03H

MOVR4,#00H

MOVR4,#04H

MOV30H,#04H

MOV30H,#02H

MOVA,R3

MOVDPTR,#TABLE2

AJMPKK0

AJMPKK1

AJMPKK2

AJMPKK3

AJMPKK4

AJMPKK5

AJMPKK6

AJMPKK7

MOVDPTR,#TAB41

MOVDPTR,#TAB42

MOVDPTR,#TAB43

MOVDPTR,#TAB44

MOVDPTR,#TAB81

MOVDPTR,#TAB82

MOVDPTR,#TAB83

MOVDPTR,#TAB84

MOVR1,#00H

ORG0300H;

显示延时子程序

DISPDEL:

MOVR5,30H

DISPDEL1:

MOVR6,#0FAH

DISPDEL2:

MOVR7,#0FAH

DISPDEL3:

DJNZR7,DISPDEL3

DJNZR6,DISPDEL2

DJNZR5,DISPDEL1

ORG0350H;

按键去抖动延时子程序

DEL12:

MOVR6,#1EH

DEL2:

MOVR7,#64H

DEL1:

DJNZR7,DEL1

DJNZR6,DEL2

TAB41:

DB0DFH,0EFH,0F7H,0FBH,0F7H,0EFH,0DFH,0FFH;

4路模式1灯光数据表

DB0DFH,0CFH,0C7H,0C3H,0FBH,0F3H,0E3H,0C3H,0FFH

DB0D7H,0EBH,0D7H,0EBH,0FFH,0C3H,0FFH,0C3H,0FFH,0D3H

TAB42:

DB0DFH,0EFH,0F7H,0FBH,0F7H,0EFH,0D3H;

4路模式2灯光数据表

TAB43:

DB0DFH,0CFH,0C7H,0C3H,0FFH;

4路模式3灯光数据表

DB0FBH,0F3H,0E3H,0C3H,0FFH,0D3H

TAB44:

DB0D7H,0EBH,0D3H;

4路模式4灯光数据表

TAB81:

DB0E7H,0DBH,0BDH,7EH,0BDH,0DBH,0E7H,0FFH;

8路模式1灯光数据表

DB0E7H,0C3H,81H,00H,00H,81H,0C3H,0E7H,0FFH,0D3H

TAB82:

DB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;

8路模式2灯光数据表

DB7EH,0BEH,0DEH,0EEH,0F6H,0FAH,0FCH

DB7CH,0BCH,0DCH,0ECH,0F4H,0F8H

DB78H,0B8H,0D8H,0E8H,0F0H

DB70H,0B0H,0D0H,0E0H,60H,0A0H,0C0H,40H,80H,00H,00H,0D3H

TAB83:

DB7FH,3FH,1FH,0FH,07H,03H,01H,00H;

8路模式3灯光数据表

DB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0D3H

TAB84:

DB0AAH,55H,0D3H;

8路模式4灯光数据表

小结

1、行列式键盘接口电路及编程方法。

2、灯光控制器电路设计方法。

3、灯光控制器程序设计方法。

课后作业

1、用Protel软件绘制出本设计任务的电路原理图,并设计印制电路板图及制作印制电路板。

2、连接仿真器,将本设计任务的程序输入计算机,并进行仿真调试及运行。

3、连接编程器,将仿真通过的程序代码下载到单片机中,脱机运行并观察电路运行情况。

4、分析本任务中的键盘扫描及处理程序,并分析键值的计算方法,是否还能用其它方法来编写键盘扫描程序。

5、自行设计几组亮灯数据,上机调试运行,观察电路运行情况。

6、在本任务的键盘扫描程序中,将按键去抖动和等待按键释放程序段删除,程序修改后上机调试运行,观察电路运行情况,并分析原因。

密码锁控制器

1、掌握密码锁控制器电路设计方法。

2、掌握密码锁控制器程序设计方法。

密码锁控制器电路设计方法,密码锁控制器程序设计方法。

密码锁控制器程序设计方法。

任务二智能密码锁控制器

本任务主要讲解用单片机设计的密码锁控制器,要求工作稳定可靠,保密性高,实用性强,并具有报警控制功能。

1、密码锁控制器硬件电路设计

89C51单片机的P2口作键盘口,其中P2.4~P2.7为键盘扫描输出线,P2.0~P2.3为键盘扫描输入线。

P1口为信号输出口,其中P1.0输出开锁控制信号驱动电磁锁,P1.1输出密码错信号,P1.2输出报警控制信号驱动报警器。

键盘由4×

4共16个按键组成,15个数字或字母键,1个输入键。

本任务程序所设密码由8位字符组成(用户对程序稍加修改,便可设置为任意位数的密码),每位字符可为0~9及A~E的15个数字或字母中的任意一个,确保密码的保密性。

通电复位,电路进入就绪状态,等待用户输入密码。

当用户输入密码并按下输入键后,由程序判断输入的密码是否正确。

如输入密码正确,则由P1.0输出开锁控制信号,同时点亮绿灯;

如输入密码错误,则由P1.1输出密码错误指示信号,点亮红灯,用户可再次输入密码;

如连续3次输入密码错误,则由P1.2输出报警控制信号,同时点亮黄灯。

一旦输出报警信号,就必须等待解除报警后方可重新输入密码开锁。

2、密码锁控制器程序设计

程序开始向P1口输出FFH,使密码正确指示信号灯(P1.0)、密码错误指示信号灯(P1.1)和报警指示信号灯(P1.2)灭。

然后进行初始化,将密码输入错误次数寄存器R4清0,输入密码存储指针寄存器R0置为1FH(即输入密码存储于片内RAM20H单元开始的若干个单元中),输入密码位数计数寄存器R3清0。

然后进行键盘扫描及计算键号并存于B中,再调用按键操作子程序。

在按键操作子程序中,先将输入按键号(即输入的密码字符)存于片内RAM的20H单元开始的密码暂存区中,再判断是不是输入键,如不是输入键,则密码位数计数器R3加1,如是输入按键,则表示密码输入结束。

接着进行输入密码与存储于程序存储器中的设定密码比较,首先判断输入密码位数是否为程序设定的8位(用户可修改),如不是8位,则不比较,密码错误指示灯点亮,将输入密码错误次数计数器R4加1;

判断密码输入错误次数是否为3次,如达到3次输入错误,则输出报警信号,同时点亮报警指示灯,程序动态停机;

如输入密码错误次数不到3次,则可再次重新输入密码。

如输入密码位数为8位,则将暂存于片内RAM中的输入密码与设定密码逐位比较,如比较结果为输入密码与设定密码相同,则输出开锁信号,同时点亮密码正确指示灯,延时3S后重新锁定。

如任何一位密码不相等,则进行如前所述的密码错误处理操作。

图5-6密码锁控制器主程序流程图

图5-7按键操作子程序流程图

键盘的相关知识在本课题的任务一中已详细讲解过,此处不再赘述。

1、密码锁控制器电路设计

根据以上任务分析设计出的密码锁控制器电路原理图如图5-8所示。

图5-8密码锁控制器电路原理图

根据前面的任务分析,编写的原程序如下:

   MOVP1,#0FFH;

P1口输出FFH

MOVR4,#00H;

输入密码错误次数寄存器R4清0

MOVR0,#1FH;

输入密码暂存区指针R0赋初值1FH

MOVR3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1