欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    基于单片机的电话拨号系统的设计毕业论文.doc

    • 资源ID:3922828       资源大小:568.50KB        全文页数:45页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的电话拨号系统的设计毕业论文.doc

    兰州工业学院毕业设计(论文)题目 基于单片机的电话拨号系统的设计 学 院 电子信息工程学院 专 业 电子信息工程技术 班 级 嵌入式1 1 姓 名 把德玲 学 号 201110103101 指导教师(职称)贾桂霞(副教授) 日 期 2014年3月 兰州工业学院毕业设计(论文)任务书电子信息工程系14届电子信息工程技术(嵌入式方向)专业毕业设计(论文)任务书毕业设计(论文)题目基于单片机的电话拨号系统的设计课题内容性质工程设计课题来源性质教师收集的结合生产实际的课题设计/论文校内(外)指导教师职 称工作单位及部门联系方式贾桂霞副教授电子信息工程系18919080768一、题目说明(目的和意义):用单片机设计一个模拟电话拨号系统,用1602LCD液晶显示来实现显示时间并能用矩阵式按键控制电话所拨号码及显示功能的设计.通过本设计使学生在获取技术资料、专业知识综合运用、科技论文撰写、电子产品设计等方面的能力得到提高。二、设计(论文)要求(工作量、内容): 【设计内容】1、设计一个单片机监控的电话拨号键盘,将电话键盘中拨出的某一电话号码,显示在LCD显示屏上。电话键盘共有12个键,除了“0” “9”10个数字键外,还有“*”键用于实现退格功能,即清除输入的号码;“#”键用于清除显示屏上所有的数字显示。要求每按下一个键要发出声响,以表示按下该键。2、画出硬件电路图,完成硬件电路的设计;然后编写控制程序并使用Proteus进行仿真。【设计要求】 1、设计环境硬件:微机、所需元器件等;软件:Protel电路设计软件、WAVE/keilC仿真软件、Proteus仿真软件。2、设计步骤1)系统总体设计;2)电子元件选型及硬件电路设计;3)控制程序编写; 4)Proteus仿真调试。【设计报告要求】1、 论文撰写应该符合兰州工业学院毕业论文撰写规范要求;论文中应该包括绪论、功能、方案确定、单元电路设计、完整的硬件电路设计及软件流程等内容。三、进度表日 期内 容第15周第16周第17周第18-20周第21周下学期 第12周1、下达设计任务、查阅资料,确定系统总体设计方案;2、 拨号电话的原理电路设计;3、印制电路板设计;4、软件设计,Proteus仿真调试;6、论文撰写;7、毕业答辩。完成日期第21周(本学期)答辩日期第1-2周(下学期)四、 主要参考文献、资料、设备和实习地点及翻译工作量:(一)参考文献1 赵又新著,微机原理与接口技术. 中国电力出版社,20072 韩晓东、李勇江等著,Protel 99 SE电路设计实用教程. 中国铁道出版社,20083 胡汉才,单片机原理及其接口技术.清华大学出版社,20104 陈忠平编著,51单片机C语言程序设计经典实例. 电子工业出版社,20125 张涵等编著,基于PROTEUS的电路及单片机设计与仿真. 电子工业出版社,2012(二)实习地点学校实验室、学生自己考察的外部地点。(三)翻译工作量对论文摘要进行英文翻译。要求英文摘要250单词以内,关键词58个词。指导教师签字教研室主任签字主管系领导签字 年 月 日年 月 日年 月 日注:本任务书要求一式两份,一份系部留存,一份报教务处实践教学科。摘 要随着人们生活水平的不断提高,电话在人们的日常生活中是比较常见的电子产品之一,它已进入我们的每一个家庭。本文设计的是基于单片机的电话拨号系统,硬件部分采用AT89C51单片机作为电话键盘拨号按键显示的核心部件,矩阵式键盘作为输入电路模块,1602LCD作为显示电路模块。可以实现所拨号码显示退格、清屏等功能,并使用了proteus和keilc51软件进行仿真。结果表明该设计具有电路简单、读取方便、显示直观、操作简单、编程容易和成本廉价等优点,可用于一般的生活和工作,也可通过改装,提高其性能,增加功能,从而给人们的生活带来更多的方便。关键词:单片机;键盘;LCDIAbstractAs people living standard unceasing enhancement, the phone in People's Daily life is one of the more common electronic products, it has entered our every family.Design of this article is based on single chip microcomputer telephone dialing system, the hardware part adopts AT89C51single-chip microcomputer as the core component of dial phone keyboard button shows, matrix keyboard as input circuit, 1602 LCD display circuit. Can realize the dial number display backspace, screen clearing, and other functions, and use keilc51 and proteus simulation software.The results show that the design has simple circuit, convenient to read, display intuitive, simple operation, easy programming and cost advantages of cheap, can be used for normal life and work, also can through modification, improve its performance, add features, so as to bring to people's life more convenient.Keywords: microcontroller ;Keyboard ;LCDIII 目 录摘 要IAbstractII1 绪 论12 系统总体设计22.1系统基本设计方案22.1.1控制部分的选择方案与论证22.1.2 显示电路模块的选择方案与论证22.1.3输入电路模块的选择方案与论证22.2电路设计最终方案33 系统硬件设计43.1 系统硬件原理图43.2主芯片模块43.2.1 AT89C51芯片引脚53.2.2晶振和复位电路模块73.3显示电路模块83.3.1 1602LCD简介93.3.2 1602LCD的RAM地址映射及标准字库表123.3.3 1602LCD的一般初始化过程133.4矩阵键盘输入电路模块143.4.1矩阵键盘的基本结构143.4.2矩阵键盘的按键识别方法144 系统软件设计164.1 程序设计整体思路164.2.主要功能模块设计174.2.1 键盘扫描模块设计184.2.2 LCD显示模块设计205 系统仿真与调试245.1系统运行环境245.2 系统仿真说明245.2.1 KEILC调试245.2.2 Proteus调试255.2.3 Proteus与Keilc联调实现电路仿真25总 结26致 谢28参考文献29附件1 源程序代码30附件2 电话拨号系统电路原理图37兰州工业学院毕业设计说明书(论文)1 绪 论 随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。各种数字显示仪器中的显示、广告牌、数码产品等,传统的数码管显示已经远远不能满足各行各业的需求。单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。基于单片机的LCD显示是一种用单片机来控制的一种显示系统,它不仅能显示种各数字、字母、还能显示各种字体的汉字以及一些简单的图象,使用起来极为方便,只要通过对单片机写入一定的程序来控制LCD的显示即可完成,根据程序的不同而产生不同不效果。随着单片机产品以及LCD产品的不断涌现,这一领域已经得到了飞速的发展。 本文设计的是基于单片机的电话拨号系统,主要介绍了一种基于AT89C51单片机的电话拨号控制系统,该系统可以实现电话号码数字显示。系统主要由电话拨号矩阵键盘、单片机最小系统、LCD1602显示屏几个单元电路组成。在本设计中,最终选用的是矩阵式键盘,把所操作的数字送至单片机,通过单片机实现号码的显示与控制。36兰州工业学院毕业设计说明书(论文)2 系统总体设计2.1系统基本设计方案2.1.1控制部分的选择方案与论证 方案一:用可编程逻辑器件设计可采用PLD器件,设计起来结构清晰,各个模块从硬件上设计起来相对简单,控制与显示的模块间连接也会比较方便。但是考虑到本设计的特点,EDA在能够扩展上比较受局限,占用的资源也多。从成本上讲,可编程逻辑器件价格比较高。 方案二:用单片机设计用单片机芯片作为控制部分,单片机有丰富的中断源,它的准确度相当高,并且C语言的灵活运用,给编程带来了方便。单片机I/O功能也比较强大,容易对其进行扩展,使设计更加完善,此外单片机的成本也比较低。综上所述,单片机资源丰富,程序编写也灵活简单,可移植性强,性价比也高,所以选择单片机作为主控芯片。2.1.2 显示电路模块的选择方案与论证LCD由于其显示清晰,显示内容丰富,显示信息量大,使用方便,显示快速而得到了广泛的应用。对于此系统本设计选用的LCD液晶能够显示英语字母和数字,能够很好的满足显示要求,因此本设计选择了此方案。2.1.3输入电路模块的选择方案与论证键盘用于实现单片机应用系统中的数据和控制命令的输入,键盘输入也是单片机应用系统中使用最广泛的一种输入方式。键盘输入的主要对象是各种按键或开关。这些按健或者开关可以独立使用,也可以组合成键阵使用。单片机中常用的按键式键盘可以分为两类:独立连接式和行列式。每类按译码方式的不同又分为编码式和非编码式两种。单片机中一般使用的都是用软件来识别和产生键代码的非编码键盘。行列式键盘的编码方式有静态和动态两种。静态接口主要由一个行编码器和一个列编码器构成;动态接口可采用计数器,译码器和数据选择器构成。这两种键盘由硬件完成键的辨码任务。一般在小型仪器仪表和控制系统中,使用较多的是行列式和独立式的非编码键盘;如果系统要求实现多键同时按下的处理,则用非编码独立方式较为合适。 方案一:采用独立式按键电路独立式按键电路每个按键单独占有一根I/O接口线, 每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点为当按键较多时占用单片机的I/O口数目较多,优点为电路设计简单,且编程相对比较容易。 方案二:采用矩阵式键盘电路矩阵式键盘为4*3矩阵式行列扫描,虽然软件较为复杂,但是当按键较多时可降低占用单片机的I/O口数目。对于本系统,由于按键数目多,故采用方案二。2.2电路设计最终方案本系统包括主芯片模块、显示电路模块、键盘输入模块、晶振和复位电路模块。综上各方案所述,确定最终设计方案为:采用单片机作为主控芯片,1602LCD液晶作为显示部分,矩阵式按键作为键盘输入模块。3 系统硬件设计3.1 系统硬件原理图 将电话拨号键盘上所拨号码显示在1602液晶屏上的电路如图3.1所示。图3.1系统硬件原理图3.2主芯片模块 AT89C51是一种带4K字节闪存可编程可擦除只读存储器FPEROMFalsh Programmable and Erasable Read Only Memory )的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如图3.2所示。图3.2 AT89C51芯片引脚图3.2.1 AT89C51芯片引脚管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如表3.1所示。表3.1 P3口特殊功能表接口功能P3.0 /RXD串行输入口P3.1 /TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 /T0记时器0外部输入P3.5 /T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通 P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3.2.2晶振和复位电路模块 (1)复位电路单片机需要复位以后才能正常工作,复位的目的就是使单片机处于一个基准点,在这个基准点,程序将会从C51的main()主函数的第一条语句开始执行。复位工作是一个纯硬件的工作,一般是在上电开始几毫秒内执行完毕。 复位的过程很简单,在电源刚刚合上时,电流经过电阻对电解电容器充电,这样在电阻上就形成一个电压,对于单片机来说,这个电压就是复位电压。经过若干毫秒以后,电解电容器被充满电,这时电阻就没有电流流过,电阻两端也就没有电压,单片机的复位脚电压恢复为0,复位工作结束,单片机开始工作。晶振和复位电路模块是系统中很重要的一部分,如图3.3所示。图3.3 晶振和复位电路 (2)晶振电路 在AT89C51单片机内部有一振荡电路,只要在单片机的XTAL1和XTAL2引脚外接晶振,就改成了自激振荡器并在单片机内部产生时钟脉冲信号。如图3.3所示,单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个引脚间,接一个晶振及两只电容就构成了时钟电路。电路中的器件可以通过计算和实验确定,也可以参考一些典型电路参数。电路中,电容器C1和C2对晶振器频率有微调作用,通常取值范围30+10pF;石英晶体选择6MHZ或12MHZ都可以。其结果只是机器周期时间不同,影响计算器的计数初值。3.3显示电路模块本设计中重点部分是基于单片机系统的液晶显示部分。液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件,英文名叫“LCD Module”, 简称“LCM”,中文一般为“液晶显示模块”。在单片机系统中使用液晶显示模块作为输出有以下优点:显示资料高、数字式接口、功率消耗小、电路中的应用。3.3.1 1602LCD简介工业字符型液晶能够同时显示16*2即32个字,(16列2行)1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的两条是背光电源线。 一般1602字符型液晶显示器实物如图3.4所示。图3.4 1602LCD的实物图1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,应用中并无差别。1602LCD原件显示原理如图3.5所示。图3.5 1602LCD原件显示原理图1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3.2所示。表3.2 引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VEE液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的控制命令表如表3.3所示。表3.3 控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H, 光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S: 屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。3.3.2 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3.6是1602的内部显示地址。图3.6 1602LCD内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B (80H) =11000000B (C0H) 。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。其中字符代码与字符图形对应关系如图3.7所示。 图3.7字符代码与字符图形对应关系3.3.3 1602LCD的一般初始化过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置3.4矩阵键盘输入电路模块3.4.1矩阵键盘的基本结构矩阵键盘中的键实际上就是一个机械开关,位于行线和列线的交点处,图3.8所示为本设计中使用的4行×3列的12键矩阵键盘,当键被按下时,其交点的行线和列线接通,使相应行线或列线上的电平发生变化,根据电平变化情况确定被按下的键。 图3.8键盘排列图 3.4.2矩阵键盘的按键识别方法常用的键盘识别方法有:行扫描法,线翻转法和利用8279键盘接口的中断法。前两种方法相当于查询法,需要反复查询按键的状态,会占用大量的CPU时间。后一种方法在有键按下时向CPU申请中断,平时并不需要占用CPU时间。在本系统中,完全可以不使用中断法完成键盘接口,这是由系统的特殊性决定的。首先,对于本系统而言,要实现便携式的设计,硬件电路使用的器件越少越好。其次,被测信号由外中断引脚输入,未占用单片机4个并行I/O口中的任何一个,系统有足够的资源利用自身I/O 口完成接口。最后,只有当传感器输出信号频率为空载频率,系统处于空闲待测的状态下,才允许键盘输入,因此键盘识别占用的CPU时间不会对系统正常工作造成影响。因此直接利用单片机并行接口完成键盘的接口,采用行扫描法进行键盘识别。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如图3.9所示键盘。图3.9键盘原理图(1)判断键盘上是否有键闭合将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 (2)去除键的机械抖动为保证键的正确识别,需要进行去抖动处理。其方法是得知键盘上有键闭合后延迟一段时间,再判别键盘的状态,若仍有键闭合,则认为键盘上有一个键处于稳定的闭合期,否则认为是键的抖动或者是干扰。(3)确定闭合键的物理位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。(4)得到闭合键的编号在得到闭合键的物理位置的基础上,根据给定的按键编号规律,计算得出闭合键的编号。(5)确保CPU对键的一次闭合仅做一次处理为实现这一功能,可以采用等待闭合键释放以后在处理的方法。4 系统软件设计C51单片机可以应用汇编语言和C语言进行编程。汇编语言与机器指令一一对应,所以用汇编语言编写的程序在单片机里运行起来效率较高,但可移植性差。C语言程序可读性高,也便于移植到其它系统中,故本次设计使用C语言编程。4.1 程序设计整体思路本设计是由单片机控制的LCD显示系统,另外键盘来控制显示的方式。用P3口作为键盘的输入端,对于按键的识别方式可以是中断也可以是查询,在此设计中所选用的是行扫描法进行键盘识别。用P0口作为LCD的显示控制端,由于此LCD的显示屏被分为了两部分,所以应该对LCD显示位置进行设置。由此LCD的显示时序可知,在显示过程中还需要一定的延时并且在显示前需将一些特定的控制端置相应的电平,所以还需要一个适当的延时子程序以及输入数据前的准备程序。除了这些外,还应写一个初始化程序,用来对LCD进行初始化设置。最后就是主函数,它的主要功能就是判断键盘上是否有按键闭合,若有按键闭合,然后根据按下的是哪一个键来执行相应的程序,选择相应的显示方式。系统功能设计框图如图4.1所示。电话拨号系统声音控制模块键盘扫描模块显示模块 图4.1 系统功能设计框图4.2.主要功能模块设计 系统主程序设计流程图如图4.2,其源代码见附件1。开始初始化模块LCD初始化设置LCD第一行显示键盘扫描否是否有键下?是T0中断控制按键声音是*键按下?退格否#键按下?是清屏是否超过11位?否显示数字结束图4.2 系统主程序设计流程图 系统第一次上电后,先进行初始化,初始化LCD模块,设置LCD中各个部分的显示内容,然后进行键盘扫描,获取按键,以及根据各按键的不同执行相应的操作,最后等待释放,释放之后再进行键盘扫描,循环以上操作。4.2.1 键盘扫描模块设计键盘上有很多键,每一个键对应一个键码,以便根据键码转到相应的键处理子程序,进一步实现数据输入和命令处理的功能。键盘扫描子程序设计流程图如图4.3所示,其源代码见附件1。键盘扫描确定按键的物理位置计算键码等待释放否是否有键按下是开始结束消除抖动图4.3键盘扫描模块程序流程图下面给出一个具体的例子解释图4.3的流程。 如图3.2所示,AT89C51单片机的P3口用作键盘I/O口,键盘的列线接到P3口的低4位,键盘的行线接到P3口的高4位。列线P3.0-P3.3分别接有4个上拉电阻到正电源+5V,并把列线P3.0-P3.3设置为输入线,行线P3.4-P3.7设置为输出线。4根行线和4根列线形成16个相交点。 (1)检测当前是否有键被按下。检测的方法是P3.4-P3.7输出全“0”,读取P3.0-P3.3的状态,若P3.0-P3.3为全“1”,则无键闭合,否则有键闭合。 (2)去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。 (3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P3.4-P3.7按下述4种组合依次输出如表 4.1所示。表4.1 键盘扫描I/O口高低电平(0或1)P3.71110P3.61101P3.51011P3.40111 (4)在每组行输出时读取P3.0-P3.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。键盘扫描主要代码如下:uchar GetKey () uchar i, j, k = 0; uchar KeyScanCode = 0xEF, 0xDF, 0xBF, 0x7F; /键盘扫描码 uchar KeyCodeTable =0xEE,0xED,0xEB,0xDE,0xDD,0xDB,0xBE,0xBD,0xBB,0x7E,0x7D,0x7B; /键盘特征码 P3 = 0x0F;/扫描键盘获取按键序号 if (P3! = 0x0F) DelayMS(20);/延时去机械抖动 if (P3! = 0x0F) for (i = 0; i< 4;i+) P3 = KeyScanCodei; for (j = 0;j < 3;j+) k = i * 3 + j;if (P3 = KeyCodeTablek) return k; else return 0xFF;/-4.2.2 LCD显示模块设计LCD LM016L的显示函数很简单,只要按照时序图操作,结合相关指令集,写好LCD初始化程序,清屏程序,写指令程序,写数据程序,读数据程序等一系列驱动程序,可完成LCD的所有显示需要。在本设计中,由于要显示的内容比较多,且有些需重复显示,有些只要显示一次,故只画液晶显示的基本流程。LCD显示模块流程如图4.4所示,其源代码见附件1。LCD初始化显示发出数据延时写LCD命令延时开始结束 图4.4 LCD显示模块流程图 #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define DelayNOPx() _nop_();_nop_();_nop_();_nop_(); sbit BEEP =P10; sbit RS = P20; sbit RW = P21; sbit E = P22; void DelayMS (uint ms); /声明延时函数 bitLCD_Busy (); voidLCD_Pos (uchar); voidLCD_Wcmd (uchar); voidLCD_Wdat (uchar);/-/ 标题字符串 char code Title_Text = "- Phone Code -"/键盘序号与键盘符号映射表 uchar code Key_Table='1','2','3','4','5','6','7','8','9','*','0','#'/键盘拨号数字缓冲 uchar Dial_Co

    注意事项

    本文(基于单片机的电话拨号系统的设计毕业论文.doc)为本站会员(哈尼dd)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开