野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18477|回复: 3

STM32 LCD显示问题希望大家帮帮忙

[复制链接]
发表于 2015-7-1 09:34:30 | 显示全部楼层 |阅读模式
为什么我ad采集显示LCD上面的电压是一个字一个字显示,不是固定的电压值变动,调试很久。希望大家帮帮忙,代码我已经上传了



6@GDTUK~{VTUFZRXO][7.png

ADS1256和Lcd测试.part01.rar (512 KB, 下载次数: 10)
ADS1256和Lcd测试.part02.rar (512 KB, 下载次数: 9)
ADS1256和Lcd测试.part03.rar (512 KB, 下载次数: 10)
ADS1256和Lcd测试.part04.rar (512 KB, 下载次数: 10)
ADS1256和Lcd测试.part05.rar (512 KB, 下载次数: 11)
ADS1256和Lcd测试.part06.rar (512 KB, 下载次数: 9)
ADS1256和Lcd测试.part07.rar (512 KB, 下载次数: 9)
ADS1256和Lcd测试.part08.rar (512 KB, 下载次数: 9)
ADS1256和Lcd测试.part09.rar (512 KB, 下载次数: 11)
ADS1256和Lcd测试.part10.rar (512 KB, 下载次数: 9)
ADS1256和Lcd测试.part11.rar (49.76 KB, 下载次数: 11)


回复

使用道具 举报

发表于 2015-7-1 09:37:05 | 显示全部楼层
一个字一个字显示是什么意思
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-1 09:39:14 | 显示全部楼层
/*
*********************************************************************************************************
*
*        模块名称 : 主程序模块。
*        文件名称 : main.c
*        版    本 : V1.0
*        说    明 : systick实现软件延迟和定时器例程。
*        修改记录 :
*
*********************************************************************************************************
*/

#include "stm32f10x.h"                /* 如果要用ST的固件库,必须包含这个文件 */
#include <stdio.h>                        /* 因为用到了printf函数,所以必须包含这个文件 */
#include "bsp.h"                        /* 底层硬件驱动 */
#include "LCD/LCD.h"
#include "string.h"


/* 定义例程名和例程发布日期 */
#define EXAMPLE_NAME        "STM32F103VE+ADS1256例程"
#define EXAMPLE_DATE        "2014-03-08"
#define DEMO_VER                "1.0"


static char LcdViewBuff[128];

/* 仅允许本文件内调用的函数声明 */
static void PrintfLogo(void);
static void PrintfHardInfo(void);

/*
*********************************************************************************************************
*        函 数 名: main
*        功能说明: c程序入口
*        形    参:无
*        返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{
        int32_t adc[8];
        int32_t volt[8];
        uint8_t i;
        uint8_t ch_num;

        /*
                由于ST固件库的启动文件已经执行了CPU系统时钟的初始化,所以不必再次重复配置系统时钟。
                启动文件配置了CPU主时钟频率、内部Flash访问速度和可选的外部SRAM FSMC初始化。

                系统时钟缺省配置为72MHz,如果需要更改,可以修改:
                \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
                中配置系统时钟的宏。
        */

        bsp_Init();
        PrintfLogo();                /* 打印例程Logo到串口1 */
        PrintfHardInfo();        /* 打印硬件接线信息 */

        bsp_DelayMS(100);        /* 等待上电稳定,等基准电压电路稳定, bsp_InitADS1256() 内部会进行自校准 */

        bsp_InitADS1256();        /* 初始化配置ADS1256.  PGA=1, DRATE=30KSPS, BUFEN=1, 输入正负5V */
       
  LCD_Initializtion(); //LCD初始化
       
       
        /* 打印芯片ID (通过读ID可以判断硬件接口是否正常) , 正常时状态寄存器的高4bit = 3 */
        {
                uint8_t id;

                id = ADS1256_ReadChipID();

                printf("\r\n");
                printf("读取芯片ID\r\n");
                if (id != 3)
                {
                        printf("Error, ASD1256 Chip ID = 0x%X\r\n", id);
                }
                else
                {
                        printf("Ok, ASD1256 Chip ID = 0x%X\r\n", id);
                }
        }

        /* 设置PGA增益,数据更新速率 */
        #if 1
                printf("\r\nPGA增益 = 1, 数据输出速率 = 15sps, 单端8路扫描\r\n\r\n");

                ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS);        /* 配置ADC参数: 增益1:1, 数据输出速率 15Hz */

                /*
                   中断服务程序会自动读取ADC结果保存在全局变量,主程序通过 ADS1256_GetAdc() 函数来读取这些数据
                */
                ADS1256_StartScan(0);        /* 启动中断扫描模式. 0表示单端8路,1表示差分4路 */
                ch_num = 8;                /* 通道数 = 8 或者4 */
        #else
                printf("\r\nPGA增益 = 1, 数据输出速率 = 15sps, 差分4路扫描\r\n\r\n");

                ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS);        /* 配置ADC参数: 增益1:1, 数据输出速率 15Hz */

                /*
                   中断服务程序会自动读取ADC结果保存在全局变量,主程序通过 ADS1256_GetAdc() 函数来读取这些数据
                */
                ADS1256_StartScan(1);        /* 启动中断扫描模式. 0表示单端8路,1表示差分4路 */
                ch_num = 4;                /* 通道数 = 8 或者4 */
        #endif

        while (1)
        {
                LCD_Clear(White);
                GUI_Text(44,10,"YuanKeTech",Black,White); //传输到LCD屏幕上               
               
                bsp_Idle();                /* 空闲时执行的函数,比如喂狗. 在bsp.c中 */

                for (i = 0; i < ch_num; i++)
                {
                        /* 从全局缓冲区读取采样结果。 采样结果是在中断服务程序中读取的。*/
                        adc = ADS1256_GetAdc(i);

                        /* 4194303 = 2.5V , 这是理论值,实际可以根据2.5V基准的实际值进行公式矫正 */
                        volt = ((int64_t)adc * 2500000) / 4194303;        /* 计算实际电压值(近似估算的),如需准确,请进行校准 */
                }

                /* 打印采集数据 */
                {
                        int32_t iTemp;
                       
                        //清空LCD显示缓冲区
                        memset(LcdViewBuff,0,128);
                       
                        for (i = 0; i < ch_num; i++)
                        {
                                iTemp = volt;        /* 余数,uV  */
                                if (iTemp < 0)
                                {
                                        iTemp = -iTemp;

                                        sprintf(LcdViewBuff,"%d=%6d,(-%d.%03d %03d V) ", i, adc, iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
                                }
                                else
                                {
                                        sprintf(LcdViewBuff,"%d=%6d,( %d.%03d %03d V) ", i, adc, iTemp/1000000, (iTemp%1000000)/1000, iTemp%1000);
                                }
                               
                                GUI_Text(44,(10+i*40),LcdViewBuff,Black,White); //传输到LCD屏幕上                                       
                        }
                       
                        printf("\33[%dA", ch_num);
                }

                bsp_DelayMS(300);        /* 每隔300ms 输出一次数据 */
        }
}

/*
*********************************************************************************************************
*        函 数 名: PrintfHardInfo
*        功能说明: 打印硬件接线信息
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
static void PrintfHardInfo(void)
{
        printf("接线方法: \r\n");
        printf("ADS1256模块    STM32-X2开发板(STM32F103VE)\r\n");
    printf("  +5V   <------  5.0V      5V供电\r\n");
    printf("  GND   -------  GND       地\r\n");
        printf("  DRDY  ------>  PB3       准备就绪\r\n");
        printf("  CS    <------  PB2       SPI_CS\r\n");
        printf("  DIN   <------  PB15      SPI_MOSI\r\n");
        printf("  DOUT  ------>  PB14      SPI_MISO\r\n");
        printf("  SCLK  <------  PB13      SPI时钟\r\n");
        printf("  GND   -------  GND       地\r\n");
        printf("  PDWN  <------  不接      掉电控制\r\n");
        printf("  RST   <------  不接      复位信号\r\n");
}

/*
*********************************************************************************************************
*        函 数 名: PrintfLogo
*        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
static void PrintfLogo(void)
{
        printf("\33[2J");        /* 清屏 */       
        printf("*************************************************************\n\r");
        printf("* 例程名称   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名称 */
        printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */
        printf("* 发布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */

        /* 打印ST固件库版本,这3个定义宏在stm32f10x.h文件中 */
        printf("* 固件库版本 : %d.%d.%d\r\n", __STM32F10X_STDPERIPH_VERSION_MAIN,
                        __STM32F10X_STDPERIPH_VERSION_SUB1,__STM32F10X_STDPERIPH_VERSION_SUB2);
        printf("* \n\r");        /* 打印一行空格 */
        printf("* QQ    : 6528760 \r\n");
        printf("* Email : 6528760@qq.com \r\n");
        printf("* Copyright www.yuankeceth.com 远科智能\r\n");
        printf("*************************************************************\n\r");
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-1 09:43:19 | 显示全部楼层
flyleaf 发表于 2015-7-1 09:37
一个字一个字显示是什么意思

一直刷屏,而且显示还是很慢一行一行显示,然后显示是一个字符一个字符显示出来,不能固定,然后显示电压变动
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-9 17:17 , Processed in 0.058302 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表