ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:352.31KB ,
资源ID:19265734      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19265734.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于凌阳单片机的电子时钟设计Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于凌阳单片机的电子时钟设计Word格式文档下载.docx

1、系统具有简单清晰的操作界面,能够准确显示时间以及日期,并且实现同步播报功能,可随时进行时间调整。3、系统设计3.1小组分工:本小组成员有赵红,王瑞、吴勃庆、王鹏。组长为赵红,其中小组四人共同设计主框架、搭建硬件电路;王瑞和吴勃庆负责主程序的编写,赵红和王鹏负责Lcd子程序部分以及中断部分;所有组员分工明确,齐心协力共同完成本次课程设计。3.2 硬件设计3.2.1SPCE061A单片机实验环境图1、试验箱图2 总体接线图3 PLCD501模组的硬件平面图这一模块可以使用lcd或者led数码管来实现。我组最后选择用lcd液晶显示来显示时间以及日期。之所以选择lcd来实现,是因为它具有很多优点。低压

2、微功耗,平板型结构,被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳)而且 显示信息量大(因为像素可以做得很小) 无电磁辐射(对人体安全,利于信息保密)。 具体的实现方法是利用C语言的编程(代码见程序system.c)。下面的硬件设计将详细的介绍lcd的模块的接口电路以及具体的接线方法。3.2.2模组的内部设置的点阵图图4 模组的内部设置的点阵图3.2.3 Lcd的电路这部分的主要接线如下:IOA8-15接液晶显示模块DB0-DB7IOB4接液晶显示模块AOIOB5接液晶显示模块的R/WIOB6接液晶显示模块的EPDB0-DB7为双向数据口,AO为数据/使命控制位,R/w为读/写信号,EP是全

3、能端(低电平有效)图5 Lcd模块接口电路程序下载后会显示日期、时间。按Key1可以进入时间调整界面。3.2.4 按键电路按键电路直接与IOA口连接。其原理图如下:图6按键电路直接与IOA口连接3.2.5常用功能函数介绍 液晶显示控制类:LCD501_Init 液晶初始化 LCD501_ClrScreen 清屏 LCD501_ReverseColor 显示翻转 LCD501_SetPaintMode 设置图形显示模式LCD501_GetPaintMode 获取当前显示模式 LCD501_FontSet 设置文本字体 LCD501_FontGet 获取当前文本字体 LCD501_PutChar

4、显示单个字符LCD501_PutString 显示字符串LCD501_PutPixel 画点 LCD501_Line 画直线LCD501_Circle 画圆 LCD501_Rectangle 画矩形 LCD501_Bitmap 位图显示/汉字显示 SPCE061A与SPLC501的接口采用6800并行接口电路,即8位数据总线、1个读写选通端口、1个数据指令选通端口、1个信号使能端口,具体接法如下图:图7按键采用凌阳61板上提供的三个按键,接口电路如下:图84、软件设计 软件部分由三个部分组成:主程序部分、2Hz时基中断部分、1KHz时基中断部分,主程序部分主要负责初始化LCD和显示界面,2Hz

5、时基中断部分负责时间的计数,1KHz时基中断部分负责按键的扫描,4.1各个程序文件的功能 1. main.c 实现了系统的初始化,显示开机画面,键盘扫描和语音播报。 2. system.c 包含了工程中大部分的功能函数,包括各种界面的显示、时间和日期的调整、秒表的调整、闹钟的时间设定、闹钟的铃声选择等。 3. key.c 键盘扫描文件,里面定义了键盘扫描函数、延时函数,用来实现对键盘的扫描等功能,键盘扫描采用查询方式。 4. isr.asm 中断服务函数文件,实现语音解码、秒表和时间以及日期的修改。2Hz时基中断1KHz时基中断图9主程序流程图主程序(main.c)编写首先进行函数声明,定义文

6、件中用到的变量以及常数数组,再编写真正的主体部分。首先进行键盘以及液晶显示的初始化。置2hz的中断,开2hz的中断。/main.c#include SPLC501User.hMychar.hSPCE061A.hint Count_time = 0;int Key_time = 0;unsigned int Contr = 24;int Set_mode = 0;struct Time/定义时间结构体,存储现在的时间 int year;/年 int month;/月 int week;/周 int day;/日 int hour;/时 int minute;/分 int second;/秒 Cl

7、ock;void Clock_Init();void Clock_Fix();void Disp_Time();const char clr= ;int main() long int m=100000; /add your code here int dly; LCD501_Init(0x00); *P_IOA_Dir &= 0xfff8; *P_IOA_Attrib & *P_IOA_Data & LCD501_Bitmap(32,0,(unsigned int*)encoding_00);/课 LCD501_Bitmap(48,0,(unsigned int*)encoding_01);

8、/程 LCD501_Bitmap(64,0,(unsigned int*)encoding_02);/设 LCD501_Bitmap(80,0,(unsigned int*)encoding_03);/计 LCD501_Bitmap(24,16,(unsigned int*)encoding_04); LCD501_Bitmap(40,16,(unsigned int*)encoding_05);/算 LCD501_Bitmap(56,16,(unsigned int*)encoding_06);/机 LCD501_Bitmap(72,16,(unsigned int*)encoding_07

9、);/接 LCD501_Bitmap(88,16,(unsigned int*)encoding_08);/口 LCD501_Bitmap(16,32,(unsigned int*)encoding_09);/数 LCD501_Bitmap(32,32,(unsigned int*)encoding_0a);/字 LCD501_Bitmap(48,32,(unsigned int*)encoding_0b);/电 LCD501_Bitmap(64,32,(unsigned int*)encoding_0c);/子 LCD501_Bitmap(80,32,(unsigned int*)encod

10、ing_0d); LCD501_Bitmap(96,32,(unsigned int*)encoding_0e);/钟 *P_Watchdog_Clear = 0x0001 ; while(m-) Clock_Init(); LCD501_PutString(0,0,clr); for(dly=0;dly100;dly+); LCD501_PutString(0,16,clr); LCD501_PutString(0,32,clr); LCD501_PutString(0,48,clr); LCD501_Bitmap(0,0,(unsigned int*)encoding_15);/王 LCD

11、501_Bitmap(16,0,(unsigned int*)encoding_16);/ LCD501_Bitmap(32,0,(unsigned int*)encoding_17);/瑞 LCD501_PutString(56,0,08064030);/08064030 LCD501_Bitmap(32,16,(unsigned int*)encoding_18); LCD501_Bitmap(64,16,(unsigned int*)encoding_19); LCD501_Bitmap(96,16,(unsigned int*)encoding_1a); LCD501_Bitmap(0

12、,34,(unsigned int*)encoding_1b);/北 LCD501_Bitmap(12,34,(unsigned int*)encoding_1c);/京 LCD501_Bitmap(24,34,(unsigned int*)encoding_1d); LCD501_Bitmap(36,34,(unsigned int*)encoding_1e);/间 LCD501_PutChar(46,32,: LCD501_Bitmap(0,48,(unsigned int*)encoding_13);/星 LCD501_Bitmap(16,48,(unsigned int*)encodi

13、ng_14);/期 LCD501_PutChar(32,48, LCD501_Bitmap(80,51,(unsigned int*)encoding_0f);/欢 LCD501_Bitmap(92,51,(unsigned int*)encoding_10);/迎 LCD501_Bitmap(104,51,(unsigned int*)encoding_11);/使 LCD501_Bitmap(116,51,(unsigned int*)encoding_12);/用 LCD501_PutChar(72,32, LCD501_PutChar(96,32, LCD501_PutChar(120

14、,32, LCD501_PutChar(124,32, Disp_Time(); *P_INT_Ctrl = C_IRQ5_2Hz | C_IRQ4_1KHz; _asm(int irq while(1) *P_Watchdog_Clear = 0x0001; return 0;void IRQ4(void) _attribute_ (ISR);void IRQ5(void) _attribute_ (ISR);void IRQ4(void) int time_dly; int sign=0; sign = 0;/如果为4、6、9、11月,则31日进位,如果为1、3、5、7、8、10、12月,

15、则32日进位,如果为2月,29日进 if(Clock.month = 4) sign = 1; if(Clock.month = 6) if(Clock.month = 9) if(Clock.month = 11) if(*P_INT_Ctrl & C_IRQ4_1KHz) != 0x0000) *P_INT_Clear = C_IRQ4_1KHz;/清中断 if(Key_time%=50)/20Hz判断按键是否按下 if(*P_IOA_Data & 0x0007) != 0x0000)/软件去抖动, for(time_dly=0;time_dly31)?0:Contr; LCD501_Se

16、tContrast(Contr); /如果为设置时间模式 if(Set_mode = 1) Clock.year+; if(Set_mode = 2) Clock.month+; if(Clock.month=13)/13月进位 Clock.month = 1; if(Set_mode = 3) Clock.day+; if(Clock.month = 2) & (Clock.day = 29)/2月29日进位 Clock.day = 1; if(sign = 1) & (Clock.day = 31) if(sign = 0) & (Clock.day = 32) if(Set_mode =

17、 4) Clock.hour+; if(Clock.hour=24) Clock.hour=0; if(Set_mode = 5) Clock.minute+; if(Clock.minute=60) Clock.minute=0; if(Set_mode = 6) Clock.second+; if(Clock.second=60) Clock.second=0; if(Set_mode = 7) Clock.week+; if(Clock.week7) Clock.week=1; if(*P_IOA_Data & 0x0004) != 0x0000)/如果按下KEY3 Contr-;31:

18、 if(Set_mode = 1)/如果为设置时间模式 Clock.year-; if(Set_mode = 2) Clock.month-; if(Clock.month=0) Clock.month=12; if(Set_mode = 3) Clock.day-; (Clock.day = 0)/3月0日 变成2月29日 Clock.day = 28; (Clock.day = 0)/4、6、9、11月0日变成前一月的31日 Clock.day = 30; (Clock.day = 0)/1、3、5、7、8、10、12月0日变成前一月的31日 Clock.day = 31; if(Set_

19、mode = 4) Clock.hour-; if(Clock.hour0) Clock.hour=23; if(Set_mode = 5) Clock.minute-; if(Clock.minute Clock.minute=59; if(Set_mode = 6) Clock.second-; if(Clock.second Clock.second=59; if(Set_mode = 7) Clock.week-; if(Clock.week 0)/如果是设置时间模式 Disp_Time(); if(Count_time) LCD501_PutString(0,16,/年跳动 LCD5

20、01_PutString(48,16,/月跳动 LCD501_PutString(80,16,/日跳动 LCD501_PutString(56,32,/时跳动 LCD501_PutString(80,32,/分跳动 if(Set_mode = 6) LCD501_PutString(104,32,/秒跳动 if(Set_mode = 7) LCD501_PutString(40,48,/星期跳动 void Clock_Init() Clock.year = 2010; Clock.month = 12; Clock.day = 31; Clock.hour = 23; Clock.minute = 59; Clock.second = 45; Clock.week = 3;void Clock_Fix()/定义修正时间函数,如果时间产生溢出,则按时间计算规则进行处理 int flag; flag = 0; if(Cloc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1