基于单片机的模拟手机键盘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息工程学院课程设计报告书题目 :基于单片机的模拟手机键盘
专业:电子信息科学与技术
班级:_
学号:
学生姓名:_
指导教师:
2013年10月18日
信息工程学院课程设计任务书
学号学生姓名专业(班级)电子信息
设计题目基于单片机的模拟手机键盘
单片机晶振频率:12MHz;
电源电压: +5v






编程控制单片机端口实现按键输出0~9 十个数字并在液晶上显示出来。





两天



注:可填写课程设计报告的字数要求或要完成的图纸数量。





[1]康华光,陈大钦 . 电子技术基础—模拟部分(第五版)[M]. 北京:高等教育出版社,
2005

考[2] 郭天祥 .51 单片机 C 语言教程[ M]. 北京:电子工业出版, 2012


指导教师签字教研室主任签字
信息工程学院课程设计成绩评定表
学生姓名:学号:专业(班级):电子信息
课程设计题目:基于单片机的模拟手机键盘
指导教师评语:
成绩:
指导教师:
年月日
摘要
本文是做基于89C52 单片机的手机键盘的设计;利用P0 端 3*4 的键值来模拟手机键盘
中的数字,将采用编程的方法来实现使用12 个键来做到0 到 9 的数字输出和退位清零,并
在液晶屏上显示。

手机作为现代移动通信的载体,其技术也得到了很大的发展,手机的键盘布局已经成了各大厂商门竞争的主要方面,本次设计提高了我们对单片机的操作能力,让我们更加认识到单片机的广阔前景,对于我们更加深入学习和了解单片机提供了极大的帮助。

关键词:矩阵键盘,LCD液晶屏, 89C52 单片机。

目录
1任务提出与方案论证 ..............................................................................................................- 2 -
1.1方案一 ......................................................................................................................- 2 -
1.2方案二 ..........................................................................................................................- 2 -
1.3方案对比与选择 ............................................................................................................- 2 -
2.系统硬件电路的设计 .............................................................................................................- 4 -
2.1微处理器的选择 ...........................................................................................................- 4 -
2.2单片机的基本机构 ........................................................................................................- 4 -
2.3键盘接口电路 ................................................................................................................- 5 -
2.4消除抖动 ........................................................................................................................- 6 -3详细设计 ..................................................................................................................................- 7 -
3.1程序流程设计 ...............................................................................................................- 7 -
3.2硬件电路设计 ...............................................................................................................- 8 -4总结.........................................................................................................................................- 9 -参考文献 (10)
附录 (11)
1任务提出与方案论证
1.1 方案一
采用 8255 芯片,通过 PA,PB 口输出; PC 的高四位输出,低四位输入;定时器测量两次按键的间隔,进行手机键盘的模拟;此种方法思路简单,能够实现 0 到 9 的数值在数码管上的显示。

方框图如图 1.1。

主控模块8255 芯片单片机
(AT89C5
2)键盘扫描Lcd 液晶显示
图 1.1 方案一方框图
1.2方案二
采用易购的AT89C52 系列。

该方法采用静态显示法来控制LED 的数值显示,P0 口接锁存器防止总线间的冲突, P0 口输出段码数据, P1.0 口到 P1.8 口接 9 个按键,用于 1 到 26 的数值设置;在硬件电路不变的情况下,通过改变信号来实
现数码管的显示。

方框图如图 1.2 所示。

键盘扫描
数据锁存器LCD 显示AT89C52
P0 端口
列驱动图 1.2 方案二方框图
1.3 方案对比与选择
由于方案 2 需要数据锁存器等硬件,且接口较复杂,又考虑到数码管显示只
有6 位,而且系统没有其他复杂的处理任务;所以在综合比较之下,方案1 显的更加简单明了,可行性更高;我们一致决定采用方案 1 来实现 a 到 z 对应的 1 到26的数值显示。

2.系统硬件电路的设计
2.1 微处理器的选择
1)控制中心使用 MCS-51 来实现
2)驱动用 8255 芯片来实现
3)显示用 6 个三级数码显示管来实现
4)使用 +5V 电源
2.2 单片机的基本机构
1)MCS-51 单片机内部结构
MCS-51 单片机内部包含中央处理器( CPU)、程序存储器 (ROM) 、数据存储器(RAM) 、定时 / 计数器、并行 I/O 接口、串行 I/O 接口和中断系统等几大单元。

其内部结构图如图 2.1 所示。

振荡器8051 4KB掩膜特殊功能寄存器定时器T0 T1
ROM SDR 128KB
CPU
并行 I/O 接口串行接口中断系统
P0P1P2P3TXD RXD INT0INT1
图 2.1 单片机 8051 内部结构图
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿 (Princeton)结构。

INTEL 的 MCS-51 系列单片机采用的是哈佛结构的形式,而后续产品 16 位的 MCS-96 系列单片机则采用普林斯顿结构。

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

2)数据存储器
8051 内部有 128 个 8 位用户数据存储单元和 128 个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的 RAM 只有 128 个,可存放读写的数据,运算的中间结果或用户定义的字型表。

3)程序存储器
8051 共有 4KB 8 位掩膜 ROM ,用于存放用户程序,原始数据或表格。

4)定时 /计数器
单片机 8051 内有两个 16 位的可编程定时 /计数器,以实现定时或计数产生
中断用于控制程序转向。

5)并行输入输出 (I/O) 口
单片机 8051 共有 4 组 8 位 I/O 口(P0、 P1、 P2 或 P3),用于对外部数据的传输。

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

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

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

2.3 键盘接口电路
图 2.2 为键盘接口电路的原理图,图中矩阵式键盘和8255 的 PA 口相连,
AT89C52 的 PB 和 8255 的 D0 口相连, AT89C52 不断的扫描键盘,看是否有键
按下,如有,则根据相应程序对按键作出相应的反应。

图 2.2矩阵式键盘接口图
2.4 消除抖动
使用键盘时,由于键的闭合和断开,此过程中会产生一个抖动期。

抖动时间的长短与开关机械特性有关,一般为10~20ms。

为了保证CPU 对键的闭合的正确判定,必须去除抖动,在键的稳定闭合和断开期间读取键的状态。

去除抖动可以采用硬件和软件两种方法。

硬件方法就是在案件输入通道添加去抖动电路,从根本上避免电压抖动的产生。

软件方法则采用延迟10~20ms 的时间,待电压稳定后,在进行状态输入。

由于软件延时方法经济实惠且技术上完全可行,所以此设计采用软件方法去抖。

3详细设计
3.1 程序流程设计
利用 KEIL 软件编程,使用单片机P0 口接上拉电阻驱动液晶屏,使用P3 口连接
矩阵键盘扫描按键,在程序开始运行之后,首先是对数据进行初始化之后判断按键
值,通过键值判断该键值是否设置了相应数值,有则转入相应的的程序输出数值,若没有则返回继续判断。

开始
液晶初始化
N
是否有键按下
Y
松手检测
松手
输出数据
返回继续扫描
图 3.1主程序流程图
3.2 硬件电路设计
硬件电路使用PROTEUS软件连线,主要使用A T89C52单片机芯片和LM016L液晶芯片 ,LI 利用 P0 口驱动液晶,用P3 口连接矩阵键盘。

图 3.2硬件连接图
4总结
本系统分硬件与软件两部分,硬件以单片机STC89C52 为核心,以3*4 矩阵键盘为输入端,并结合LCD 液晶显示模块模拟手机显示屏,构成整个硬件系统。

软件部分是整个控制器的重要组成部分,设计的好坏关系到系统性能的稳定程
度。

在控制器的软件中,采用 C 语言设计程序,程序可读性强。

回顾起此次单片机课程设计,我仍感慨颇多,在这两个个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,遇到困难,永远不要沮丧气馁。

两周的设计完满结束了,经过自己的努力和同学的帮忙终于有了成果,特别离
不开指导老师的悉心教导,方师的精心指导和解说使我受益匪浅,相信他的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。

感谢这些老师不畏辛劳,热心精心的指导。

在这里向他们说声谢谢,你们辛苦了。

在这里,我们真诚
地感谢在本次设计中给予我们许多帮助和支持的指导老师和各位同学们,真心地祝愿你们身体健康,工作顺利。

参考文献
[1]康华光,陈大钦 . 电子技术基础—模拟部分(第五版)[M]. 北京:高等教育出版社,2005
[2] 郭天祥 .51 单片机 C 语言教程[ M].北京:电子工业出版,2012
附录
程序清单:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit EN=P2^0;
sbit RS=P2^1;
sbit ring=P2^2;
uchar code table[]="0123456789";
uchar code table2[]="FISH LEONG";
uchar temp,num,num2;
char x;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void con(uchar con)
{
RS=0;
EN=0;
P0=con;
delay(1);
EN=1;
delay(1);
EN=0;
}
void date(uchar date)
{
RS=1;
EN=0;
P0=date;
delay(1);
EN=1;
delay(1);
EN=0;
}
void init()
{
x=-1;
ring=0;
con(0x38);
con(0x0e);
con(0x06);
con(0x01);
con(0x80);
for(num2=0;num2<10;num2++)
{
date(table2[num2]);
}
con(0x80+0x40);
}
void RING()
{
ring=1;
delay(100);
ring=0;
}
void key_scan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
x++;
RING();
switch(temp)
{
case 0xe0:num=1;break;
case 0xd0:num=2;break;
case 0xb0:num=3;break;
}
date(table[num]);
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
x++;
RING();
switch(temp)
{
case 0xe0:num=4;break;
case 0xd0:num=5;break;
case 0xb0:num=6;break;
}
date(table[num]);
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
x++;
RING();
switch(temp)
{
case 0xe0:num=7;break;
case 0xd0:num=8;break;
case 0xb0:num=9;break;
}
date(table[num]);
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
RING();
switch(temp)
{
case 0xe0:
con(0x80+0x40+x);
date(' ');
con(0x80+0x40+x);
x--;
if(x==-2)
{
init();
x=-1;
}
break;
case 0xd0:
num=0;
x++;
date(table[num]);
break;
case 0xb0:
init();
break;
}
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
if(x==16)
init();
}
void main()
{
init();
while(1)
{
key_scan();
}
}。

相关文档
最新文档