键盘控制数码管显示与流水灯.docx

上传人:b****7 文档编号:9653929 上传时间:2023-02-05 格式:DOCX 页数:21 大小:1.34MB
下载 相关 举报
键盘控制数码管显示与流水灯.docx_第1页
第1页 / 共21页
键盘控制数码管显示与流水灯.docx_第2页
第2页 / 共21页
键盘控制数码管显示与流水灯.docx_第3页
第3页 / 共21页
键盘控制数码管显示与流水灯.docx_第4页
第4页 / 共21页
键盘控制数码管显示与流水灯.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

键盘控制数码管显示与流水灯.docx

《键盘控制数码管显示与流水灯.docx》由会员分享,可在线阅读,更多相关《键盘控制数码管显示与流水灯.docx(21页珍藏版)》请在冰豆网上搜索。

键盘控制数码管显示与流水灯.docx

键盘控制数码管显示与流水灯

课程设计任务书

 

题目键盘控制数码管显示及LED点亮

学院(部)电子与控制工程

专业建筑设施智能技术

班级320601

学生姓名

学号

 

5月15日至5月22日

指导教师

2014年5月22日

 

目录

1、摘要……………………………………………………2

2、设计要求………………………………………………2

3、方案设计说明…………………………………………2

4、程序流程图……………………………………………4

5、模块介绍………………………………………………4

1)8051CPU…………………………………………4

2)数码管显示………………………………………5

3)4×4键盘输入……………………………………………5

4)流水灯显示………………………………………………6

6、源程序…………………………………………………………7

程序执行结果…………………………………………………11

7、主要元器件介绍………………………………………………13

1)8051………………………………………………………13

2)共阴极数码管……………………………………………15

八、参考书籍………………………………………………………17

 

一、摘要

单片机是单片微型计算机,它是针对控制与检测应用而设计的,也称为微控制器。

它具有芯片体积小、集成度高、功能强、抗干扰能力强、性价比高等特点,被广泛的应用在工业自动化、仪器仪表、航天航空、消费电子、电力电子、汽车电子、计算机外设等领域。

自20世纪80年代MCS-51系列单片机问世以来,经历了三十多年的发展,在共享Inter公司8051内核技术的基础上,众多的半导体公司经过不断的技术更新,推出了庞大的系列兼容产品,使MCS-51系列单片机依然在各个应用领域扮演着重要的角色。

学习单片机的最有效方法就是理论与实践并重,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

本课程通过应用单片机技术完成了流程灯、数码管显示以及4×4键盘的识别等功能。

2、设计要求

(1)利用按键控制流水灯的显示。

(2)利用3×3或者4×4键盘,控制数码管的显示。

(3)利用到定时/计数器。

(4)利用到中断技术。

三、方案设计说明

根据要求我们所采用的方案为:

主程序为4×4键盘的扫描程序,通过P1口输入所按键的键值,将扫描到的键值“0~F”中的一位通过P0口在数码管上显示,并检测按键是否为“LED---”,如果不是,将回到程序继续扫描,如果是“LED---”,则跳到LED循环点亮。

LED循环点亮:

一共八盏灯,一盏灯亮,另七盏灯灭,从左到右循环点亮,在其中运用定时器T0工作在MODEL1,对其点亮时间进行控制点亮1s,对其定时器溢出中断次数进行统计,当溢出中断次数达到10次后,返回主程序开始。

4、程序流程图

5、模块介绍

(1)8051CPU

P1.3~P1.0分别连接4×4键盘的第一行到第四行;P1.7~P1.4分别连接4×4键盘的第一列到第四列;P2口分别接8个LED灯;P0口接1个共阴极数码管。

 

如图,MCS-51系列单片机的40只引脚按功能能可分为四类:

1电源引脚

电源引脚提供芯片的工作电源,MCS-51系列单片机采用单一的直流5V电源供电。

(1)Vcc(引脚40)——+5V。

(2)GND(引脚20)——地。

2晶体振荡器信号输入和输出引脚

晶体振荡器信号输入输出引脚外接振荡器或时钟源,为单片机提供时钟信号。

(1)XTAL1(引脚19)——振荡器信号输入。

(2)XTAL2(引脚18)——振荡器信号输出。

③I/O口线引脚

P0口(39~32脚):

P0.0~P0.7统称为P0口。

在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。

在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。

P1口(1~8脚):

P1.0~P1.7统称为P1口,可作为准双向I/O口使用。

对于52子系列,P1.0与P1.1还有第二功能:

P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/计数器2的外部控制端T2EX。

P2口(21~28脚):

P2.0~P2.7统称为P2口,一般可作为准双向I/O口使用;在接有片外存储器或扩展I/O口且寻址范围超过256字节时,P2口用作高8位地址总线。

P3口(10~17脚):

P3.0~P3.7统称为P3口。

除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。

P3口的第二功能如表1-1所示。

引脚

第二功能

P3.0

RxD

串行数据的输入端

P3.1

TxD

串行数据的输出端

P3.2

外部中断0的中断请求信号输入端

P3.3

外部中断1的中断请求信号输入端

P3.4

T0

定时器/计数器T0的外部计数信号输入端

P3.5

T1

定时器/计数器T1的外部计数信号输入端

P3.6

外部数据存储器和外部I/O口的写控制信号

P3.7

外部数据存储器和外部I/O口的读控制信号

表1-1

4控制信号线

ALE(引脚30)——地址锁存控信号,输出。

(引脚29)——外部程序存储器读选通信号,输出。

(引脚31)——内、外程序存储器选择控制端,输入。

RESET(引脚9)——复位信号。

(2)数码管显示

采用共阴极8位数码管来显示键盘输入的键值。

数码管字型编码表

(3)4×4键盘输入

键盘输入有“1,2,3,4,5,6,7,8,9,A,B,C,D,E,F”这些键值,“A”键的功能是流水灯循环显示。

键盘所有键的特征码

按键

特征码

键值

按键

特征码

键值

0

77

00

8

7D

08

1

B7

01

9

BD

09

2

D7

02

A

DD

0A

3

E7

03

B

ED

0B

4

7B

04

C

7E

0C

5

BB

05

D

BE

0D

6

DB

06

E

DE

0E

7

EB

07

F

EE

0F

(4)流水灯显示

流水灯显示方式:

开始全部点亮,按下“LED---”键后,点亮第一个LED,然后从左向右依次循环点亮。

6、源程序

;--------------键盘控制数码管显示及LED点亮程序---------

org0000h

ajmpmain

ORG0BH

JMPTIM0

main:

movdptr,#tab;将表头位置送入DPT

mov30h,#0ffh;将30显示单元清零

mov31h,#0ffh;将30显示单元清零

mov32h,#0ffh;将30显示单元清零

mov33h,#0ffh

mov34h,#0ffh;将30显示单元清零

mov35h,#0ffh

mov36h,#0ffh

mov37h,#0ffh

mov39h,#0ffh;将30显示单元清零

loop:

jbf0,kk1;f0若等于一则跳到KK1处

mov39h,#00h

kk2:

lcalldisplay;调用显示程序

lcallkey;调用键盘描程序

cpla;将A的值取反

jzloop;无键按下则返回

mova,38h;有键按下将键值送入ACC

cjnea,#0ah,norp;若A键未按下则返回到LOOP处

setbf0;若A键按下则将F0值1

jmpLED

movp3,#00h

ljmploop;返回LOOP处不断的循环

LED:

MOVTMOD,#00000001B

MOVTH0,#10000

MOVTL0,#10000

SETBTR0

MOVIE,#10000010B;

MOVR5,#10

MOVP3,#01H

jmploop

TIM0:

PUSHACC

PUSHPSW

MOVTH0,#10000

MOVTL0,#10000

DJNZR5,LOOP1

MOVR5,#10

MOVA,P3

RLA

MOVP3,A

LOOP1:

POPPSW

POPACC

RETI

kk1:

inc39h;将39H向上加一

mova,39h;将39H中的值送入ACC

cjnea,#10,kk2;ACC中的值与10相等则跳转至KK2

mov39h,#00h;若ACC等于零则将35H清零

cpl00h;将00H位取反

ajmpkk2;跳转至KK2处

norp:

mov37h,36h

mov36h,35h

mov35h,34h

mov34h,33h

mov33h,32h;将32H显示单元的内容送入33H

mov32h,31h;将31H显示单元的内容送入32H

mov31h,30h;将30H单元的内容送入31H

mova,38h;将键值送入ACC

mov30h,a;将ACC的值送入30H

ljmploop;返回主程序循环

display:

movp2,#0ffh;将P2口置高电平

movr7,#100;软件计数器赋值

dd1:

jnb00h,dd1d;若00H等0跳至DD1D

ajmpdd1b;若00H等于1则跳转至DD1B

dd1d:

mova,30h;将显示缓冲区30H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.7;开个位显示单元

lcalldelay100us;延时100US

setbp2.7;关个位显示单

ajmpdd1c

dd1b:

mova,30h;将显示缓冲区30H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

setbp2.7;开个位显示单元

lcalldelay100us;延时100US

setbp2.7;开个位显示单元

dd1c:

mova,31h;将显示缓冲区别31H中的值送入A

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.6;开十位显示单元

lcalldelay100us;延时100US

setbp2.6;关十位显示单元

mova,32h;将显示缓冲区32H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.5;开百位显示单元

lcalldelay100us;延时100US

setbp2.5;关百位显示单元

mova,33h;将显示缓冲区33H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.4;开千位显示单元

lcalldelay100us;延时100US

setbp2.4

mova,34h;将显示缓冲区34H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.3;开万位显示单元

lcalldelay100us;延时100US

setbp2.3

mova,35h;将显示缓冲区35H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.2;开十万位显示单元

lcalldelay100us;延时100US

setbp2.2

mova,36h;将显示缓冲区36H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.1;开百万位显示单元

lcalldelay100us;延时100US

setbp2.1

mova,37h;将显示缓冲区37H中的值送入ACC

movca,@a+dptr;查表取要显示的数并把查表的结果送入ACC

movp0,a;将要显示的数送入P0口

clrp2.0;开千万显示单元

lcalldelay100us;延时100US

setbp2.0;关千万位显示单元

djnzr7,dd1;R7不等于0返回至DD1处

ret;R7等于0子程序返回

KEY:

LCALLKS;调用检测按键子程序

JNZK1;有键按下继续

ljmpkey_exit;无键按下退出KEY子程序

K1:

LCALLdelay4ms;返回继续检测有无按键按下

LCALLdelay4ms

LCALLKS;有键按下继续延时去抖动

JNZK2;再一次调用检测按键程序

ljmpkey_exit;无键按下退出KEY子程序

K2:

MOVR2,#0efH;将扫描值送入R2暂存

MOVR4,#00H;将第一列的列值00H送入R4暂存,R4用于存放列

K3:

MOVP1,R2;将R2的值送入P1口

L6:

JBP1.0,L1;P1.0等于1跳转到L1

MOVA,#00H;将第一行的行值00H送入ACC

AJMPLK;跳转到键值处理程序

L1:

JBP1.1,L2;P1.1等于1跳转到L2

MOVA,#04H;将第二行的行值04H送入ACC

AJMPLK;跳转到键值理程序进行键值处理

L2:

JBP1.2,L3;P1.2等于1跳转到L3

MOVA,#08H;将第三行的行值08H送入ACC

AJMPLK;跳转到键值处理程序

L3:

JBP1.3,NEXT;P1.3等于1跳转到NEXT处

MOVA,#0cH;将第四行的行值0CH送入ACC

LK:

ADDA,R4;行值与列值相加后的键值送入A

mov38h,a;将A中的值送入34h暂存

K4:

lcalldisplay;调用动态显示子程序

LCALLKS

JNZK4;按键没有松开继续返回检测

RET;按键松开返回

NEXT:

INCR4;将列值加一

MOVA,R2;将R2的值送入A

JNBACC.7,key_exit;扫描完成跳至KEY处进行下一回合的扫描

RLA;扫描未完成将A中的值右移一位进行下一列的扫描

MOVR2,A;将ACC的值送入R2暂存

AJMPK3;跳转到K3继续

key_exit:

mova,#0ffh;无键按下则将A赋成0FFH

ret

KS:

MOVP1,#0FH;将P1口高四位置0低四位值1

MOVA,P1;读P1口

XRLA,#0FH;将A中的值与A中的值相异或

RET;子程序返回

delay4ms:

;4ms延时

MOVR5,#08H

L7:

MOVR6,#0FAH

L8:

DJNZR6,L8

DJNZR5,L7

RET

delay100us:

;100us延时

movr5,#50

djnzr5,$

ret

tab:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7'

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F'

DB3EH,50H,40H,08H,00H;'U,r,-,-,BLANK

END

程序执行结果

按键0按下显示结果

按键LED---按下结果(输入位闪烁)

按键D按下显示结果(d)

按键B按下显示结果(b)

7、主要元器件介绍

1)8051

51系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。

8051为4KBROM,8751为4KBEPROM,8031片内无程序储存器,8951为4KBEEPROM。

其他性能结构一样,有片内128BRAM,2个16位定时器/计数器,5个中断源。

其中,8031性价比较高,又易于开发,目前应用面广泛。

MCS-51单片机的内部组成。

MCS-51单片机的引脚和内部组成如图1.1所示。

通常采用DIP或PLLD封装,

其内核是8051CPU,CPU的内部集成有运算器和控制器,运算器完成运算操作(包括数据运算、逻辑运算等),控制器完成取指令、对指令译码以及执行指令。

MCS-51单片机的片内资源有:

图1.1MCS-51单片机的内部组成

·中央处理器:

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

·数据存储器(RAM):

8051内部有128字节数据存储器(RAM)和21个专用寄存器单元,它们是统一编址的,专用寄存器有专门的用途,通常用于存放控制指令数据,不能用作用户数据的存放,用户能使用的RAM只有128个字节,可存放读写的数据,运算的中间结果或用户定义的字型表。

·程序存储器(ROM):

8051共有4K字节程序存储器(ROM),用于存放用户程序和数据表格。

·定时/计数器(ROM):

8051有两个16位的可编程定时/计数器,以实现定时或计数,当定时/计数器产生溢出时,可用中断方式控制程序转向。

·并行输入输出(I/O)口:

8051共有4个8位的并行I/O口(P0、P1、P2、P3),用于对外部数据的传输。

·全双工串行口:

8051内置一个全双工异步串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

·中断系统:

8051具备较完善的中断功能,有五个中断源(两个外中断、两个定时/计数器中断和一个串行中断),可基本满足不同的控制要求,并具有2级的优先级别选择。

·时钟电路:

8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的时序脉冲,但需外接晶体振荡器和振荡电容。

2)共阴极数码管

LED数码管(LEDSegmentDisplays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。

led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。

位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。

颜色有红,绿,蓝,黄等几种。

led数码管广泛用于仪表,时钟,车站,家电等场合。

选用时要注意产品尺寸颜色,功耗,亮度,波长等。

下面将介绍常用LED数码管内部引脚图片

下面介绍数码管字型编码表

8、参考书籍

《单片机原理及接口技术》段晨东主编清华大学出版社

 

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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