请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 工具/软件:Code Composer Studio
您好,
请我正在将CCS v7与GNU 6.2 v.1.16 一起使用。 我在代码中使用sprintf,但它不会向LCD生成所需的输出。
模拟器显示我应该显示的值,但显示屏上没有显示任何内容。 请帮助我解决此问题。
请参阅我正在运行的代码:
/**
部分:包含的文件
*/
#include <stdio.h>
#include
"driverlib.h"
#include "lc_driver.h"
/**
部分:宏声明
*/
#define RA 993 //以欧姆为单位的RA测量值
#define RB 1.003万 // RB的测量值(单位:欧姆
)/**
部分:全局变量定义
*/
uint16_t captured_value;
uint16_t previous_capture;
uint16_t period_raw;
uint16_t period_old;
uint16_t period_new;
双delta周期;
双delta电容; //电容变化或测量电容
持续双K = 1.44 /(RA)+(2 *(RB)); //确定电容
持续双KP = 1.0E-6的常量; //一个计时器周期的值(以秒为单位
)/**
*部分:函数原型
*/
void captor_config (void);
void caption_isr (void);
/**
部分:主应用
程序*/
int main (void)
{//
停止监视计时器
WDT_A_HOLD (WDT_A_BASE);
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);
//将WFP 5.2 设置为XT2IN
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P5, GPIO _PIN2 + GPIO _PIN4);
//将WFP 5.3 设置为XT2OUT
GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO_PORT_P5, GPIO _PIN3 + GPIO _PIN5);
//以Hz为单位设置XT1和XT2的频率
UCS_setExternalClockSource (3.2768万,4000000);
//初始化晶体
UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHz_8MHZ);
UCS_turnOnLFXT1 (UCS_XT1_DRIVE_0,UCS_XCAP_3);
//使用晶体设置时钟
//以4MHz的频率初始化主时钟
UCS_initClockSignal (UCS_MCLK,UCS_XT2CLK_SELECT,UCS_CLock_diver_1);
//初始化频率为1MHz的子主时钟
UCS_initClockSignal (UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLock_diver_4);
//初始化频率为32.768kHz的辅助时钟
UCS_initClockSignal (UCS_ACLK,UCS_XT1CLK_SELECT,UCS_CLock_diver_1);
//为LCD配置GPIO
P2DIR || BIIT2 + BIT3;
P3DIR |= BIT7;
P7DIR || BIT4;
P8DIR || BIT1 + BIT2;
//初始化LCD
LCD_Init();
LCD_PutCmd (_LCD_Clear);
LCD_PutCmd (_LCD_Curor_Off);
LCD_PutString (1,1,"测量周期");
LCD_PutString (2,1,"-默认值-");
DELAY毫秒(5000);
LCD_PutCmd (_LCD_Clear);
//为捕获模式配置timerA
CAPT_CONFIG();
//允许555计时器稳定?
DELAY毫秒(5000);
//测量旧期间
period_old = period_raw;
//用于将电容值存储为字符串的数组
CHAR测量电容[16];
//要输出的字符数
UINT8_t data_count;
while (1)
{
// measure new period
period_new = period_raw;
// calculate change in period
delta_period =((float)(period_new - period_old))* kp;
// calculate change in fon_delt=K
* deltate_period;
//格式电容值
//首先将电容值转换为nF
delta电容= delta电容* 1.0E9;
IF (delta电容< 1000.0)
{
//以1000nF为单位显示电容值
data_count = sprintf (测量电容,"C =%.1f",delta电容);
LCD_PutString (1,1," ");
LCD_PutString (1,1,测量电容);
LCD_PutString(1, 10,"nF";
}
否则,如果(delta电容< 1万.0)
{
//以10uF范围显示电容
data_count = sprintf (测量电容,"C =%.1f",(delta电容/ 1000.0));
LCD_PutString (1,1," ");
LCD_PutString (1,1,测量电容);
LCD_PutString(1, 10,"UF");
}
否则,如果(delta电容< 10万.0)
{
//以100uF范围显示电容
}
// 1秒延迟
DELAY _ms(1000);
}
/**
部分:功能定义
*/
void capture_config(void)
{//
将WFP设置1.2 为输入
GPIO端口P1(GPIO_PORT_P1, GPIO_PIN2);
//将WFP 1.2 设置为捕获输入
分配器gPIO_setAsalModuleFunctionInputPin(GPIO_PORT_Pp1,时钟时间器=_CONSTROPH_CLAM_PARAME_PARAMERA_PARAMERA_PARAME_POSTER_1_PARAMERASE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PARAMERADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_TIME_PORADE_PORADE_PORADE_PORADE_PORADE_PORADE_POST_PORADE_PORADE_POST_PORAME_PORADE
continuous_param.startTimer = false;
Timer_a_initContinuousMode(timer_A0_base,&continuous_param);
//初始化timerA捕获模式
Timer_a_clearCaptureCompareInterrupt (timer_A0_base, timer_a_CAPTURMPare_register_0);
Timer_a_initcapcapture_mode_mode_timer_conve_capture_param.captureRegister =
capture_param.captureInterruptEnable
capture_param.captureInputSelect capture_param.captureMode
Capture_param.synchronizeCaptureSource = timer_a_capture_synchronous;
capture_param.captureOutputMode = timer_a_OUTPUTMODE_OUTBITVALUE;
Timer_a_initCaptureMode (timer_A0_base,&capture_param);
Timer_a_startCounter(timer_A0_base, Timer_a_continuous模式);
//启用中断
__bis_sr_register(GIE);
} void capture_isr(void){静态uint8_t interrupt number =0;interrupt number++;//获取捕获值//captured_value = Timer_a_getCaptureCompareCount(timer_A0_base, timer_a_captur_1= 0;interp_interp_interp_capout_capp_capp_capp1
=
中断数= gp_interp_interp_interp_capp_capp_capp_capp_capp_capsf_capsf_capp_capp1;interr1_interrf_interrf_interrf_capp_interrf_capp=中断值=<interrbure_capp_capp_capp_capp_
//gPIO_setOutputLowOnPin(GPIO_PORT_P1, gPIO_PIN0);
}//
启用中断
__bis_sr_register(GIE);
}/**
部分:中断服务例程
*/
__attribute__(interrupt (TIMER0_A1_vector)) void timer_A0_r1(void)
{
交换器(___IASR2;__ICAST_I0/
IR2; IASR2/IASR2/:
中断4:
中断4;IASR2/中断4;IASR2/中断4:中断4:中断4;IGR2/中断4;IASR3/中断/中断4:IASR3/中断/中断4:IASG/中断/中断4:中断/中断/中断4:I0
// CCR4 IFG
break;
Case 10: // CCR5 IFG
break;
Case 12: // CCR6 IFG
break;
Case 14: // TAOIFG
break;
default: // Never executed
break;
}
以前我在系统中有此代码
data_count = sprintf (测量电容,"C =%.1f",(delta电容/ 1000.0));
LCD_PutString (1,1,"");
LCD_PutString (1,1,测量电容);
LCD_PutString (1,(data_count + 2),"UF");
这是我在操作几分钟后在LCD上得到的输出: