基于凌阳单片机的电子时钟设计_第1页
基于凌阳单片机的电子时钟设计_第2页
基于凌阳单片机的电子时钟设计_第3页
基于凌阳单片机的电子时钟设计_第4页
基于凌阳单片机的电子时钟设计_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——基于凌阳单片机的电子时钟设计目录

一摘要2二引言4三系统设计53.1方案论证5

3.1.1Lcd显示模块53.1.2语音模块(A/D)63.1.4Led模块63.1.5触键唤醒模块6

3.2硬件设计7

3.2.1Lcd的电路83.2.2Led电路93.2.3按键电路103.2.4语音电路(A/D)113.2.5电源电路12

3.3软件设计及流程图(主要是主程序及LED部分)...12

3.3.1系统主体(main.c)123.3.2Led程序:183.3.4lcd26

四总结及心得体会293.1.2语音模块(A/D)

凌阳单片机本身具备语音识别功能,不需要外扩语音识别模块,虽然具有一点点DSP

功能,就能做到语音识别功能。凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240主要是用来放音,可用于语音提醒,而DVR则用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识。凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。本小组使用的是SACM_S480模块。利用C语言对其进行编程(代码为speak.c)。

本模块是本设计的关键环节,由于电子时钟的功能就是正确的显示时间。具体的计时实现是利用SPCE061A自带的定时器以及计数器功能。通过C语言编程,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒进一,满六十分进一,满二十四小时清零,从而达到计时的功能。

3.1.4Led模块

由于Lcd,led对IO口的占用,使得本小组的Led设计不得不使得其与其他的模块分开执行。同时由于不可能再去利用Led再去设计一个系统所以只实现了简单的功能(简单的计数)。

3.1.5触键唤醒模块

触键唤醒中断源主要是在系统进入睡眠状态后,通过A口低八位的按键来唤醒系统的时钟,同时进入触键唤醒中断,恢复睡眠时的PC指针。在进行程序编写的时候,要注意只有当IOA7~IOA0内的控制字为000、001、010时,相应位才有唤醒功能。

第6页共31页

3.2硬件设计

试验箱

第7页共31页

总体接线

3.2.1Lcd的电路

这部分的主要接线如下:

IOA8-15接液晶显示模块DB0-DB7IOB4接液晶显示模块AOIOB5接液晶显示模块的R/WIOB6接液晶显示模块的EP

DB0-DB7为双向数据口,AO为数据/使命控制位,R/w为读/写信号,EP是全能端(低电平有效)

要这部分工作时Key接线与IOA低八位相连就可以了。

第8页共31页

Lcd模块接口电路

程序下载后会显示日期、时间。按Key1可以进入时间调整界面。

3.2.2Led电路

连线:IOA口低8位连接a~gIOB2~IOB5连接数码管片选段

第9页共31页

6位led数码管引脚图

硬件连接

3.2.3按键电路

按键电路简单,易于控制;按键控制接口部分由9个按键组成:

调整时间/闹钟键、时钟开/关键、小时按键、分钟按键、加记数键、减记数键、确定键、切换温度/频率和电压键、接触式止闹键按键功能说明:

1、调整时间/闹钟键:按一次:开始设置时间;按两次:开始设置闹钟;依次循环。2、小时按键:

调整时间/闹钟状态下,此键开始有效。按一次表示开始设置相应的小时;3、分钟按键:

调整时间/闹钟状态下,此键开始有效。按一次表示开始设置相应的分钟;4、加、减计数键在时间调整时,按一下,分钟或小时数加减一5、确定键调整完后按此键确认6、切换温度/频率和电压键,切换屏幕

第10页共31页

keyscan();

*P_Watchdog_Clear=0x0001;switch(keyvalue)

{case0x0001:

{switch(i)

case0:{setday();}break;

case1:{

LCD501_ClrScreen(0);keyflag1=0;}break;}

}

break;

case0x0002:

LCD501_Bitmap(15,mouse[i],(unsignedif(i==3)i=0;else

i=++i;第16页共31页

{{int*)encoding_empty);

LCD501_Bitmap(15,mouse[i],(unsignedint*)encoding_mouse);

}

break;case0x0004:

{

LCD501_Bitmap(15,mouse[i],(unsignedint*)encoding_empty);if(i==0)i=3;else

i=--i;

LCD501_Bitmap(15,mouse[i],(unsignedint*)encoding_mouse);

}

break;}

}}

elseif(keyvalue==0x0002)

{peaktime();}

elseif(keyvalue==0x0004)/

speakday();}

else

*P_Watchdog_Clear=0x0001;

}

第17页共31页

{

}

3.3.2Led程序:流程图

开始系统初始化、I/O设置显示全0循环显示0~9

前面提及了一下,由于IO口的限制所以Led这部分我们拿出来,单独的编写了一段小程序。

其原理为首先对I/O口初始化,显示全零,然后1秒后从第一位数码管开始从0~9刷新,直到最终的一个数码管。中断分别使用了IRQ4和IRQ5-2hz。

首先定义了变量g_uiFirst,g_uiFlag,分别控制1s延时以及控制数码管。定义g_Data[11],g_uiSeg分别表示数据和指针。

unsignedintg_uiFirst=0x0000;unsignedintg_uiFlag;unsignedintg_Data[11]=

{0x0000,0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};

第18页共31页

unsignedintg_uiSeg;

进入主函数,先开2hz的中断,然后显示初始化并且开IRQ4hz的中断,然后编写一个循环,设置数码管全为零,并且刷新六位的数码管,清看门狗。

源程序:intmain(void)

{

unsignedintDis1[6]={0x003f,0x003f,0x003f,0x003f,0x003f,0x003f};unsignedintuiIntStatus;

uiIntStatus=*P_INT_Ctrl_New;uiIntStatus|=C_IRQ5_2Hz;*P_INT_Ctrl=uiIntStatus;g_uiFlag=0x0000;g_uiSeg=0;DIG_Init();

while(1)

{if(g_uiFlag==0x0000){DIG_SetAll(Dis1);

if(g_uiFlag!=0x0000)

}

}

{DIG_Set(g_uiFlag,g_Data[g_uiSeg]);}

*P_Watchdog_Clear=0x0001;}

第19页共31页

3.3.3语音播报及AD

语音播报:

#include\

#include\//以下是注解:#defineC_T000voice中的文件0#defineC_T011#defineC_T022#defineC_T033#defineC_T044#defineC_T055#defineC_T066#defineC_T077#defineC_T088#defineC_T099#defineC_T1010#defineC_DIAN11C_MIN12#defineC_YEAR13#defineC_MONTH14#defineC_DAY15#defineC_BELL16externunsignedintyear;//报分钟第20页共31页

voice中的文件1voice中的文件2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论