模块五单片机接口电路及应用.docx
《模块五单片机接口电路及应用.docx》由会员分享,可在线阅读,更多相关《模块五单片机接口电路及应用.docx(60页珍藏版)》请在冰豆网上搜索。
模块五单片机接口电路及应用
《单片机应用技术》
电子教案
佛山职业技术学院
FoshanPolytechnic
教学单元:
键盘接口电路及其应用
教学时数:
2学时
教学方法:
一体化教学
教学目的:
1、掌握行列式键盘结构及编程方法。
2、掌握灯光控制器电路设计方法。
3、掌握灯光控制器程序设计方法。
教学重点:
灯光控制器电路设计方法,灯光控制器程序设计方法
教学难点:
灯光控制器程序设计方法。
教学过程
模块五单片机接口电路及应用
课题一键盘接口电路及其应用
任务一多功能灯光控制器
一、任务目标
本任务主要学习行列式键盘电路设计及软件编程,并通过一个多功能灯光控制器应用系统讲解键盘的按键功能编程方法。
二、任务分析
1、电路设计
该电路由89C51单片机作控制器,P1.0~P1.5为键盘口线,其中P1.0和P1.1为键盘扫描输出线,P1.2~P1.5为键盘扫描输入线,组成2×4共8个功能按键,4个“灯光闪烁模式”选择按键(模式1键、模式2键、模式3键、模式4键),2个“灯光输出路数”选择按键(4路键和8路键),2个“灯光闪烁速度”选择按键(慢速键和快速键)。
P0口为8路灯光输出;8只发光二极管供操作人员监视用,共阳极连接,P0口低电平输出灯亮。
9脚为复位端,本电路具有上电复位和按键复位两种复位功能。
18脚、19脚接6MHz晶振。
2、软件设计
存储单元分配:
R1为灯光数据表的索引值寄存器,R3为灯光模式寄存器(模式1时为0、模式2时为1、模式3时为2、模式4时为3),R4为灯光路数寄存器(4路时为0、8路时为4),30H单元为灯光速度存储单元(慢速为时4、快速时为2)。
程序开始进行上述单元的初始化,将R1置为0,R3置为0,R4置为4,30H单元置为4,所以初始灯光为8路、模式1、慢速闪烁方式。
接着将8路模式1灯光数据表首地址送DPTR,将索引值送A,查表得灯光数据。
判断取得的灯光数据是否为结束码(标志完成一次亮灯循环,结束码由用户自行设定,只要不是灯光数据表中的数据均可作为结束码,在本程序中设定为D3H),如是结束码,则将索引值寄存器R1清0,重新进行下一次亮灯循环;如不是结束码,则将灯光数据送P0口输出,然后调用键盘扫描子程序。
键盘扫描子程序进行键盘扫描并计算出按键值存放于B中,在按键释放后调用按键操作子程序,根据按键值转入对应按键的功能程序。
如是0号键给R3送入数据0,1号键给R3送入数据1,2号键给R3送入数据2,3号键给R3送入数据3,4号键给R4送入数据0,5号键给R4送入数据4,6号键给30H单元送入数据4,7号键给30H单元送入数据2。
最后根据R3和R4的值将8个灯光数据表中的某一数据表首地址送DPTR。
键盘扫描子程序结束后,再调用显示延时子程序,根据30H单元中的数据进行相应时间的灯光延时,然后取下一个灯光数据。
图5-1灯光控制主程序流程图
三、相关知识
键盘控制程序需完成的任务有:
监测是否有键按下,有键按下时,在无硬件去抖动电路时,应用软件延时方法消除按键抖动影响;当有多个按键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。
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
MOVA,P1;读取键盘口的状态
ANLA,#3CH;取出输入线(列线)的状态
CJNEA,#3CH,KEY3;判断列线是否全为1,即第一行是否有键按下,有键按下转计算键值
MOVA,#3DH;第一行没有键按下,接着扫描第二行
MOVR2,A;将扫描码暂存于R2中
MOVP1,A;将第二行扫描码输出给P1
MOVA,P1;读取P1口的状态
ANLA,#3CH;取出列线的状态
CJNEA,#3CH,KEY3;判断列线是否全为1,即第二行是否有键按下,有键按下转计算键值
LJMPKEYEND;返回
KEY3:
MOVB,#0FBH;键值寄存器B赋初值FBH
RLA;因P1.7和P1.6没接按键,所以应将其移出
RLA
KEY4:
RLCA;判断是哪列按键按下的
INCB;第一列键值加1、第二列键值加2、第三列键值加3、第四列键值加4
JCKEY4
MOVA,R2;将扫描码送A
KEY5:
RRCA;判断是哪行按键按下的
INCB;第一行键值加4
INCB;第二行键值加8
INCB
INCB
JCKEY5
KEY6:
MOVA,P1;读取键盘口P1的值
ANLA,#3CH;取出键盘列线状态
CJNEA,#3CH,KEY6;判断按键是否释放,没释放等待按键释放
LCALLDEL12;调用12ms延时子程序,以消除按键抖动
LCALLOPREAT;调用按键功能子程序
KEYEND:
RET;返回
根据任务要求,编写的按键功能子程序流程图如图5-4所示。
图5-4按键功能子程序流程图
根据流程图及设计任务要求编写的按键功能子程序如下所示:
ORG0200H
OPREAT:
MOVA,B;从B中取出键值送入A
RLA;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)
LJMPOPR
K3:
MOVR3,#03H;3号键按下时将灯光模式寄存器R3置3(模式4)
LJMPOPR
K4:
MOVR4,#00H;4号键按下时将灯光路数寄存器R4置0(4路)
LJMPOPR
K5:
MOVR4,#04H;5号键按下时将灯光路数寄存器R4置4(8路)
LJMPOPR
K6:
MOV30H,#04H;6号键按下时将30H单元(灯光速度存储单元)置4(慢速)
LJMPOPR
K7:
MOV30H,#02H;7号键按下时将30H单元(灯光速度存储单元)置2(快速)
OPR:
MOVA,R3;R3与R4相加形成灯光数据表入口地址
ADDA,R4
RLA
MOVDPTR,#TABLE2;将灯光数据入口地址表表首地址送DPTR
JMP@A+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
SJMPOPREND
KK2:
MOVDPTR,#TAB43;将4路模式3灯光数据表表首地址送DPTR
SJMPOPREND
KK3:
MOVDPTR,#TAB44;将4路模式4灯光数据表表首地址送DPTR
SJMPOPREND
KK4:
MOVDPTR,#TAB81;将8路模式1灯光数据表表首地址送DPTR
SJMPOPREND
KK5:
MOVDPTR,#TAB82;将8路模式2灯光数据表表首地址送DPTR
SJMPOPREND
KK6:
MOVDPTR,#TAB83;将8路模式3灯光数据表表首地址送DPTR
SJMPOPREND
KK7:
MOVDPTR,#TAB84;将8路模式4灯光数据表表首地址送DPTR
OPREND:
MOVR1,#00H;将灯光数据表索引值寄存器清0
RET
四、任务实施
1、灯光控制器硬件电路设计
根据以上任务分析及相关知识设计出的灯光控制器电路原理图如图5-5所示。
图5-5灯光控制器电路原理图
2、灯光控制器程序设计
根据以上任务分析及相关知识编写的灯光控制器程序如下:
ORG0000H;主程序
MOVP0,#0FFH;将P0口置为FFH,所有灯全灭
MOVR1,#00H;将灯光数据表索引值寄存器清0
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
MOVR1,#00H;为结束码,则将索引值清0
SJMPSTART;跳转至START处,重新进行下一次灯光循环
DISP:
MOVP0,A;不为结束码,将灯光数据输出给P0口
INCR1;索引值加1
LCALLKEYSCAN;调键盘扫描及处理子程序
LCALLDISPDEL;调显示延时子程序
SJMPSTART;跳转至START处
ORG0100H;键盘扫描及处理子程序
KEYSCAN:
MOVP1,#3CH
MOVA,P1
ANLA,#3CH
CJNEA,#3CH,KEY1
LJMPKEYEND
KEY1:
LCALLDEL12
MOVA,#3EH
KEY2:
MOVR2,A
MOVP1,A
MOVA,P1
ANLA,#3CH
CJNEA,#3CH,KEY3
MOVA,#3DH
MOVR2,A
MOVP1,A
MOVA,P1
ANLA,#3CH
CJNEA,#3CH,KEY3
LJMPKEYEND
KEY3:
MOVB,#0FBH
RLA
RLA
KEY4:
RLCA
INCB
JCKEY4
MOVA,R2
KEY5:
RRCA
INCB
INCB
INCB
INCB
JCKEY5
KEY6:
MOVA,P1
ANLA,#3CH
CJNEA,#3CH,KEY6
LCALLDEL12
LCALLOPREAT
KEYEND:
RET
ORG0200H;按键功能子程序
OPREAT:
MOVA,B
RLA
MOVDPTR,#TABLE1
JMP@A+DPTR
TABLE1:
AJMPK0
AJMPK1
AJMPK2
AJMPK3
AJMPK4
AJMPK5
AJMPK6
AJMPK7
K0:
MOVR3,#00H
LJMPOPR
K1:
MOVR3,#01H
LJMPOPR
K2:
MOVR3,#02H
LJMPOPR
K3:
MOVR3,#03H
LJMPOPR
K4:
MOVR4,#00H
LJMPOPR
K5:
MOVR4,#04H
LJMPOPR
K6:
MOV30H,#04H
LJMPOPR
K7:
MOV30H,#02H
OPR:
MOVA,R3
ADDA,R4
RLA
MOVDPTR,#TABLE2
JMP@A+DPTR
TABLE2:
AJMPKK0
AJMPKK1
AJMPKK2
AJMPKK3
AJMPKK4
AJMPKK5
AJMPKK6
AJMPKK7
KK0:
MOVDPTR,#TAB41
SJMPOPREND
KK1:
MOVDPTR,#TAB42
SJMPOPREND
KK2:
MOVDPTR,#TAB43
SJMPOPREND
KK3:
MOVDPTR,#TAB44
SJMPOPREND
KK4:
MOVDPTR,#TAB81
SJMPOPREND
KK5:
MOVDPTR,#TAB82
SJMPOPREND
KK6:
MOVDPTR,#TAB83
SJMPOPREND
KK7:
MOVDPTR,#TAB84
OPREND:
MOVR1,#00H
RET
ORG0300H;显示延时子程序
DISPDEL:
MOVR5,30H
DISPDEL1:
MOVR6,#0FAH
DISPDEL2:
MOVR7,#0FAH
DISPDEL3:
DJNZR7,DISPDEL3
DJNZR6,DISPDEL2
DJNZR5,DISPDEL1
RET
ORG0350H;按键去抖动延时子程序
DEL12:
MOVR6,#1EH
DEL2:
MOVR7,#64H
DEL1:
DJNZR7,DEL1
DJNZR6,DEL2
RET
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、在本任务的键盘扫描程序中,将按键去抖动和等待按键释放程序段删除,程序修改后上机调试运行,观察电路运行情况,并分析原因。
教学单元:
密码锁控制器
教学时数:
2学时
教学方法:
一体化教学
教学目的:
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密码锁控制器电路原理图
2、密码锁控制器程序设计
根据前面的任务分析,编写的原程序如下:
ORG0000H;主程序
MOVP1,#0FFH;P1口输出FFH
MOVR4,#00H;输入密码错误次数寄存器R4清0
MOVR0,#1FH;输入密码暂存区指针R0赋初值1FH
MOVR3