版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录1、引言、引言 .12、摘要、摘要 .23、系统设计、系统设计 .23.1 小组分工.23.2 硬件设计.33.2.1SPCE061A 单片机实验环境.33.2.2 模组的内部设置的点阵图.53.2.3 Lcd 的电路.53.2.4 按键电路.63.2.5常用功能函数介绍.64、软件设计、软件设计 .84.1 各个程序文件的功能.84.2 主程序流程图:.94.3 时钟计数程序:.94.4 LCD 及中断程序.235、调试说明、调试说明 .246、总结及心得体会、总结及心得体会 .24参考文献:参考文献: .25西安建筑科技大学课程设计(论文)第 1 页 共 24 页1、引言单片机自 2
2、0 世纪 70 年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,
3、示波器,各种分析仪) 。用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水 线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。甚至可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。2、摘要电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。在城市的主要营业场所、车站、码头等公共场所使用 LCD 数字电子钟已经成
4、为一种时尚。但目前市场上各式各样的 LCD 数字电子钟大多数用全硬件电路实现,电路结构复杂,功率损耗大等缺点。因此有必要对数字电子钟进行改进。本设计基于单片机技术原理,以 SPCE061A 单片机作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个 LCD 多功能数字时钟系统。该时钟系统主要由时钟模块、计时模块、语音播报模块、液晶显示模块、西安建筑科技大学课程设计(论文)第 2 页 共 24 页键盘控制模块组成。系统具有简单清晰的操作界面,能够准确显示时间以及日期,并且实现同步播报功能,可随时进行时间调整。3、系统设计3.1 小组分工:本小组成员有赵红,王瑞、吴勃庆、王鹏。组长
5、为赵红,其中小组四人共同设计主框架、搭建硬件电路;王瑞和吴勃庆负责主程序的编写,赵红和王鹏负责 Lcd 子程序部分以及中断部分;所有组员分工明确,齐心协力共同完成本次课程设计。3.2 硬件设计3.2.1SPCE061A 单片机实验环境图 1、试验箱西安建筑科技大学课程设计(论文)第 3 页 共 24 页图 2 总体接线图 3 PLCD501 模组的硬件平面图这一模块可以使用 lcd 或者 led 数码管来实现。我组最后选择用 lcd 液晶显示来显示时间以及日期。之所以选择 lcd 来实现,是因为它具有很多优点。低压微功耗,平板型结构,被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳)而且 显示
6、信息量大(因为像素可以做得很小) 无电磁辐射(对人体安全,利于信息保密)。 具体的实现方法是利用 C 语言的编程(代码见程序 system.c) 。下面的硬件设计将详细的介绍 lcd 的模块的接口电路以及具体的接线方法。西安建筑科技大学课程设计(论文)第 4 页 共 24 页3.2.2 模组的内部设置的点阵图图 4 模组的内部设置的点阵图3.2.3 Lcd 的电路这部分的主要接线如下:IOA8-15 接液晶显示模块 DB0-DB7IOB4 接液晶显示模块 AOIOB5 接液晶显示模块的 R/WIOB6 接液晶显示模块的 EPDB0-DB7 为双向数据口,AO 为数据/使命控制位,R/w 为读/
7、写信号,EP 是全能端(低电平有效)图 5 Lcd 模块接口电路西安建筑科技大学课程设计(论文)第 5 页 共 24 页程序下载后会显示日期、时间。按 Key1 可以进入时间调整界面。3.2.4 按键电路按键电路直接与 IOA 口连接。其原理图如下:图 6 按键电路直接与 IOA 口连接3.2.5 常用功能函数介绍 液晶显示控制类: LCD501_Init 液晶初始化 LCD501_ClrScreen 清屏 LCD501_ReverseColor 显示翻转 LCD501_SetPaintMode 设置图形显示模式LCD501_GetPaintMode 获取当前显示模式 LCD501_FontS
8、et 设置文本字体 LCD501_FontGet 获取当前文本字体 LCD501_PutChar 显示单个字符LCD501_PutString 显示字符串LCD501_PutPixel 画点 LCD501_Line 画直线LCD501_Circle 画圆 LCD501_Rectangle 画矩形 LCD501_Bitmap 位图显示/汉字显示 西安建筑科技大学课程设计(论文)第 6 页 共 24 页SPCE061A 与 SPLC501 的接口采用 6800 并行接口电路,即 8 位数据总线、1 个读写选通端口、1 个数据指令选通端口、1 个信号使能端口,具体接法如下图:GNDIOB4IOB5I
9、OB6IOB8IOB9IOB10IOB11IOB12IOB13IOB14IOB15SPCE061ACS1A0R/WEPDB0DB1DB2DB3DB4DB5DB6DB7SPLC501图 7按键采用凌阳 61 板上提供的三个按键,接口电路如下:IOA0IOA1IOA2SPCE061AS1KEY1S2KEY2S3KEY3VCC图 84、软件设计软件部分由三个部分组成:主程序部分、2Hz 时基中断部分、1KHz 时基中断部分,主程序部分主要负责初始化 LCD 和显示界面,2Hz 时基中断部分负责时间的计数,1KHz 时基中断部分负责按键的扫描,西安建筑科技大学课程设计(论文)第 7 页 共 24 页4
10、.1 各个程序文件的功能1. main.c 实现了系统的初始化,显示开机画面,键盘扫描和语音播报。2. system.c 包含了工程中大部分的功能函数,包括各种界面的显示、时间和日期的调整、秒表的调整、闹钟的时间设定、闹钟的铃声选择等。3. key.c 键盘扫描文件,里面定义了键盘扫描函数、延时函数,用来实现对键盘的扫描等功能,键盘扫描采用查询方式。4. isr.asm 中断服务函数文件,实现语音解码、秒表和时间以及日期的修改。4.2 主程序流程图:开始结束初始化程序和LCD开2HZ时基中断,定时1秒,等到中断到来中断到来?进入中断处理程序调用函数显示时间等待下一次中断到来N NY Y 中断返
11、回中断入口中断到来,计数加1中断计数值为1计数到1秒,调用函数显示时间N NY Y 中断返回中断入口是否有按键按下是否按下KEY1执行KEY1按下程序是否按下KEY2是否按下KEY3执行KEY2按下程序执行KEY3按下程序N NN NN NY YY YY Y2Hz 时基中断1KHz 时基中断西安建筑科技大学课程设计(论文)第 8 页 共 24 页图 9 主程序流程图主程序(main.c)编写首先进行函数声明,定义文件中用到的变量以及常数数组,再编写真正的主体部分。首先进行键盘以及液晶显示的初始化。置 2hz 的中断,开 2hz 的中断。4.3 时钟计数程序:/main.c#include SP
12、LC501User.h#include Mychar.h#include SPCE061A.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;/秒 Clock;void Clock_Init();西安建筑科技大学课程设计(论文)第 9 页 共 24 页void Clock_Fi
13、x();void Disp_Time();const char clr= ;int main() long int m=100000;/add your code hereint dly;LCD501_Init(0 x00);*P_IOA_Dir &= 0 xfff8;*P_IOA_Attrib &= 0 xfff8;*P_IOA_Data &= 0 xfff8;LCD501_Bitmap(32,0,(unsigned int*)encoding_00);/课 LCD501_Bitmap(48,0,(unsigned int*)encoding_01);/程 LCD50
14、1_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);/接 LCD50
15、1_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*)encoding_0d);/时LC
16、D501_Bitmap(96,32,(unsigned int*)encoding_0e);/钟*P_Watchdog_Clear = 0 x0001 ;西安建筑科技大学课程设计(论文)第 10 页 共 24 页while(m-) *P_Watchdog_Clear = 0 x0001 ;Clock_Init();LCD501_PutString(0,0,clr);for(dly=0;dly100;dly+); LCD501_PutString(0,16,clr);for(dly=0;dly100;dly+);LCD501_PutString(0,32,clr);for(dly=0;dly10
17、0;dly+);LCD501_PutString(0,48,clr);for(dly=0;dly100;dly+);LCD501_Bitmap(0,0,(unsigned int*)encoding_15);/王 LCD501_Bitmap(16,0,(unsigned int*)encoding_16);/ LCD501_Bitmap(32,0,(unsigned int*)encoding_17);/瑞 LCD501_PutString(56,0,08064030);/08064030LCD501_Bitmap(32,16,(unsigned int*)encoding_18);/年LCD
18、501_Bitmap(64,16,(unsigned int*)encoding_19);/月LCD501_Bitmap(96,16,(unsigned int*)encoding_1a);/日*P_Watchdog_Clear = 0 x0001 ;LCD501_Bitmap(0,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,(unsi
19、gned int*)encoding_1e);/间LCD501_PutChar(46,32,:);*P_Watchdog_Clear = 0 x0001 ;LCD501_Bitmap(0,48,(unsigned int*)encoding_13);/星 LCD501_Bitmap(16,48,(unsigned int*)encoding_14);/期 西安建筑科技大学课程设计(论文)第 11 页 共 24 页LCD501_PutChar(32,48,:);LCD501_Bitmap(80,51,(unsigned int*)encoding_0f);/欢 LCD501_Bitmap(92,
20、51,(unsigned int*)encoding_10);/迎 LCD501_Bitmap(104,51,(unsigned int*)encoding_11);/使 LCD501_Bitmap(116,51,(unsigned int*)encoding_12);/用 *P_Watchdog_Clear = 0 x0001 ;LCD501_PutChar(72,32,:);LCD501_PutChar(96,32,:);LCD501_PutChar(120,32, );LCD501_PutChar(124,32, );Disp_Time();*P_INT_Ctrl = C_IRQ5_2H
21、z | C_IRQ4_1KHz;_asm(int irq);while(1)*P_Watchdog_Clear = 0 x0001;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 日进位,如果为西安建筑科技大学课程设计(论文)第 12 页 共 24 页1、3、5、7、8、10、12 月,则 32 日进位,如果为 2 月,29 日进 if(Clock.mo
22、nth = 4) sign = 1; if(Clock.month = 6) sign = 1; if(Clock.month = 9) sign = 1; if(Clock.month = 11) sign = 1;if(*P_INT_Ctrl & C_IRQ4_1KHz) != 0 x0000)*P_INT_Clear = C_IRQ4_1KHz;/清中断 if(Key_time%=50)/20Hz 判断按键是否按下 if(*P_IOA_Data & 0 x0007) != 0 x0000)/软件去抖动, for(time_dly=0;time_dly31)?0:Contr
23、;LCD501_SetContrast(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) Clock.day = 1; if(sign =
24、0) & (Clock.day = 32) 西安建筑科技大学课程设计(论文)第 14 页 共 24 页 Clock.day = 1; if(Set_mode = 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(Cloc
25、k.week7) Clock.week=1; if(*P_IOA_Data & 0 x0004) != 0 x0000)/如果按下 KEY3 西安建筑科技大学课程设计(论文)第 15 页 共 24 页if(Set_mode = 0) Contr-;Contr = (Contr31)?31:Contr;LCD501_SetContrast(Contr);if(Set_mode = 1)/如果为设置时间模式 Clock.year-;if(Set_mode = 2)Clock.month-;if(Clock.month=0) Clock.month=12; if(Set_mode = 3)C
26、lock.day-;if(Clock.month = 2) & (Clock.day = 0)/3 月 0 日 变成2 月 29 日 Clock.day = 28; if(sign = 1) & (Clock.day = 0)/4、6、9、11 月 0 日变成前一月的 31 日 Clock.day = 30;西安建筑科技大学课程设计(论文)第 16 页 共 24 页 if(sign = 0) & (Clock.day = 0)/1、3、5、7、8、10、12 月 0 日变成前一月的 31 日 Clock.day = 31; if(Set_mode = 4) Clock.
27、hour-; if(Clock.hour0) Clock.hour=23; if(Set_mode = 5) Clock.minute-; if(Clock.minute0) Clock.minute=59; if(Set_mode = 6) Clock.second-;西安建筑科技大学课程设计(论文)第 17 页 共 24 页 if(Clock.second0) Clock.second=59; if(Set_mode = 7)Clock.week-; if(Clock.week 0)/如果是设置时间模式Disp_Time();if(Count_time)if(Set_mode = 1)LC
28、D501_PutString(0,16, );/年跳动 if(Set_mode = 2)LCD501_PutString(48,16, );/月跳动 if(Set_mode = 3)LCD501_PutString(80,16, );/日跳动 if(Set_mode = 4)LCD501_PutString(56,32, );/时跳动 if(Set_mode = 5)LCD501_PutString(80,32, );/分跳动 if(Set_mode = 6)LCD501_PutString(104,32, );/秒跳动 if(Set_mode = 7)LCD501_PutString(40,
29、48, );/星期跳动 西安建筑科技大学课程设计(论文)第 19 页 共 24 页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;/如果为 4、6、9、11 月,则 31 日进位,如果为1、3、5、7、8、10、12 月,则 32 日进位,如果为 2
30、 月,29 日进 if(Clock.month = 4)flag = 1;if(Clock.month = 6)flag = 1;if(Clock.month = 9)flag = 1;if(Clock.month = 11)西安建筑科技大学课程设计(论文)第 20 页 共 24 页flag = 1;if(Clock.second = 60)/秒修正 Clock.minute+;Clock.second = 0;if(Clock.minute = 60)/分修正 Clock.hour+;Clock.minute = 0;if(Clock.hour = 24)/时修正 Clock.day+;Cl
31、ock.hour = 0;Clock.week+;/星期加一次 if(Clock.week=8) Clock.week=1;if(Clock.month = 2) & (Clock.day = 29)/2 月 29 日进位 Clock.month+;Clock.day = 1;if(flag = 1) & (Clock.day = 31)Clock.month+;Clock.day = 1;西安建筑科技大学课程设计(论文)第 21 页 共 24 页if(flag = 0) & (Clock.day = 32)Clock.month+;Clock.day = 1;if(C
32、lock.month = 13)/13 月进位 Clock.year+;Clock.month = 1;void Disp_Time()int temp;*P_Watchdog_Clear = 0 x0001 ;temp = Clock.year/1000;LCD501_PutChar(0,16,temp+0 x30);/年千位 temp = Clock.year/100;temp %= 10;LCD501_PutChar(8,16,temp+0 x30);/年百位 temp = Clock.year/10;temp %= 10;LCD501_PutChar(16,16,temp+0 x30)
33、;/年十位 temp = Clock.year%10;LCD501_PutChar(24,16,temp+0 x30);/年个位 temp = Clock.month/10;西安建筑科技大学课程设计(论文)第 22 页 共 24 页LCD501_PutChar(48,16,temp+0 x30);/月十位 temp = Clock.month%10;LCD501_PutChar(56,16,temp+0 x30);/月个位 temp = Clock.day/10;LCD501_PutChar(80,16,temp+0 x30);/日十位 temp = Clock.day%10;LCD501_P
34、utChar(88,16,temp+0 x30);/日个位 temp = Clock.hour/10;LCD501_PutChar(56,32,temp+0 x30);/时十位 temp = Clock.hour%10;LCD501_PutChar(64,32,temp+0 x30);/时个位 temp = Clock.minute/10;LCD501_PutChar(80,32,temp+0 x30);/分十位 temp = Clock.minute%10;LCD501_PutChar(88,32,temp+0 x30);/分个位 temp = Clock.second/10;LCD501_PutChar(104,32,temp+0 x30);/秒十位 temp = Clock.second%10;LCD501_PutChar(112,32,temp+0 x30);/秒个位 temp = Clock.week%7;LCD501_PutChar(40,48,temp+0 x31);/星期位 /更新显示结束 西安建筑科技大学课程设计(论文)第 23 页 共 24 页4.4 LCD 及中断程序LCD 及中断程序由王鹏和赵红负责完成5、调试说明程序开始运行后,会显示两个界面,第一个界面显示出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 舞蹈教师岗位面试要点详解
- 银行业务持续改进的审计策略与安排
- 通信行业技术成本控制经理的工作安排与执行
- 高铁乘务员招录面试常见问题与解答
- 京东游戏客服团队管理策略
- 兵装集团技术部年度工作总结报告
- 时尚杂志制作中项目管理规划案例
- 客户经理招聘与选拔方案
- 校车安全方针指南讲解
- 专业展会销售人员面试要点分析
- DB32∕T 5345-2026“厂中厂”安全生产管理规范
- 2026年内蒙古机电职业技术学院单招职业技能考试题库含答案详解(综合卷)
- 2025年江苏农林职业技术学院单招职业技能考试试题及答案解析
- 2026年临沂职业学院单招职业技能测试题库带答案详解(考试直接用)
- 2026年内蒙古电子信息职业技术学院单招综合素质考试题库附参考答案详解(综合题)
- 2025年江西公务员考试(财经管理)测试题及答案
- GB/T 2820.5-2025往复式内燃机驱动的交流发电机组第5部分:发电机组
- 《世界古代史》课程教学大纲
- 新苏教版五年级下册小学数学全册导学案(学前预习单)
- 道德与法治课件:《学会宽容》PPT课件(第2课时)
- 机器人技术等级考试三级课程3图形化编程二中国电子学会课件
评论
0/150
提交评论