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