单片机控制LCD语音时钟设计毕业设计.docx
- 文档编号:29588302
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:20
- 大小:211.89KB
单片机控制LCD语音时钟设计毕业设计.docx
《单片机控制LCD语音时钟设计毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机控制LCD语音时钟设计毕业设计.docx(20页珍藏版)》请在冰豆网上搜索。
单片机控制LCD语音时钟设计毕业设计
第一部分设计任务与调研…………………………………………………………
第二部分设计说明………………………………………………………………………
第三部分设计成果……………………………………………………
第四部分结束语…………………………………………………………………………
第五部分致谢…………………………………………………………………………
第六部分参考文献…………………………………………………………………
第一部分设计任务与调研
1主要任务
本设计以单片机为控制核心采用模块化设计共分以下几个功能模块单片机控制系统、实时时钟模块、环境温度检测模块、电压检测模块、人机接口模块、语音报警模块等。
2.设计的思路及方法
按照系统的设计功能要求,本时钟,铃声,温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟,温度的调整你,闹钟及显示。
获得时钟温度数据信息,单片机对其进行一系列的处理,最后通过液晶显示出来。
分析工艺与控制流程。
分析控制要求与方式,分析系统设计的原则和方法,确定输入输出设备和I/O点数及选机型,硬件系统设计,软件程序设计,绘制控制系统接线图,电器元件的选择,程序调试。
3.相关的资料
4.调研的目的和总结
是为了验证LCD语音时钟的功能及作品的展示,通过这些做的报告跟实验,充分的掌握了LCD语音时钟的性能特点,同是也发现了我在实验中的一些操作不足的地方,我会尽量避免这些缺点的
第二部分设计说明
1.理论分析
根据设计要求,语音电子钟要具备的功能:
1.可以语音播报日期和时间。
2.可以在SPLC501液晶模组上面显示时间、日期、农历、星期、闹钟。
3.整点报时功能。
4.具备闹钟功能。
5.闹钟的铃声可以选择。
6.具备秒表功能。
2.设计方案
通过对设计要求和设计原理的仔细分析,本次设计采用模块结构实现。
语音电子钟主要由系统初始化模块、输入按键信息模块、语音输入与A/D(模/数)转换模块、压缩编码模块和D/A(数/模)转换模块、SPLC501液晶模组组成。
实现单独播报年、月、日和时、分,实现定时功能,并且能够对它们分别进行调整。
设计复位键对设定值进行清零操作。
组成电路板各模块应具有如下功能:
1.系统初始化模块:
输入一些变量与子小模块,进行赋初值等处理,输出变量和模块的初始状态。
2.输入按键信息模块:
输入键值,等待系统中断并进行相应的中断处理,输出为调用相应的键处理程序。
3.语音输入与A/D(模/数)转换模块:
输入语音信号,进行A/D(模/数)转换,输出语音的数字信号。
4.压缩编码模块:
输入语音的数字信号,经过语音压缩函数的处理,输出语音的压缩编码。
5.D/A(数/模)转换模块:
输入语音的数字信号,进行D/A(数/模)转换输出语音的模拟信号。
6.SPLC501液晶显示器:
显示当前的时间、日期、农历、星期、闹钟。
3.硬件设计
语音电子钟的系统结构如图2-1,61板作为整个系统的控制中心,负责控制键盘扫描;年、月、日、星期以及时间的计算;SPLC501A液晶显示的驱动;并根据按键值播报当前的日期或者时间。
SPLC501A液晶显示模组主要用来显示当前的时间,日期,以及显示功能选择菜单和时间日期调整菜单。
图2-1语音电子钟的系统结构图
硬件功能模块连接:
用61板控制语音电子钟系统,使用IOA口的高八位、IOB的4、5、6共11个I/O口连接SPLC501A液晶模组,另外使用了61板的语音输出模块;以及61板上的三个按键。
硬件连接如图2-2所示:
图2-2语音电子钟的电路连接图
语音电子钟的连接示意图见图2-2,IOA的高八位接到液晶模组的八个数据端,同时也连接了液晶模组的电源,即直接用一根10pin的排线连接61板“+”、IOA8-15、“-”与SPLC501A液晶显示模组的“+”、DB0-7、“-”,主要用来向液晶模组传送命令和数据;IOB6接EP,IOB5接R/W,IOB4接AO,用来控制液晶的显示和工作方式。
4.按键的功能描述
语音电子钟的各个按键功能如图2-3所示,按KEY1键:
进入功能选择界面。
按KEY2键:
播报当前的时间。
按KEY3键:
播报当前的日期。
KEY2、KEY3键同时按下:
控制闹钟的开与关。
在时间显示界面上按KEY1键会进入功能选择菜单,功能菜单界面上有4个选项。
分别是时间日期调整、闹钟设置、秒表功能、返回。
功能选择菜单界面里KEY1为确定键,KEY2为下翻键,KEY3为上翻键。
可以随意选择所要实现的操作。
时间日期调整界面里KEY1为确定键,KEY2为加一键,KEY3为减一键,SPLC501液晶显示器上闪烁的部分表示当前正在调整的选项,当设置完成后,按KEY1会自动退出设置界面。
闹钟设置界面里KEY1为确定键,KEY2为下翻键,KEY3为上翻键。
闹钟设置界面里有闹钟时间设置和闹钟铃声选择两个选项。
闹钟时间设置界面KEY1为确定键,KEY2为加一键,KEY3为减一键,SPLC501液晶显示器上闪烁的部分表示当前正在调整的选项,当设置完成后,按KEY1会自动退出设置界面。
.闹钟铃声设置界面里KEY1为确定键,KEY2为选择键,KEY3为播放当前选择的铃声键。
当闹钟响时,按下三个键中的任何一个都可以关闭闹钟。
秒表功能界面里KEY1为退出键,KEY2为开始/暂停键,KEY3为清零键,只
有当秒表停止运行时KEY3才有效。
返回功能里KEY1为确认键,按下后,系统会回到显示界面。
图2-3语音电子钟的按键功能结构图
硬件设计按照SPCE061A、程序下载区、音频输出、语音输入、数模转换、电源分模块设计。
利用Protel99来绘制各个部分的电路原理图。
4.软件设计
主程序流程如图3-1所示,在主程序中初始化了整个工程中用到的变量,初始化了液晶显示模块。
开2Hz中断实现计时。
在主程序中调用了键盘扫描程序,对IOA口的低三位进行扫描,如果有键按下,就把相应的键值存入到一个变量中,通过主程序来判断是哪个键按下,并执行相应的功能:
若是KEY1键按下,则会进入功能选择菜单,此时KEY1就会为确定键,KEY2为下翻键,KEY3为上翻键;若是KEY2键按下,播报时间;若是KEY3键按下,播报当前的日期;KEY2、KEY3键同时按下控制闹钟的开/关。
图3-1主程序流程图
时间日期程序模块的流程图如图3-2所示,该模块用到了2Hz的时基中断,用来实现计时,同时实现了日期的更新,其中农历是使用查表的方法来实现的。
图3-2时间日期模块流程图
●5.作品特点:
一、种类多,型号全
很多单片机厂家逐年扩大适应各种需要,有针对性地推出一系列型号产品,使系统开发工程师有很大的选择余地。
大部分产品有较好的兼容性,保证了已开发产品能顺利移植,较容易地使产品进行升级换代。
●二、提高性能,扩大容量,性能价格比高
集成度已经达到300万个晶体管以上,总线速度达到数十微妙到几百纳秒,指令执行周期已经达到几微妙到数十纳秒,以往片外XRAM现已在物理上存入片内,ROM容量已经扩充达32K,64K,128K以致更大的空间。
价格从几百到几元不等。
●三、增加控制功能,向真正意义上的“单片”机发展
把原本是外围接口芯片的功能集成到一块芯片内,在一片芯片中构造了一个完整的功能强大的微处理应用系统。
●四、低功耗
现在新型单片机的功耗越来越小,供电电压从5V降低到了3.2V,甚至1V,工作电流从mA降到µA级,gz2频率从十几兆可编程到几十千赫兹。
特别是很多单片机都设置了多种工作方式,这些工作方式包括等待、暂停、睡眠、空闲、节电等。
第三部分设计成果
1.作品展示
LCD语音时钟
2.技术指标:
1。
分辨率:
LCD的分辨率与CRT显示器不同,一般不能任意调整,它是制造商所设置和规定的。
分辨率是指屏幕上每行有多少像素点、每列有多少像素点,一般用矩阵行列式来表示,其中每个像素点都能被计算机单独访问。
2。
刷新率:
LCD刷新频率是指显示帧频,亦即每个像素为该频率所刷新的时间,与屏幕扫描速度及避免屏幕闪烁的能力相关。
也就是说刷新频率过低,可能出现屏幕图像闪烁或抖动。
3。
响应时间:
响应时间愈小愈好,它反应了液晶显示器各象素点对输入信号反应的速度,即pixel由暗转亮或由亮转暗的速度。
响应时间越小则使用者在看运动画面时不会出现尾影拖拽的感觉。
一般会将反应速率分为两个部份:
Rising和Falling;而表示时以两者之和为准。
4。
可视角度一般而言,LCD的可视角度都是左右对称的,但上下可就不一定了。
而且,常常是上下角度小于左右角度。
当然了,可视角是愈大愈好。
然而,大家必须要了解的是可视角的定义。
当我们说可视角是左右80度时,表示站在始于屏幕法线80度的位置时仍可清晰看见屏幕图像,但每个人的视力不同;因此我们以对比度为准。
在最大可视角时所量到的对比度愈大愈好。
5。
对比度
对比度是指图像最亮的白色区域与次暗的黑色区域之间的比值。
在CRT显示器中,对比度对其信能的影响并不引起人们的重视。
而在液晶显示器中,对比度却是衡量其好坏的主要参数之一。
3.程序代码:
//工程名称:
clock.spj
//功能描述:
具备播报日期、时间、整点报时、秒表、闹钟、万年历、农历和电子钟等功能。
//IDE环境:
SUNPLUSu'nSPTMIDE2.0.0
//涉及的库:
CMacro1016.lib
//sacmv26e.lib
//组成文件:
main.c/system./Key.c/speak.c/IRQ.asm/miaobiao/asm
//硬件连接:
//IOA8-15接液晶显示模块DB0-DB7
//IOB4接液晶显示模块AO
//IOB5接液晶显示模块的R/W
//IOB6接液晶显示模块的EP
//======================================================================
//文件名称:
main.c
//功能描述:
系统初始化,显示时间日期界面
//按KEY1,进入时间调整和功能选择菜单。
//按KEY2,拨报当前的时间。
//按KEY3,拨报当前的日期。
//KEY2、KEY3同时按下控制闹钟的开关
//======================================================================
#include"SPCE061A.h"
#include"SPLC501User.h"
#include"model.h"
#definering117//播放第一个铃声的序号
#definering218//播放第二个铃声的序号
//======================================================================
//对主函数调用的函数声明
//======================================================================
externvoiddisplay();
externvoidPlayRespond(unsignedintResult);
externvoidspeaktime();
externvoidkeyscan();
externvoidnextdisplay();
externvoidsetday();
externvoidset_ring();
externvoidsetsecond();
externvoidspeaktime();
externvoidspeakday();
externvoidkeyinitial();
//=======================================================================
//定义文件中用到的变量以及常数数组
//=======================================================================
unsignedintkeyflag1=0;//键按下标志1,控制进入功能选择菜单
unsignedintkeyflag2=0;//键按下标志2,
unsignedintkeyflag3=0;//键按下标志3,控制进入时间日期调整界面
unsignedintkeyflag4=0;//键按下标志4,控制进入闹钟时间设置界面
unsignedintkeyflag5=0;//键按下标志5,控制进入秒表设置界面
unsignedintkeyflag6=0;//键按下标志6,控制进入闹钟设置界面
unsignedintkeyflag7=0;//键按下标志7,控制进入闹钟铃声选择界面
unsignedintringflag=0;//播放铃声标志位1播放第一首2播放第二首
unsignedintkeyvalue=0;//存放按下的键值
unsignedintrunflag=0;//当年闰月标志位
unsignedintnum=0;//2HZ计数单元
unsignedinthour=0;//存放当前的小时
unsignedintmin=0;//存放当前的分钟
unsignedintsec=0;//存放当前的秒
unsignedintyear=2006;//存放当前的年
unsignedintgmonth=8;//存放当前的公历的月
unsignedintgday=1;//存放当前的公历的日
unsignedintxqvalue=0;//存放当前的星期
unsignedintnmonth=7;//存放农历的月
unsignedintnday=8;//存放农历的日
unsignedintrunxq[]={3,6,0,3,5,1,3,6,2,4,0,2};//润年星期偏差表
unsignedintpingxq[]={4,0,0,3,5,1,3,6,2,4,0,2};//平年星期偏差表
unsignedintmouse[]={1,17,32,48};//箭头坐标数组
unsignedintnhour=12;//存放闹钟的小时
unsignedintnmin=0;//存放闹钟的分钟
unsignedintmbmin=0;//存放秒表的分
unsignedintmbsec=0;//存放秒表的秒
unsignedintmmsec=0;//存放秒表的毫秒
unsignedintmbnum=0;//1KHZ中断标志位
unsignedintonoff=0;//闹钟开关标志
unsignedintint2hz;//设置一个2HZ中断标志
unsignedintringonoff;//闹钟响时关闭标志
charnumber[]={'0','1','2','3','4','5','6','7','8','9'};//设置待显示的数字。
unsignedintclockset[]={11,31,51};//设置闹钟铃声时的光标
unsignedintcounter=0;//设置显示SUNPLUS计数器
unsignedintmapcounter1=0;
unsignedintmapcounter2=0;
constintglunarmonthday[]=//存放2001-2100的阴历月天数表b15-b14表征1-12月的天数特征
{//为1则当月为30天,为0则为29天。
低四位为当年闰月的月份
0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,0xa950,
0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,0x7954,
0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530,0x5aa0,
0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,0xb5a0,
0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,0x4b63,
0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,0x92e0,
0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5dd5,0x56a0,0xa6d0,0x55d4,0x52d0,
0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,0xb273,
0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,0xe968,
0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252,0xd520
};
constunsignedint*BMP_Cartoon[]=//动画帧数据链表(sunplus标志)
{(unsignedint*)encoding_00,(unsignedint*)encoding_01,(unsignedint*)encoding_02,
(unsignedint*)encoding_03,(unsignedint*)encoding_04,(unsignedint*)encoding_05,
(unsignedint*)encoding_06,(unsignedint*)encoding_07,(unsignedint*)encoding_08,
(unsignedint*)encoding_sunplus,
(unsignedint*)encoding_08,(unsignedint*)encoding_07,(unsignedint*)encoding_06,
(unsignedint*)encoding_05,(unsignedint*)encoding_04,(unsignedint*)encoding_03,
(unsignedint*)encoding_02,(unsignedint*)encoding_01,(unsignedint*)encoding_00,
(unsignedint*)encoding_sunplus,
(unsignedint*)encoding_00,(unsignedint*)encoding_01,(unsignedint*)encoding_02,
(unsignedint*)encoding_03,(unsignedint*)encoding_04,(unsignedint*)encoding_05,
(unsignedint*)encoding_06,(unsignedint*)encoding_07,(unsignedint*)encoding_08,
(unsignedint*)encoding_sunplus,
(unsignedint*)encoding_08,(unsignedint*)encoding_07,(unsignedint*)encoding_06,
(unsignedint*)encoding_05,(unsignedint*)encoding_04,(unsignedint*)encoding_03,
(unsignedint*)encoding_02,(unsignedint*)encoding_01,(unsignedint*)encoding_00,
(unsignedint*)encoding_sunplus
};
//=======================================================================//语法格式:
intmain(void)
//实现功能:
键盘控制语音播报日期时间及功能选择
//参数:
无
//返回值:
无
//=======================================================================
intmain(void)
{keyinitial();//键盘初始化
LCD501_Init(0);//液晶显示初始化
LCD501_Circle(64,32,15,1);
LCD501_ClrScreen(0);
LCD501_FontSet(0);
*P_INT_Ctrl_New=*P_INT_Ctrl_New|0x0004;//置2HZ中断标志
__asm("INTIRQ");//开放2HZ中断
while
(1)
{inti=0;//定义一个循环变量,用来对数组寻址.
display();//用显示日期时间界面
while(hour==nhour&&min==nmin&&onoff==0)//当闹钟开时,判断闹钟时间是否到了
{keyscan();//当闹钟响时如果有任何键按下,则关闭闹钟。
if(keyvalue!
=0)
onoff=1;
elseif(ringflag==0)
PlayRespond(ring1);//播放乐曲1
else
PlayRespond(ring2);}//播放乐曲2if(min==0&&sec==0)//正点报时功能
{speaktime();}
keyscan();//键盘扫描
*P_Watchdog_Clear=0x0001;
if(keyvalue==0x0001)//如果KEY1键按下
{keyflag1=1;//置位键按下标志
LCD501_ClrScreen(0);//调用清屏函数;
while(keyflag1==1)
{nextdisplay();//显示调整界面
LCD501_Bitmap(15,mouse[i],(unsignedint*)encoding_mouse);
//显示鼠标位置
keyscan();
*P_Watchdog_Clear=0x0001;
switch(keyvalue)
{case0x0001:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 LCD 语音 时钟 设计 毕业设计