光学  

   你现在的位置:JUNTRY>>主 页>>              今天是:

   

一键多功能按键识别技术

 

1. 实验任务

如图 4.9.1 所示,开关 SP1 接在 P3.7/RD 管脚上,在 AT89S51 单片机的 P1 端口接有四个发光二极管,上电的时候, L1 接在 P1.0 管脚上的发光二极管在闪烁,当每一次按下开关 SP1 的时候, L2 接在 P1.1 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候, L3 接在 P1.2 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候, L4 接在 P1.3 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,又轮到 L1 在闪烁了,如此轮流下去。

2. 电路原理图

图 4.9.1

3. 系统板上硬件连线

•  把“单片机系统”区域中的 P3.7/RD 端口连接到“独立式键盘”区域中的 SP1 端口上;

•  把“单片机系统”区域中的 P1.0 - P1.4 端口用 8 芯排线连接到“八路发光二极管指示模块”区域中的“ L1 - L8 ”端口上;要求, P1.0 连接到 L1 , P1.1 连接到 L2 , P1.2 连接到 L3 , P1.3 连接到 L4 上。

4. 程序设计方法

•  设计思想由来

在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的 ID 号标识,这样,每按下一次按键, ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。

•  设计方法

从上面的要求我们可以看出, L1 到 L4 发光二极管在每个时刻的闪烁的时间是受开关 SP1 来控制,我们给 L1 到 L4 闪烁的时段定义出不同的 ID 号,当 L1 在闪烁时, ID = 0 ;当 L2 在闪烁时, ID = 1 ;当 L3 在闪烁时, ID = 2 ;当 L4 在闪烁时, ID = 3 ;很显然,只要每次按下开关 K1 时,分别给出不同的 ID 号我们就能够完成上面的任务了。下面给出有关程序设计的框图。

5.  程序框图

图 4.9.2

6. 汇编源程序

ID EQU 30H

SP1 BIT P3.7

L1 BIT P1.0

L2 BIT P1.1

L3 BIT P1.2

L4 BIT P1.3

ORG 0

MOV ID,#00H

START: JB K1,REL

LCALL DELAY10MS

JB K1,REL

INC ID

MOV A,ID

CJNE A,#04,REL

MOV ID,#00H

REL: JNB K1,$

MOV A,ID

CJNE A,#00H,IS0

CPL L1

LCALL DELAY

SJMP START

IS0: CJNE A,#01H,IS1

CPL L2

LCALL DELAY

SJMP START

IS1: CJNE A,#02H,IS2

CPL L3

LCALL DELAY

SJMP START

IS2: CJNE A,#03H,IS3

CPL L4

LCALL DELAY

SJMP START

IS3: LJMP START

DELAY10MS: MOV R6,#20

LOOP1: MOV R7,#248

DJNZ R7,$

DJNZ R6,LOOP1

RET

DELAY: MOV R5,#20

LOOP2: LCALL DELAY10MS

DJNZ R5,LOOP2

RET

END

7. C语言源程序

#include <AT89X51.H>

unsigned char ID;

void delay10ms(void)

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void delay02s(void)

{

unsigned char i;

for(i=20;i>0;i--)

{delay10ms();

}

}

void main(void)

{ while(1)

{ if(P3_7==0)

{delay10ms();

if(P3_7==0)

{

ID++;

if(ID==4)

{

ID=0;

}

while(P3_7==0);

}

}

switch(ID)

{ case 0:

P1_0=~P1_0;

delay02s();

break;

case 1:

P1_1=~P1_1;

delay02s();

break;

case 2:

P1_2=~P1_2;

delay02s();

break;

case 3:

P1_3=~P1_3;

delay02s();

break;

}

}

}

 

  · AT89S51单片机试验以及教程 01 闪烁灯

 · AT89S51单片机试验以及教程 02 模拟开关灯

 · AT89S51单片机试验以及教程 03 多路开关状态指示

  · AT89S51单片机试验以及教程 04 广告灯的左移右移

 · AT89S51单片机试验以及教程 05 广告灯(利用取表方式)

  · AT89S51单片机试验以及教程 06 报警产生器

 · AT89S51单片机试验以及教程 07 I/O并行口直接驱动LED显示

 · AT89S51单片机试验以及教程 08 按键识别方法之一

 · AT89S51单片机试验以及教程 09 一键多功能按键识别技术

 · AT89S51单片机试验以及教程 10 00-99计数器

 · AT89S51单片机试验以及教程 11 00-59秒计时器(利用软件延时)

 · AT89S51单片机试验以及教程 12 可预置可逆4位计数器

 · AT89S51单片机试验以及教程 13 动态数码显示技术

  · AT89S51单片机试验以及教程 14 4×4矩阵式键盘识别技术

  · AT89S51单片机试验以及教程 15 定时计数器T0作定时应用技术(一)

  · AT89S51单片机试验以及教程 16 定时计数器T0作定时应用技术(二)

 · AT89S51单片机试验以及教程 17 99秒马表设计

  · AT89S51单片机试验以及教程 18 “嘀、嘀、……”报警声

 · AT89S51单片机试验以及教程 19 “叮咚”门铃

 · AT89S51单片机试验以及教程 20 数字钟

 · AT89S51单片机试验以及教程 21 拉幕式数码显示技术

 · AT89S51单片机试验以及教程 22 电子琴

 · AT89S51单片机试验以及教程 23 模拟计算器数字输入及显示

  · AT89S51单片机试验以及教程 24 8X8 LED点阵显示技术

 · AT89S51单片机试验以及教程 25 点阵式LED“0-9”数字显示技术

 · AT89S51单片机试验以及教程 26 点阵式LED简单图形显示技术

 · AT89S51单片机试验以及教程 27 ADC0809A/D 转换器基本应用技术

 · AT89S51单片机试验以及教程 28 数字电压表

 · AT89S51单片机试验以及教程 29 两点间温度控制

 · AT89S51单片机试验以及教程 30 四位数数字温度计

 · AT89S51单片机试验以及教程 31 6位数显频率计数器

 · AT89S51单片机试验以及教程 32 电子密码锁设计

 · AT89S51单片机试验以及教程 33 4×4键盘及8位数码管显示构成的电子密码锁

 · AT89S51单片机试验以及教程 34 有存储器功能的数字温度计-DS1624技术应用

 · AT89S51单片机试验以及教程 35 DS18B20数字温度计使用

 

 

以上部分内容转载于网上,如有涉及到版权问题,请即通知本人删除

copyright© 2004-2005 all rights reserved www.JUNTRY(.IK8).com

juntry@126.com