基于单片机的电子电话簿的设计.docx
《基于单片机的电子电话簿的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子电话簿的设计.docx(43页珍藏版)》请在冰豆网上搜索。
基于单片机的电子电话簿的设计
摘要
该课题主要是以AT89S52单片机和数据存储器AT24C64为核心器件,对固定电话的电子电话簿进行改进,使之具有存储姓名和电话号码、查询电话号码的功能。
实现方法是把26个英文字母设计到固定电话的按键上,当要存储姓名和电话号码时,通过按键输入拼音,每一个拼音对应一个地址,把姓名的地址以结构体的形式存入芯片AT24C64中,把电话号码以字符形式输入存储。
同理,当对电话号码进行查询时,从键盘输入姓名,利用查找程序从存储器芯片中找出要查找的姓名,确定后并可把查找出的电话号码直接拨出去。
关键词单片机解码语音芯片电子电话簿
Abstract
Subjectthisregardsone-chipcomputerAT89S52anddatamemoryAT24C64askeydevicesmainly,makingtheimprovementtotheelectronictelephonedirectoryoffixedtelephone,makingithavethefunctionofstoringnameandtelephonenumberandthefunctionofinquiringabouttelephonenumber.Implementationmethodtodesignistogetregularbuttonofphone26Englishletter.Whenstoringnamesandtelephonenumber,throughkeyinginthespelling,makeeveryspellingcorrespondtoanaddress,deposittheaddressofthenameinchipAT24C64intheformofstructurebody,importthetelephonenumbertostoringintheformofcharacter.Thesame,wheninquiringthetelephonenumber,inputnamesfromthekeyboard,makeuseofprocedureofinquiringtofindoutthenameneededinmemorychiptoutilize,afterconfirming,setasideouttelephonenumberfoundoutdirectly.
KeywordsOne-chipcomputerDecodePronunciationchip
electronictelephonedirectory
前言
尽管在现代社会,电子邮件、手机等的出现为人们提供了更多选择,但对于普通老百姓而言,通过固定电话进行交流仍然是其首要选择。
不仅是因为它具有固定恒久、绿色环保、价廉物美、话音清晰、拨打方便等特点,更由于客户信息齐全、安装地点确定的优点,使其常常被当作维系人与人之间情感的纽带。
现有固定电话没有中文电话簿,来电显示也没有中文显示,在现代信息时代,电话号码如此之多,人们只能将电话号码记录在笔记本或电子笔记本当中,使用查找起来十分不便。
如果在固定电话中增加有中文字库的存储器、中央处理器、供电电路和显示器,使固定电话上增加中文系统,使之成为能储存带有中文系统电话簿,并通过电话簿中文条目拨打的固定电话,将大大方便了人们的使用。
随着人们生活水平的迅速提高,健康、绿色、环保开始成为人们追求高品质生活的目标,而固定电话是无辐射的通信方式,必然会成为人们的首选。
随着电信业改革的不断深入,电信业的市场竞争已经全面展开。
而电信业传统的固网业务的市场竞争更是日益激烈,移动电话凭借其个性化、移动化等特点,越来越成为主流的通信方式,对固定电话形成了持续、快速、强有力的替代性冲击。
虽然固定电话在用户线上传送的是模拟信号,但局间通信却全部采用了数字方式,每对用户间的数据通信带宽为64kbit。
而第二代移动通信网,如GSM网、CDMA网,每个用户的带宽仅为9.6kbit,即使是2.5代移动通信方式的GPRS,一般也只提供20kbit~40kbit的带宽。
而且,固定电话网对于通信的稳定性、可靠性也有着绝对的保障。
因此,固定电话技术仍有着巨大的潜力可以挖掘,通过技术改造和终端升级,完全有可能实现移动通信中2.5G甚至是3G才可以实现的业务。
固定电话网络正在全面实施智能化改造,即我们家里的固定电话将迎来全新变革,由语音通话工具变成一个重要的信息终端。
移机不换号、发语音短信、彩话、预付费等种种满足现代人需求的精彩业务、个性化功能,都将在固定电话上实现。
同时,固定电话话音质量高、线路稳定、带宽充裕等优势将进一步发挥出来。
据专家预测,固定电话与移动电话、互联网的融合发展也已成为新的趋势。
譬如:
通过将移动可视电话与固定网络和因特网中可视电话的整合,让三者之间进行视频通话,开发视频留言等特色业务,会是融合迈出的一步。
消费者对固定电话具有中文电话簿的导入和管理需求也在逐步提高。
智能电话在中文输入、亲情语音拨收号、发送短信、视频业务、共享SIM信息和买卖转账等功能上为用户带来的方便度和实用性,为电信运营商的增值业务创造了平台,也为电信运营商实现ARPU值提供了技术实现手段。
该研究课题研究的主要是固定电话的中文电子话簿,主要目的是使固定电话具有电话簿输入、查找电话号码的功能。
输入和查询主要是通过软件实现,当按键输入时,通过输入程序把输入资料所对应的地址存入数据存储器AT24C64中,查询时,通过查询程序找出要查询的资料对应的地址,根据此地址找到语音库中对应的地址,然后读出此地址的内容.
第1章设计思路及原理
1.1研究意义
提高固定电话的性能对发展固话网具有极其重要的意义。
据某权威机构调查,国内目前有高达85%的消费者强烈希望将中文号码簿加入到固定电话机中,而反对者只有5%。
智能电话在中文输入、亲情语音拨收号、发送短信、视频业务、共享SIM信息和买卖转账等功能上为用户带来的方便度和实用性,为电信运营商的增值业务创造了平台,也为电信运营商实现ARPU值提供了技术实现手段。
本课题我们将用到KEILuVision2软件,uVision2IDE基于Windows的开发平台,包含一个高效的编辑器,一个项目管理器和一个MAKE工具。
uVision2支持所有的KeiLC51工具,包括C编译器,宏汇编器,连接/定位器,目标代码到HEX的转换器。
AT89S51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案.
就本例而言,我们的设计要求功能灵活,而且尽可能的留下扩展的空间,能使我们熟悉硬件描述编程C语言和相关的uVision2开发环境。
项目管理器:
工程(Project)是由源文件,开发工具选项及编程说明三部分组成的。
一个单一的uVision2工程能够产生一个或多个目标程序。
产生目标程序的源文件构成“组”。
开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。
1.2总体设计任务
该研究课题研究的主要是固定电话的中文电子话簿,主要目的是使固定电话具有电话簿输入,查找,添加和删除电话号码的功能。
设计一个基本的电话簿管理程序,具有加入、删除、显示、修改和查询联系人电话号码的功能。
程序采用链表数据结构实现,同时用类来实现数据的封装。
1.3设计思路及原理
本课题主要采用AT89S52单片机作为控制系统,通过软件编程对电子话簿进行存储查询操作,并把输入的电话本存到外部数据存储器上。
采取液晶显示方式,即将查询出的电话号码等显示在液晶显示屏上。
一种具有中文电话薄的固定电话,包括按键电路,中文电话簿系统,其特征在于:
所述的固定电话或其外线上设置有中文字库的存储器、中央处理器、供电电路和显示器;所述的中央处理器与固定电话电路连接,所述的有中文字库的存储器与中央处理器连接,所述的显示器与中央处理器连接,所述的供电电路分别与中央处理器和有中文字库的存储器连接。
1.3.1ETD工作原理框图
如图1.1所示是一个ETD电路的基本工作原理框图。
中央处理器
单片机AT89S52
按键电路
显示器
数据存储器
图1.1ETD的工作原理框图
1.3.2具体工作过程
首先应先建立电话本的存储形式、输入和查询系统.当要存储电话号码时,从键盘输入汉语拼音,选择确定后,把汉字对应的码值输入到电话本的地址数组中,直到姓名输入完毕,然后输入电话号码,最后将此单元的信息写进存储器芯片AT24C64的一个地址中。
进行查询时,同样从键盘输入汉语拼音,将码值与电话本中的地址数组进行比较,若要查询的姓名码值与电话本某一单元地址数组中的码值一致,则可把电话号码直接拨出去。
设计一个基本的电话簿管理程序,具有加入、删除、显示、修改和查询联系人电话号码的功能。
程序采用链表数据结构实现.:
存储的数据包括:
人名、手机电话号码。
具体功能:
①加入一个新电话号码;②删除一个电话号码;③修改功能;④查询功能;
⑤排序功能,按照姓名字母序排列。
⑥查询功能,按照人名查询。
第2章系统电路的设计及原理
2.1系统框图
根据要求,经过仔细分析,充分考虑各种因素,制定了下列设计方案:
系统流程图如图2.1所示:
图2.1系统的流程图
2.2各模块具体实现原理分析和说明
2.2.1单片机AT89S52的选择与简介
本系统采用主要采用单片机应用系统作为控制单元,单片机应用系统是是单片机硬件系统和应用软件相结合的产物。
采用单片机是因为其具有体积小、功耗低、运用灵活,且具有逻辑判断、定时计数、程序控制等多种功能,而且其价格便宜,选用单片机作为控制模块可大大降低产品的价格。
AT89S52是一种低功耗、高性能且系统内带有8KB可编程Flash存储器的8位CMOS微处理器。
此单片机采用Atmel公司的高集成、非易失性存储技术制造,并且与工业标准80C51指令设置与引脚兼容。
Flash集成片允许程序存储器系统内再编程或进行电擦除。
AT89S52把一个多功能的八位CPU与系统内可编程Flash结合集成到一个整体芯片上。
AT89S52是一种高性能且系统内带有可编程Flash存储器的八位微处理器。
它是一种高灵活性、花费有限资源就可产生许多嵌入式控制应用系统的高性能微处理器。
AT89S52提供了下列标准特点:
8KBFlash,256KBRAM,32条I/O端口线,定时监视器,
双数据指针,3个16位定时/计数器,一个二级中断方式,全双工串行口,振荡器和时钟电路。
此外,AT89S52支持两种软件选择性节省内耗模式。
休闲模式允许RAM,定时/计数器,串行口和中断系统继续工作时使CPU进入休眠方式。
降压模式节省RAM空间,但直到下一次中断来到或硬件复位才能使振荡器和其它集成电路正常工作。
AT89S52的主要功能如下:
·8位字长CPU;
·振荡器和时钟电路,全静态操作:
0—33MHZ;
·8KB系统内可编程Flash存储器;
·256KB内部RAM;
·4个I/O端口共32线;
·3个16位定时/计数器;
·全双工(UART)串行口通道;
·ISP端口;
·定时监视器(看门狗);
·双数据指针(DPTRE);
·20多个特殊功能寄存器;
·电源下降标志;
AT89S52管脚图如下:
2.2.2I2C总线介绍:
在本系统中采用I2C总线是为了减少数据线,因为I2C总线的信号线只有两条,可以节省单片机的接口。
I2C总线最主要的优点是其简单性和有效性。
由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
当然,在任何时间点上只能有一个主控。
总线的基本知识:
I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。
可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或
被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。
这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。
I2C总线在传送数据过程中共有三种类型信号,它们分别是:
开始信号、停止信号和应答信号。
开始信号:
SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
停止信号:
SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:
接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。
CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。
若未收到应答信号,由判断为受控单元出现故障。
1.在
总线上,开始和停止信号时序如下图所示:
图上可以看出,在SCL位高电平时SDA的变化将产生总线开始和停止信号。
SDA从高电平跳变到低电平表示开始,从低电平跳变到高电平表示停止。
下面根据时序图编写开始和停止子程序
开始程序:
调用方式:
voidI2CStart(void)
函数说明:
私有函数,I2C专用
---------------------------------------------------------------------------------*/
voidI2CStart(void)
{
EA=0;
SDA=1;
SCL=1;/*首先把SDA和SCL设置为高电平*/
SomeNOP();/*保持两个高电平一段时间*/
SDA=0;
SomeNOP();/*设置SDA为低电平后,保持SCL高电平,总线开始*/
SCL=0;
}
停止程序:
调用方式:
voidI2CStop(void)
函数说明:
私有函数,I2C专用
---------------------------------------------------------------------------------*/
voidI2CStop(void)
{
SCL=0;
SDA=0;
SomeNOP();/*两信号保持低电平*/
SCL=1;/*SCL设成高电平*/
SomeNOP();/
SDA=1;/*SDL为上升沿,SCL保持高电平时,总线结束*/
EA=1;
}
数据的建立和有效:
上图表示在传输数据时,SCL高电平的时候,SDA上的数据不能变化,因为前面已经说明,这是数据的变化将会认为是开始或者结束的信号。
在SCL低电平时数据可以改变。
I2C规程运用主/从双向通讯。
器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。
主器件和从器件都可以工作于接收和发送状态。
总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。
SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。
2.
的寻址过程
在
总线上的数据传输,除了开始和停止之外,由于可以多个从设备共用总线还会有一个寻址过程。
寻址过程通过主设备发送一定格式的寻址命令进行。
寻址命令由起个位的从设备地址、一位读写标志和一位响应信号组成。
七位的从设备地址可以由设计者任意设定,不过0000000是一个通用寻址地址。
当主设备需要向所有的从设备传输同样的信息的时候,可以使用通用寻址地址,这时,总线上的所有设备拉低SDA线,响应这个命令。
此后,主设备往总线上写的数据会被所有的相应这个寻址命令的从设备接收到。
但是,一个通用的都命令是没有意义的,因为有可能不同的从设备会向总线传送不同的数据(电平),从而引起总线冲突。
从设备地址11111xxx需要留给将来的应用。
有的从设备进一步规定了寻址的格式。
比如ATMEL公司24CXX系列的EEPROM就规定寻址的开始四位必须是1010。
这是根据相应器件的说明书设置相应的地址就行了。
读写控制位是1的时候执行读操作,是0的时候执行写操作。
往总线传输时最高位(MSB)最先送出,最后是读写指令,当相应器件被寻址的时候,它会拉低SDA线,作为回应。
如果没有器件被正确寻址,或者要寻址的器件忙,则SDA会保持高。
这是主设备就会知道寻址没有成功,可以发送一个停止命令,或者重新开始命令。
3.
的数据发送过程
寻址以后就是数据发送过程。
这时主设备负责产生时钟,发送开始和停止指令,接收设备需要接收到数据要发出回应。
时钟的第九个周期如果SDA被拉低,表示接收回应,如果还是保持高,则表示没有回应。
数据有八位,高位先传输。
2.2.3AT24C64芯片简单介绍
AT24C64是ATMEL公司生产的EEPROM。
它共有64K位,按照字节寻址。
下面是它的管脚图和管脚功能的列表。
A2A1A0是用来设置从设备地址的,这就意味着,可以有八个这样的器件共享一条总线。
外部不连接的地址位缺省为0。
下面是AT24C64芯片管脚图:
在本系统中,只用到一个AT24C64芯片,因此A2A1A0地址线直接接地,GND端接地,VCC端接高电平,SCL与SDA和单片机的P12、P13口相连。
1.器件寻址
当然器件寻址的操作一般不会单独进行,前面要有开始信号,后面将是读写操作。
操作EEPROM的时候先要寻址希望访问的器件。
寻址命令的结构和前面描述的是一样的不过,前四个字节必须是1010后面三个才是有效的器件地址。
如果器件被正确寻址会输出0作为响应,否则进入空闲状态。
下面是一个说明寻址命令结构的图:
2.读时序
上面的图说明了,从EEPROM中读一个字节的时序。
先是开始信号,然后是器件寻址操作,接着是两个字节要读的字节的地址。
这些发送完毕以后,主设备要重新发送开始信号,再进行器件寻址操作,随后就会读出指定地址的数据。
需要注意的是,在发送地址时的器件寻址操作,读写控制位置为写状态,在后一个器件寻址操作时,读写控制位置为读。
读出一个字节后如果不发送停止信号,可以继续读出下一个字节,依此类推,知道读到对后一个地址,又会从零地址开始读出数据。
AT24C64读程序
voidAT24c64_R(ucharData[],ucharAddress,ucharNum)
{
while(Num)
{
I2CStart();
I2CSendByte(0xa0);
WaitAck();
I2CSendByte(Address/256);
WaitAck();
I2CSendByte(Address%256);
WaitAck();
I2CStart();
I2CSendByte(0xa1);
WaitAck();
while((Address%256)<32)
{*(uchar*)Data=I2CReceiveByte();
SendAck();
Data++;
Address++;
Num--;
}
}
SendNoAck();
I2CStop();
}
3.写时序
下图是写操作的示意图.可以看出写操作比读简单一些。
发送开始信号后,只需要一次器件寻址,读写控制置为写状态,接着发送要写入数据的地址,然后就是要写入的数据。
如果只需要写入一个字节,传输完一个字节数据后发送停止信号就完成了一次写操作。
不过24C64具有按页写的功能,每页64个字节,所以写完一个字节后还可以最多写入63个字节的数据。
地址的高位保持不变。
低五位会自动加1。
如果总数超过了一页的地址,会把多写入的字节写入这一页的开头去。
下面是写程序
voidAT24c64_W(ucharData[],ucharAddress,ucharNum)
{
while(Num)
{
I2CStart();/*开始写信号*/
I2CSendByte(0xa0);
WaitAck();/*等待回应*/
I2CSendByte(Address/256);
WaitAck();
I2CSendByte(Address%256);
WaitAck();
while((Address%256)<32)
{I2CSendByte(*(uchar*)Data);
WaitAck();
Data++;
Address++;
Num--;
}
}
I2CStop();
}
第3章软件编程
3.1编程语言简介
3.1.1C51语言介绍
由于单片机应用系统的日趋复杂,要求所写的代码规范化、模块化,便于多人以软件工程的形式进行协同开发,汇编语言作为传统的单片机应用系统的编程语言,已经不能满足这样的实际需要了。
而C语言以其结构化和能产生高效代码满足了这样的需求。
随着80C51单片机硬件性能的提升,尤其是片内程序存储器容量的增大和时钟工作频率的提高,已基本克服了高级语言产生代码长、运行速度慢、不适合单片机使用的致命缺点。
由此C51已经得到广泛的推广和应用,成为80C51系列单片机的主流程序设计语言,甚至可以说是作为单片机开发人员必须要掌握的一门语言。
采用C51程序设计语言,编程者只需了解变量和常量的存储类型于80C51单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口。
C51编译器会自动完成变量的存储单元的分配。
C51语言基本词法介绍:
C51语言与标准C语言一样,共有6种单词:
·标识符(identifier)
·关键字(keyword)
·常量(constant)
·字符串(characterstring)
·运算符(operator)
·分隔符(punctuator)
为方便程序员自由书写语句,允许单词之间间隔任意距离(也可以换行、续行),C51语言
增加了空白符。
为了方便程序