DSP课程设计温度采集与液晶屏显示控制.doc

上传人:仙人指路1688 文档编号:4146442 上传时间:2023-04-07 格式:DOC 页数:16 大小:178KB
返回 下载 相关 举报
DSP课程设计温度采集与液晶屏显示控制.doc_第1页
第1页 / 共16页
DSP课程设计温度采集与液晶屏显示控制.doc_第2页
第2页 / 共16页
DSP课程设计温度采集与液晶屏显示控制.doc_第3页
第3页 / 共16页
DSP课程设计温度采集与液晶屏显示控制.doc_第4页
第4页 / 共16页
DSP课程设计温度采集与液晶屏显示控制.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《DSP课程设计温度采集与液晶屏显示控制.doc》由会员分享,可在线阅读,更多相关《DSP课程设计温度采集与液晶屏显示控制.doc(16页珍藏版)》请在三一办公上搜索。

1、DSP原理及应用课程设计报告 学 院: 专业班级: 学生姓名: 学 号: 设计地点(单位)_ _ _设计题目:_ 温度采集与液晶屏显示控制 完成日期: 年 月 日 目 录1 课程设计目的12 课程设计正文12.1系统分析12.1.1 设计的任务及步骤12.1.2 技术要求12.1.3设计思路12.2 总体设计12.2.1硬件设计12.2.2 系统框图设计22.3 元器件的选择22.3.1 单元电路设计22.3.2 单元模块分析32.4 程序流程图与源程序42.4.1 软件系统流程图42.4.2 软件程序设计53 运行结果54 课程设计总结65 参考文献6附录71 课程设计目的通过我们对DSP控

2、制器及其应用课程的学习和理解,综合运用课本中所学到的理论知识完成一个温度采集与液晶屏显示控制的课程设计。在这个过程必须掌握温度采集技术的硬件设计、熟悉A/D转换技术和DSP液晶显示功能的软件设计。学会采用简单电路的实验调试和整机指标测试方法,增强我们的动手能力,为以后学习和工作打下坚实基础。2 课程设计正文2.1系统分析 2.1.1 设计的任务及步骤 (1)熟悉MC1403芯片的应用; (2)根据实验测得热敏电阻和温度的一些数据,设计温度电阻公式; (3)设计外部硬件电路; (4)软件完成程序流程图设计和编程,其中包括A/D转换和液晶显示部分; (5)软硬件联合调试; (6)书写设计说明书。2

3、.1.2 技术要求 此系统利用热敏电阻测得电阻温度之间的关系,找到电阻和温度之间的代数关系,从而检测温度,设计硬件外扩电路,同时设计软件程序,包括A/D程序设计,进行软硬件联系调试,能在液晶显示屏上显示温度。2.1.3设计思路 系统首先设计温度采集硬件电路,在多次实验运算拟合出热敏电阻输出电压值与温度之间的函数关系,热敏电阻的输出的电压值随温度的上升而下降,呈现出负系数,从而运用于实验中检测温度;然后将采集的温度送入DSPTMS320F2812模数转换模块将电压信号变为数字信号,再编写函数来控制LCD来显示相应的温度及相关文字。2.2 总体设计 2.2.1硬件设计TMS320F2812作为使用

4、的DSP芯片。它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空)时钟源模块,DSP有六种信号可以使DSP控制器复位,即电源复位、复位引脚RS、软件复位、非法地址复位、看门狗定时器溢出、欠压复位六种复位信号。所以在设计的初期,把它分成了五个模块。其中复位采用电源复位的方式,由引脚PCRESET引起。为了可靠复位,其中低电平的有效时间至少6个CPU时钟周期。DSP最小系统组成框图如图1所示。 图1 DSP最小系统其中:开关SW-PB、电容C1、两个反相器及其电阻电源构成了复位电路,晶振与两个并联电容接XTAL1与XTAL2构成振荡电路,PWM1与PWM7构成了调制信号的输

5、入与输出,旁路引脚接地,请求控制信号MP/MC与GND接地。2.2.2 系统框图设计该系统包括温度采集电路模块、DSPF2812芯片、A/D转换部分和LCD液晶显示,首先要初始化A/D转换模块,然后等待中断,当产生中断后对采集到的模拟信号进行处理,为确保转换精度要进行多次取值求平均,转换结果放在结果寄存器的高12位上,通过编程将处理后的温度值送到LCD上进行显示。温度采集电路DSPF2812A/D转换电路液晶显示模块 图2 系统设计流程图2.3 元器件的选择2.3.1 单元电路设计(1)设计方案MC1403芯片为模数转换提供基准电压,且输入端接+5V电源后再并联一个去噪声的电容,利用热敏电阻进

6、行温度采集,采集后的输出电压(不得大于3.3v)与DSP的P2端口23引脚相连。(2)外扩电路设计图图3 温度采集电路原理图2.3.2 单元模块分析(1)MC1403芯片的引脚结构如下图所示。图4 MC1403芯片Vin端口输入一个4.55.0V的模拟电压值(接P2口的1引脚),在输入端接一个电容滤除其他频率分量,在Vout端输出了一个稳定的电压值(接P2口的23引脚),该电压值不得大于3.3V,GND端接模拟地(接P2口的33引脚)。(2) A/D转换模块当模/数转换完成后,读取结果寄存器前,最好先读取模/数转换控制寄存器ADCRL2的ADCFIF01或ADCFIF02,以确定当前结果寄存器

7、的状态,保证读取的结果是正确。另外,要注意12位的转换结果放在结果寄存器中的高12位上,该12位数据与外部模拟输入电压的关系为:12位数字结果=4095*(输入电压/基准电压)(3) LCD液晶显示模块DSP经常会对读写周期较慢的输入/输出设备(如液晶显示模块、打印机、键盘等)进行访问,通常以下两种方法来解决DSP与这些慢速设备之间的输入/输出时序匹配问题。直接访问方式是将DSP的读写信号限于慢速设备接口控制板引出的读写信号线直接相连,时序由DSP内部读写逻辑控制。由于慢速外设的读写周期相对DSP较慢,是两者的时序匹配,还必须进行一些时序方面的控制处理。一中处理方法是软件编程等待状态发生器,将

8、外部总线周期扩展到数个机器周期。由于受硬件条件的限制,这种扩展通常也是有限的。液晶显示为128行和64列的矩阵,它分左右两个平面,而一个字是16行和16列的矩阵,在按页的显示中每一页是一个8行和128列的矩阵,所以每一行字是分两页显示的。2.4 程序流程图与源程序2.4.1 软件系统流程图软件系统流程图如图5所示。 开 始初始化DSP时钟初始化CTR初始化AD采样时钟中断采集数据存入Voltagel中数据处理后的温度值送到LCD显示清楚并显示相关文字启动AD0通道采集 图5 程序流程图2.4.2 软件程序设计该程序主要包括主程序、延时、A/D转换,液晶屏相应汉字显示、温度计算与显示等子程序实现

9、温度采集与显示的功能,程序详见附录。3 运行结果(1)运行描述M1403芯片作为模数转换提供基准电压,利用热敏电阻进行采集,采集后的输出电压与DSP的P2口23引脚相连。将采集到的电压送入A/D转换模块,编写程序实现A/D转换,转换结果放在结果寄存器的高12位上,编写函数获取A/D转换结果,将处理的温度值的各个对应显示到LCD上。(2)系统调试 MC1403 芯片Vin 端输入一个+5V的模拟电压值;在输入端接一个电容滤除其它频率分量;在 Vout 端输出了一个稳定的电压值;GND端直接接模拟地;给试验箱供电,打开 Setup CCS2(C2000), 在弹出的对话框中选择ICETEK-510

10、0 USB Emulator for TMS320F2812 导入,进行配置设置然后进入 CCS2(C2000),打开工程文件进行编译生成 .out 文件下载到硬盘中然后调试,观察液晶显示屏,第一行显示“温度显示”,第二行显示“ 温度值 ”,当用手触摸时,温度显示不断变化,实现了温度的采集与现实。(3)调试结果将程序烧到实验箱中,得到运行结果如下图6所示。图 6 调试结果4 课程设计总结通过学习DSP课程我们都知道,DSP实际上也是一种单片机,它同样是将中央处理单元、控制单元和外围设备集成到一块芯片上。但DSP有别于普通的单片机,它采用了多组总线技术实现并行运行机制,从而极大地提高了运算速度,

11、也提供了非常灵活的指令系统。在这次课程设计中软件编程部分,程序调试我采用的是CCS 2 (C2000)软件,至于软件如何配置和使用,老师在上实验课的时候已经简单的介绍过,所以再次看到它的时候不是很陌生,但是在用它编程序时就出现了很多问题,在这里我遇到了很大的困难,虽然有书籍和网络上查找的辅导资料,但是由于软件设计是灵活的东西,它不仅需要有过硬的编程知识,还必须有灵活的应用,因此在这方面的调试时花费了大量的时间。首先,我把编程序想的过于简单,以为只是把每个模块的子程序编写成功便可以,却忽视了模块与模块之间的相关性和衔接性,因此总出现参数定义不准确和函数声明不相符的错误。其次,因为自已的粗心不严谨

12、,导致出现大小写不符,缺少分号或大括号的低级错误。程序语法不对,调试不过去,生成不了.out文件,不过通过请教老师和同学问题都解决了,当我看到我调试出来的结果是那种激动的心情就别提了,感觉特别有成就感。通过这次课程设计,不仅使我进一步加深对课本知识的理解,更锻炼了我动手动脑的能力,还提高了我分析问题、解决问题的能力,在这次设计中我也学会了遇事要冷静,虚心请教,没有任何事情解决不了,最后衷心的感谢始终支持我们的老师,你辛苦了!5 参考文献1 万山明.TMS320F281x DSP原理及应用实例.北京航空航天大学出版社,20072 郑红,王鹏,董云凤,吴冠.DSP应用系统设计实践.北京航空航天大学

13、出版社,20063 徐科军,张瀚,陈智渊.TMS320F281xDSP 原理与应用.北京航空航天大学出版社,20064 TMS320x281x Analog-to-Digital Converter(ADC) Reference Guide. Texas Instruments,20044 TMS320x281x System Control and Interrupts Reference Guide. Texas Instruments,2004附录#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP

14、281x_Examples.h / DSP281x Examples Include File/ Prototype statements for functions found within this file.interrupt void adc_isr(void);/ Global variables used in this example:#define LCDDELAY 1#define LCDCMDTURNON 0x3f#define LCDCMDTURNOFF 0x3e#define LCDCMDSTARTLINE 0xc0#define LCDCMDPAGE 0xb8#def

15、ine LCDCMDVERADDRESS 0x40#define ADC_usDELAY 8000L#define ADC_usDELAY2 20LUint16 ZhengshuT,XiaoshuT,Zhongjian1,Zhongjian2;float temp1=0;unsigned char lcdkey532;unsigned char ledkey128;Uint16 LoopCount;Uint16 ConversionCount;float temp;Uint16 i,j;Uint16 Voltage11024;Uint16 Voltage21024;void Delay(int

16、 nDelay);void TurnOnLCD();void LCDCLS();void LCDWrite(unsigned int x,unsigned int y,unsigned int LR,unsigned int n);void WriteNb(unsigned int x,unsigned int y,unsigned char *No,unsigned f,unsigned int LR);void Wendu(float c);void delay_loop();void delay_loop1();void error(void);/数字模块unsigned char le

17、dkey128= /半角0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,/00x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00,/10x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00,/20x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00, /30x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00, /40x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00, /50x00,0x00,0x7C,0x92,0x92,0x92,0x6

18、4,0x00, /60x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00, /70x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00, /80x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00, /90x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, /: 0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00, /. ;void main(void) InitSysCtrl(); EALLOW; GpioMuxRegs.GPFMUX.all=0x0000; /I

19、/O:0 特殊功能:1 GpioMuxRegs.GPFDIR.all=0x000f;/ output EDIS; DINT; InitPieCtrl(); IER = 0x0000; /CPU中断允许寄存器 IFR = 0x0000;/CPU中断标志寄存器 InitPieVectTable(); EALLOW; SysCtrlRegs.HISPCP.all = 0x3; / HSPCLK = SYSCLKOUT/6给AD转换时钟提供一个6分频 EDIS; EALLOW; / This is needed to write to EALLOW protected register PieVect

20、Table.ADCINT = &adc_isr; EDIS; / This is needed to disable write to EALLOW protected registers InitAdc(); / 初始化AD PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; / Enable CPU Interrupt 1 EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCou

21、nt = 0; / Configure ADC AdcRegs.ADCMAXCONV.all = 0x0001; / Setup 2 convs on SEQ1 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; / Setup ADCINA3 as 1st SEQ1 conv. AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; / Setup ADCINA2 as 2nd SEQ1 conv. AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; / Enable EVASOC to start SEQ1 AdcRe

22、gs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; / Enable SEQ1 interrupt (every EOS)/ Configure EVA/ Assumes EVA Clock is already enabled in InitSysCtrl(); EvaRegs.T1CMPR = 0x0080; / Setup T1 compare value EvaRegs.T1PR = 0x0fff; / Setup period register EvaRegs.GPTCONA.bit.T1TOADC = 1; / Enable EVASOC in EVA EvaRegs

23、.T1CON.all = 0x1042; / Enable timer 1 compare (up TurnOnLCD(); /打开显示 LCDCLS(); /清除显示内存 *(int *)0x108000=0x80;/ 初始化ICETEK-CTRDelay(LCDDELAY);*(int *)0x108000=0x0;Delay(LCDDELAY);*(int *)0x108000=0x80;Delay(LCDDELAY);*(int *)0x108001=LCDCMDSTARTLINE;/ 设置显示起始行Delay(LCDDELAY);*(int *)0x108002=0;Delay(LC

24、DDELAY); for(;) Wendu(temp); LCDWrite(2,0,0,0); LCDWrite(2,16,0,1); LCDWrite(2,32,1,2); LCDWrite(2,48,1,3); LCDWrite(6,48,1,4);/在液晶屏上显示相应的汉字及符号 WriteNb(6,6,ledkeyZhengshuT&0x000f,0,0); WriteNb(6,5,ledkey(ZhengshuT&0x00f0)4,0,0); WriteNb(6,2,ledkeyXiaoshuT&0x000f,0,1); WriteNb(6,1,ledkey(XiaoshuT&0x0

25、0f0)4,0,1); WriteNb(6,7,ledkey11,0,0);/在液晶屏上显示温度值 interrupt void adc_isr(void) Voltage1ConversionCount = AdcRegs.ADCRESULT0 4; Voltage2ConversionCount = AdcRegs.ADCRESULT1 4; if(ConversionCount = 1023) ConversionCount = 0; else ConversionCount+; if(ConversionCount=0) temp=0; for(i=0;i200;i+) temp=te

26、mp+Voltage1i; temp=temp/200.0;/求平均值 temp=temp*3.0/4095.0; / Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Acknowledge interrupt to PIE return;/延时子程序void Delay( int n

27、Delay)int ii,jj,kk=0;for ( ii=0;iinDelay;ii+ )for ( jj=0;jj1024;jj+ )kk+;/打开显示子程序void TurnOnLCD()*(int *)0x108001=LCDCMDTURNON;Delay(LCDDELAY);*(int *)0x108002=0;Delay(2048); *(int *)0x108001=LCDCMDSTARTLINE;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);/清屏程序void LCDCLS()int i,j;*(int *)0x10800

28、1=LCDCMDSTARTLINE;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);for ( i=0;i8;i+ )*(int *)0x108001=LCDCMDPAGE+i;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);*(int *)0x108001=LCDCMDVERADDRESS;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);for ( j=0;j64;j+ )*(int *)0x108003=0;Delay(LCDDE

29、LAY);*(int *)0x108002=0;Delay(LCDDELAY); *(int *)0x108001=LCDCMDPAGE+i;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);*(int *)0x108001=LCDCMDVERADDRESS;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);for ( j=0;j64;j+ )*(int *)0x108004=0;Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);void

30、LCDWrite(unsigned int x,unsigned int y,unsigned int LR,unsigned int n) unsigned char lcdkey532=0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,/温0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA

31、6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,/度0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0X00,0X00,0X00,0X00,0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00,/显0x00,0x20,0x20,0x22

32、,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00,/示0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x

33、00,/; if(LR=0) int j; int k=n; *(int *)0x108001=LCDCMDPAGE+x; Delay(1); *(int *)0x108002=0; Delay(1); *(int *)0x108001=LCDCMDVERADDRESS+y; Delay(1); *(int *)0x108002=0; Delay(1); for(j=0;j16;j+) *(int *)0x108003=lcdkeykj; Delay(10); *(int *)0x108002=0; Delay(10); x+; *(int *)0x108001=LCDCMDPAGE+x; D

34、elay(1); *(int *)0x108002=0; Delay(1); *(int *)0x108001=LCDCMDVERADDRESS+y; Delay(1); *(int *)0x108002=0; Delay(1); for(j=16;j32;j+) *(int *)0x108003=lcdkeykj; Delay(100); *(int *)0x108002=0; Delay(100); else int j; int k=n; *(int *)0x108001=LCDCMDPAGE+x; Delay(1); *(int *)0x108002=0; Delay(1); *(in

35、t *)0x108001=LCDCMDVERADDRESS+y; Delay(1); *(int *)0x108002=0; Delay(1); for(j=0;j16;j+) *(int *)0x108004=lcdkeykj; Delay(100); *(int *)0x108002=0; Delay(100); x+; *(int *)0x108001=LCDCMDPAGE+x; Delay(1); *(int *)0x108002=0; Delay(1); *(int *)0x108001=LCDCMDVERADDRESS+y; Delay(1); *(int *)0x108002=0

36、; Delay(1); for(j=16;j32;j+) *(int *)0x108004=lcdkeykj; Delay(100); *(int *)0x108002=0; Delay(100); void WriteNb(unsigned int x,unsigned int y,unsigned char *No,unsigned f,unsigned int LR) int i; y*=8; *(int *)0x108001=LCDCMDPAGE+x;/ 设置操作页=1Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);*(int *)

37、0x108001=LCDCMDVERADDRESS+y;/ 起始列=8Delay(LCDDELAY);*(int *)0x108002=0;Delay(LCDDELAY);if(LR=1)for(i=0;i8;i+) if(f=1) *(int*)0x108004=Noi; else *(int*)0x108004=Noi; Delay(LCDDELAY); *(int*)0x108002=0; Delay(LCDDELAY); else for(i=0;i8;i+) if(f=1) *(int*)0x108003=Noi; else *(int*)0x108003=Noi; Delay(LC

38、DDELAY); *(int*)0x108002=0; Delay(LCDDELAY); /温度计算子程序void Wendu(float c) temp1=52-30*c; ZhengshuT=(int)temp1; XiaoshuT=(int)(temp1-ZhengshuT)*100); Zhongjian1=ZhengshuT/10; Zhongjian2=ZhengshuT%10; ZhengshuT=(Zhongjian14)|Zhongjian2; Zhongjian1=XiaoshuT/10; Zhongjian2=XiaoshuT%10; XiaoshuT=(Zhongjian14)|Zhongjian2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号