DSP28335驱动Lcd12864显示Ds18b20采集到的温度,并通过Sci方式传输至PC,使用Matlab制作上位机软件进行数据保存与显示

这一篇文章是我前一篇文章的续集,主要是为了弥补 CCS无法实时捕捉数据至上位机的缺陷(可能CCS有,但是我却没找到,如果有读者知道具体答案,请留言告诉我。)。当然串口传输来的数据也有不足的地方,就是这些数据只能让我们感性的观看,如果想做数据分析,如FFT等,可能数据的采样精度就不够了。所以这也是一个不足的地方,希望日后能有解决的办法。下面开始正文部分吧!

 

废话不多说,先来张效果图:

图1是DSP_demo板加Lcd12864的显示。显示的比较粗糙,026.56就是26.56℃,一些细节没有做好,主要是功能的实现。


图2是使用Matlab2017b的AppDesigner制作的串口通信上位机软件,具体功能有:发送(TX)、接收(RX)、实时绘图、数据实时保存等。其中COM口和波特率需要设置,其他的如:数据位、校验位、停止位等等,已经在代码中默认设置了,因为只是这个小设计的定制版本,也没有高兴将所有功能都全部放置在界面上。

图像中,出现了34℃,那是我用手拿住了 Ds18b20。目前是6月底,江苏黄梅天,今天室温就是27℃左右。


图3是采集到的数据。只是展示了部分,刚开机的时候是没有打开文本存储按钮的,因此第一个数据与图2中接收数据框中前几个数据不是对应的。


                         图1                                                         图2                                                                    图3


效果展示完了,那么接下来就是代码部分:

 

/*
 * 功能:1.DS18B20进行温度采集,并使用12864进行显示
 * 		2.将采集到的温度 通过SCIA传输,因为SCIB的9口被12864占用,所以不能用SCIB
 * 		3.SCIA使用CpuTimer0中断,1s传输一次温度数据给PC,未使用FIFO中断
 * 波特率:9600  8位数据位,1位停止位,无校验位
 */

#include "DSP2833x_Project.h"
#include "math.h"

#include "lcd12864.h"
#include "ds18b20_para.h"

#define uchar  unsigned char

void init_port(void);
uchar Init_DS18B20();
uchar ReadOneChar(void);
void WriteOneChar(uchar dat);
float ReadTemperature();
void lcd_init(void);
void lcd_write_cmd(uchar cmd);			
void lcd_write_dat(uchar dat);			
void LCD12864SetAddress_f( uchar x, uchar y ); 	 //地址转换
void show(uchar x, uchar y, uchar * data);	

void scia_init(void);
void GPIO_init();
interrupt void Timer0_ISR(void);

uchar table[7];

int main(void)
{

	float tt;
	int tt1;

	InitSysCtrl();

	init_port();   //ds18b20 & 12864 端口初始化

	DINT;
	InitPieCtrl();	//初始化中断控制
	IER = 0x0000;
	IFR = 0x0000;
	InitPieVectTable();//初始化中断矢量表

	GPIO_init();  //配置端口为SCI

	EALLOW;        // This is needed to write to EALLOW protected registers
	PieVectTable.TINT0 = &Timer0_ISR;//将定时器0中断服务函数入口放入中断向量表
	EDIS;   // This is needed to disable write to EALLOW protected registers

	InitCpuTimers();
	ConfigCpuTimer(&CpuTimer0, 150, 1000000);	//定时器0定时时间为 1s

	scia_init();	//SCIA端口初始化

	lcd_init();

	PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block
	PieCtrlRegs.PIEIER1.bit.INTx7=1;     // PIE Group 1, INT7
	IER = 0x001;
	EINT;


	CpuTimer0Regs.TCR.bit.TSS = 0;  // 启动定时器0

	while (1)
	{
		tt=ReadTemperature();
		tt1=tt*100+0.5;
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。

		table[0]=tt1/10000+0x30;  //百位
		table[1]=tt1%10000/1000+0x30;//十位
		table[2]=tt1%1000/100+0x30;//个位
		table[3]='.';
		table[4]=tt1%100/10+0x30;//十分位;
		table[5]=tt1%10+0x30;//百分位;
		table[6]='\0';  //用来中止一组显示数据
		show(0,0,table);
	}

}

//----------------------
//--- 12864 及  DS18B20 的初始化
//----------------------
void init_port(void)
{
	EALLOW;
		GpioCtrlRegs.GPBPUD.bit.GPIO40 = 0;    // 使能GPIO10 引脚内部上拉

		GpioCtrlRegs.GPBMUX1.bit.GPIO40 =0;   // 配置GPIO10为通用I/O口

		GpioCtrlRegs.GPBQSEL1.bit.GPIO40 = 0;    // GPIO40与系统时钟SYSCLKOUT 同步

		//lcd12864 use
		GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // 使能GPIO0 引脚内部上拉

		GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;   // 禁止GPIO1 引脚内部
  • 4
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
DSP28335开发板的温度采集模块用于测量环境的温度并将采集到的数据传输DSP28335处理器进行处理和分析。温度传感器是连接到开发板上的外设,通过与DSP28335的通信接口进行数据交换。 温度采集模块的工作原理是通过温度传感器将环境的温度值转换为电信号,并通过模拟信号或数字信号的方式传输DSP28335进行处理。传感器可能使用热敏电阻、热电偶或热敏电容等不同的技术原理来实现温度的测量。 在DSP28335软件开发中,首先需要对温度传感器进行初始化和配置,包括选择传感器类型、设置通信接口等。之后,通过读取传感器的数据寄存器,获取传感器所测得的温度数值。这些数据可以是模拟信号经过ADC转换后获得的数字值,也可以是数字传感器直接输出的数字信号。 通过温度采集模块,可以实现对环境温度的实时监测和数据采集。利用DSP28335强大的数据处理能力,可以进行温度曲线的绘制、报警阈值的设定以及温度数据的存储和传输等功能。温度采集模块的应用广泛,可以用于电子设备的温度监控、工业自动化控制系统、气象仪器等领域。 总之,DSP28335开发板的温度采集模块是一种用于测量环境温度并由DSP28335处理的外设。它具有高精度、可靠性强、易于使用、灵活性高等特点,为温度监测和控制提供了方便和可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值