1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。河海大学计算机及信息工程学院( 常州) 课程设计报告 题 目 嵌入式系统项目设计 专业、 学号 电信 授课班号 学生姓名 指导教师 完成时间 /1/15 课程设计( 报告) 任务书( 理 工 科 类) 、 课程设计( 报告) 题目: 基于LCD的电子时钟实验 、 课程设计( 论文) 工作内容一、 课程设计目标 1、 培养综合运用知识和独立开展实践创新的能力; 2、 培养学生的编程能力、 用计算机解决实际问题的能力。二、 研究方法及手段应用1、 将任务分成若干模块, 查阅相关论文资料, 分模块调试和完成任务; 2、 使用ads1.2编译汇
2、编语言和C语言, 连接生成Hex文件。3、 联合protues 7.4 仿真,选用arm7 lpc2104 芯片, 导入Hex文件, 实现模拟电 子时钟。三、 课程设计预期效果1、 完成实验环境搭建; 2、 分模块调试和编译;3、 组合并完善程序。4、 联合仿真软件运行程序。学生姓名: 专业年级: 目 录前 言 3第一章 系统设计 4第一节 课题目标及总体方案.4 第二节 元器件的选择和连线.4 第三节 程序和芯片的初始化.5 第四节 构建功能模块.6 第五节 实现信息的传递.7 第二章 实验( 测试) 结果及讨论.8 第一节 ads1.2 软件的编译, 连接和运行.8 第二节 protues
3、 7.4仿真软件的联合调试.9第三章 结论10心得体会11参考文献 12附 录 13 源程序13 前 言近年来, 随着计算机技术及集成电路技术的发展, 嵌入式技术日渐普及, 在通讯、 网络、 工控、 医疗、 电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。 实时时钟( RTC) 器件是一种能提供日历/时钟、 数据存储等功能的专用集成电路, 常见作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、 耗电低和体积小等特点, 特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息, 特别是在通信工程、 电力自动化、 工业控制等自动化程度
4、较高领域的无人职守环境。随着集成电路技术的不断发展, RTC器件的新品也不断推出。这些新品不但具有准确的RTC, 还有大容量的存储器、 温度传感器和A/D数据采集通道等, 已成为集RTC、 数据采集和存储于一体的综合功能器件, 特别适用于以微控制器为核心的嵌入式系统。第一章 系统设计第一节 课题目标及总体方案 利用lpc 2104芯片和LCD显示器, 经过汇编和C语言编译, 完成实时时钟的显示。第二节 元器件的选择和连线 选用嵌入式arm 7系列的lpc 2104芯片和Lcd pg160128a显示器: 根据使用的需要配置端口连线: 第三节 程序和芯片的初始化 程序中包括: Lcd的初始化:
5、中断向量的初始化: RTC的初始化: 芯片Lpc2104 基础配置: 中间使用了上接正电源配合电容的交流特性, 为芯片提供电源和复位功能。其它引脚根据芯片要求配置连接。 第四节 构建功能模块Lcd显示的时钟界面包括: 静止不动的圆形钟面和一直在走动的时钟指针。因此需要构建两个重要的函数实现画圆和画直线。以下为画圆函数: 该算法是经过X变量的自增, 补偿1 修正正方形控制Y变量自减, 找到距中心恒定距离的点, 其中rs=45, X自0加1增至45。和原点坐标运算, 能够在第一象限找到一点, 再经过折叠对称找到其它象限的三个点, 经过画点函数描绘出。再画她的45度镜像就好了。画线函数: void
6、line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned char draw)以中心的坐标为起点, 使用while函数与指针最外圈的点比较, 不断延长直至相等, 因此事先计算出时针, 分针和秒针三个同心圆最外圈点的坐标, 以便带入函数。也同圆类似, 要考虑不同象限点的情况, 根据不同的位置带参数到画点函数中描绘。 第五节 实现信息的传递画点函数: 数据传递函数: 与通用可编程输入输出口( General Programable Input Output) 相连, 把计算的数据传递给Lcd显示。第二
7、章 实验( 测试) 结果及讨论第一节 ads1.2 软件的编译, 连接和运行 构建完整的程序: 添加头文件, 中断处理汇编程序段, 初始化函数和主函数: 编译所有的文件: 编译器提示: 成功生成所需Hex文件, 将得到的Hex文件导入仿真芯片Lpc 2104中, 观察实时时钟。第二节 protues 7.4仿真软件的联合调试 为Lpc 2104 芯片选择Hex文件路径: 连接芯片与LCD端口, 运行程序, 观察效果。显示如下时钟界面: 动态显示当前的时间, 包括: 年、 月、 日、 时、 分、 秒, 时针、 分针和秒针为动态实时指示当前的时间。第三章 结 论综合效果图: 以上为protues部
8、分设计的, ads程序见附录。心得体会 回顾起此次课程设计, 至今我仍感慨颇多, 从理论到实践, 在整整半个月的日子里, 我学到很多很多的东西, 不但巩固了以前所学过的知识, 而且学到了很多在书本上所没有学到过的内容。经过这次课程设计使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的, 只有把所学的理论知识与实践相结合起来, 从理论中得出结论, 才是真正的知识, 才能提高自己的实际动手能力和独立思考的能力。在设计的过程遇到了各种各样的问题, 同时在设计的过程中发现了自己的不足之处, 对以前所学过的知识理解得不够深刻, 掌握得不够牢固, 经过这次课程设计, 把以前所学过的知识重新温
9、故, 巩固了所学的知识。参考文献1 谢自美, 电子线路设计、 实验、 测试, 华中理工大学出版社, 。2 宋春荣, 通用集成电路速查手册, 山东科学技术出版社, 1995。3 Arnold Berger, 嵌入式系统设计, 吕骏 译, 北京: 电子工业出版社, 4 桑楠. 嵌入式系统原理及应用开发技术, 北京: 北京航空航天大学出版社, 附 录一、 源程序: void c_init()wr_circle(123,79,1,1);wr_circle(123,79,2,1);wr_circle(63,139,1,1);wr_circle(63,139,2,1);wr_circle(3,79,1,1
10、);wr_circle(3,79,2,1);wr_circle(63,19,1,1);wr_circle(63,19,2,1);wr_circle(115,109,1,1);wr_circle(93,131,1,1);wr_circle(33,131,1,1);wr_circle(11,109,1,1);wr_circle(11,49,1,1);wr_circle(33,27,1,1);wr_circle(93,27,1,1);wr_circle(115,49,1,1);wr_point(c_ox,c_oy,1);wr_circle(c_ox,c_oy,2,1);wr_circle(c_ox,
11、c_oy,62,1);void move(unsigned char n)line(c_ox,c_oy,sec2*n,sec2*n+1,1);#define fpclk 2764800unsigned char min_n;unsigned int hou_n;void rtc_init()PREINT=fpclk/32768-1;PREFRAC=fpclk-(fpclk/32768)*32768;YEAR= ;MONTH=1;DOM=15;HOUR=11;MIN=1;SEC=36;CIIR=0x01;ILR=0x01;CCR=0x01;void _irq rtc_int()ILR=0x01;
12、wr_char(9,6,0x10+HOUR/10);wr_char(9,7,0x10+HOUR%10);wr_char(9,8,0x1a);wr_char(9,9,0x10+MIN/10);wr_char(9,10,0x10+MIN%10);wr_char(9,11,0x1a);wr_char(9,12,0x10+SEC/10);wr_char(9,13,0x10+SEC%10);wr_char(11,5,0x10+YEAR/1000);wr_char(11,6,0x10+YEAR%1000/100);wr_char(11,7,0x10+YEAR%100/10);wr_char(11,8,0x
13、10+YEAR%10);wr_char(11,9,0xf);wr_char(11,10,0x10+MONTH/10);wr_char(11,11,0x10+MONTH%10);wr_char(11,12,0xf);wr_char(11,13,0x10+DOM/10);wr_char(11,14,0x10+DOM%10);if(SEC=0)line(c_ox,c_oy,sec59*2,sec59*2+1,0);line(c_ox,c_oy,sec0,sec1,1);elseline(c_ox,c_oy,secSEC*2-2,secSEC*2-1,0);line(c_ox,c_oy,secSEC*
14、2,secSEC*2+1,1);if(MIN=0)line(c_ox,c_oy,min59*2,min59*2+1,0);line(c_ox,c_oy,min0,min1,1);elseline(c_ox,c_oy,minMIN*2-2,minMIN*2-1,0);line(c_ox,c_oy,minMIN*2,minMIN*2+1,1);if(HOUR11)hou_n=(HOUR-12)*60+MIN)/12;elsehou_n=(HOUR*60+MIN)/12;if(hou_n=0)line(c_ox,c_oy,hou59*2,hou59*2+1,0);line(c_ox,c_oy,hou
15、0,hou1,1);elseline(c_ox,c_oy,houhou_n*2-2,houhou_n*2-1,0);line(c_ox,c_oy,houhou_n*2,houhou_n*2+1,1);wr_circle(c_ox,c_oy,2,1);void int_init()/中断向量初始化VICIntSelect=0;/设置所有中断为irq中断VICIntEnable=0x0000 ;/中断使能位VICVectCntl0=0x2d;/中断优先级设置VICVectAddr0=(int)rtc_int;/中断向量设置int main(void)lcd_init();c_init();int_init();rtc_init();enable_irq();/move(2);/line(c_ox,c_oy,min2,min3,1);/line(c_ox,c_oy,hou0,hou1,1);while(1);