dsp课程设计-万年历设计.doc_第1页
dsp课程设计-万年历设计.doc_第2页
dsp课程设计-万年历设计.doc_第3页
dsp课程设计-万年历设计.doc_第4页
dsp课程设计-万年历设计.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

目 录 1 设计目的 12 硬件设计 12.1硬件方案设计12.2单元电路设计12.2.1控制部件 22.2.2显示模块 22.2.3读写时序 42.2.4读写函数 42.2.5地址显示 52.2.6数据处理 52.3硬件调试63 软件设计 83.1系统分析 83.2软件调试84 课程设计体会总结 95 参考文献 9附录 101 设计目的 用TMS320F2812芯片为核心控制部件,设计一个能用LCD液晶显示屏显示当前年,月,日,时,分,秒的具有电子时钟功能的万年历,使用程序来控制时间的实时更新。(1) 熟悉CCS3.3软件的使用;(2) 学习并了解DSP板及教学实验箱的使用;(3) 学习DSP芯片的I/O端口的控制方法;(4) 熟悉Emulator方式下的程序调试规程,并最终能够熟练掌握在DSP软硬件环境下的程序开发流程;(5) 能够对现有器件进行简单地编程,实现各种简单地显示控制。效果图展示如下:2 硬件设计 2.1 硬件方案设计 本系统以TMS320F2812为核心控制部件,利用软件编程,通过CPU中断,使用12864 LCD液晶显示器进行时钟显示,实现基本要求,尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差。由于时间有限和本身知识水平的发挥,我们认为本系统还有需要改进和提高的地方,例如选用更高精度的元器件,硬件电路更加精确稳定,软件测量算法进一步的改进与完善等。2.2 单元电路设计 2.2.1 控制部件 TMS320F2812 CUPTime结构及性能本次课设所使用的TMS320F2812是DSP开发板,主要用到的是其中的CPU定时器功能,其整体思路如下:1. 初始化系统,为系统分配时钟,处理看门狗电路等等,2. 初始化CPU定时器0.3. 定时器0开始计数,等待周期中断,然后进入中断控制,对时分秒进行自加计数,并控制一个LED灯进行工作显示 程序部分如下:int myhour = 12,mymin = 32,mysec = 20;int myyear = 2017,mymon = 06,myday = 8; /预置时钟interrupt void TINT0_ISR(void) / CPU-Timer0中断函数mysec+;if(mysec%2) = 0)GpioDataRegs.GPADAT.bit.GPIOA0 = 1; /进入中断测试elseGpioDataRegs.GPADAT.bit.GPIOA0 = 0;if(mysec = 60) /时分秒自计数mymin+;mysec = 0;if(mymin = 60)myhour+;mymin = 0;if(myhour = 24) /年月日自计数myday+;myhour = 0;if(myday = 30)mymon+;myday = 1;if(mymon = 12)myyear+;mymon = 1; CpuTimer0Regs.TCR.bit.TIF=1; /清除定时器中断标志位 PieCtrl.PIEACK.bit.ACK1=1; /响应同组其他中断 EINT; /开全局中断 2.2.2 显示模块 LCD12864液晶显示 采用LCD12864液晶显示。液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点。12864分左屏和右屏是由两块64*64的液晶组成,有CS1和CS2左右屏使能引脚。64*64的共分8页, 8行led液晶是一页,每行分别是由DB0_DB7控制,也就是从单片机中发64次8位的二进制数可以扫一页,发64(8页)次的二进制数可以扫一个半屏,再乘以二就可以扫全屏,当把二进制数全发完了,才可以控制液晶开始显示。单片机可以通过数据总线与控制信号直接采用存储器访问形式、I/O设备访问形式控制该液晶显示模块。 液晶显示模块的访问、控制是由2812DSP 对扩展扩展接口的操作完成。 2.2.3 显示模块 LCD12864液晶读写时序数据传输过程(8位):MCU写资料MCU读资料 2.2.4 显示模块 LCD12864液晶读写函数void wr_lcd (uchar dat_comm,uint content) uint i,j; sclk=0; std=0; delay(1); for(i=0;i5;i+) wr_byte1(); wr_byte0(); if(dat_comm) wr_byte1(); /data else wr_byte0(); /command wr_byte0(); for(j=0;j2;j+) for(i=0;i4;i+) if(content&0x80) wr_byte1(); else wr_byte0(); content=content1; for(i=0;i4;i+) wr_byte0(); delay(3); 2.2.5 显示模块 LCD12864液晶按地址分行显示函数为了使得程序可读性更加良好,我组编写了按地址分行显示函数,这个函数主要有两个参数,第一个参数为所需要在液晶屏上显示的字符,第二个参数为所需要显示的行数,因为12864液晶显示是按照地址显示的,其起始地址为0x80,第二行的地址为0x90,第三行为0x88,第四行为0x98,一行是8个地址,每个地址位可以显示一个汉字或者是两个字符,所以使用此函数可以简单明了的表示想要显示字符的位置。显示函数如下:void chn_disp (uchar *chn,int m) uchar k; wr_lcd (comm,0x30); wr_lcd (comm,0x80); if(m = 1) wr_lcd (comm,0x30); wr_lcd (comm,0x80); for (k=0;k16;k+) wr_lcd (datt,chnk); if(m = 2) wr_lcd (comm,0x30); wr_lcd (comm,0x90 + 1); for (k=0;k10;k+) wr_lcd (datt,chnk); if(m = 3) wr_lcd (comm,0x30); wr_lcd (comm,0x88 + 1); for (k=0;k8;k+) wr_lcd (datt,chnk); if(m = 4) wr_lcd (comm,0x30); wr_lcd (comm,0x98); for (k=0;k16;k+) wr_lcd (datt,chnk); 2.2.6 显示模块 LCD12864液晶对各数据进行处理使用extern函数对外部变量进行处理void dis_year()/年月日按位装入buff1buff10= myyear/1000 + 0; buff11= (myyear/100%10) + 0;buff12= (myyear/10%10) + 0; buff13= myyear%10 + 0;buff14= -; buff15= mymon/10 + 0;buff16= mymon%10 + 0;buff17= -;buff18= myday/10 + 0;buff19= myday%10 + 0;void dis_sec() /时分秒按位装入buff2buff20= myhour/10 + 0;buff21= myhour%10 + 0;buff22= :;buff23= mymin/10 + 0;buff24= mymin%10 + 0;buff25= :;buff26= mysec/10 + 0;buff27= mysec%10 + 0; 2.3 硬件调试硬件调试可分为静态调试与动态调试两步进行。静态调试是在用户系统未工作时的一种硬件检测。第一步:目测。检查外部的各种元件或者是电路是否有断点。第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。第三步:加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值。 第四步:联机检查。因为只有用单片机开发系统才能完成对用户系统的调试。 动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。3 软件设计3.1 系统分析 根据本系统设计要求和硬件连接电路,软件实现主要包括两个主要部分:液晶显示程序和主函数部分。 液晶显示部分,主要是利用通过字模提取软件计算出来的数组矩阵,选择要显示的汉字、数字或者字符。显示每一个汉字、数字或字符时,应先设置起始页,起始列,然后将所对应的数组中的数据按序写入到LCD数据控制扩展接口中,其中写入左屏的数据地址为0x108003 ,写入右屏的数据地址为0x108004,依次分别写入年、月、日、星期、时、分、秒。主程序的编写,首先要对2812DSP芯片的寄存器进行设置,选择输入输出方式。设置完成,打开显示器,清除显示器显示内存,设置起始行,然后循环读取1302中指示的当前时间。便可以在12864液晶显示屏上准确读出当前时刻。3.2 软件调试 软件调试是通过对程序的编译、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。最终实现了利用DSP芯片控制并用LCD液晶显示器进行实时显示当前秒、分、时、日、月和年。4 课程设计总结体会 通过这次课程的设计,万年历设计基本完成了所要求实现的功能。这次的设计过程中主要是在LCD显示屏上显示出年、月、日、时、分、秒,主要是针对2812进行实现功能的代码编写。2812集成了大部分的硬件,所以在硬件的操作上较为简单。此次的课程设计,组内成员分工明确,各个环节紧密结合,才使得设计成功完成,让我们受益匪浅。5 参考文献 顾卫钢,手把手教你学DSP,北京航空航天大学出版社,2011.4;附录 主函数部分:/*-主函数-*/void main(void) /*初始化系统*/ InitSysCtrl(); DINT; IER = 0x0000; /禁止CPU中断 IFR = 0x0000; /清除CPU中断标志/*初始化PIE*/InitPieCtrl(); /*初始化PIE中断矢量表*/InitPieVectTable();InitGpio();InitPeripherals(); /初始化Cpu定时器模块 init_lcd(); /初始化LCD PieCtrl.PIEIER1.bit.INTx7 =1; /使能PIE模块中的Cpu定时器0的中断 IER|=M_INT1; /开CPU中断 EINT; /使能全局中断 ERTM; /使能实时中断 ConfigCpuTimer(&CpuTimer0, 150, 150000);/Cpu定时器0的周期为1s StartCpuTimer0(); /启动Cpu定时器0 for(;)

温馨提示

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

评论

0/150

提交评论