msp430F149 AD 12864程序显示问题,计算P6.0口32次平均电压值,并显示在lcd上,编译没有错误。 10
单步执行只能到主函数的Ini_Lcd,不知道程序有什么问题,已经捯饬了两周了,呜呜,请各位大侠帮帮忙,小女子感激不尽!急急急!!!!或者哪位大侠有调试成功的此类程序也可以...
单步执行只能到主函数的Ini_Lcd,不知道程序有什么问题,已经捯饬了两周了,呜呜,请各位大侠帮帮忙,小女子感激不尽!急急急!!!!或者哪位大侠有调试成功的此类程序也可以,QQ:2511735606.邮箱:2511735606@qq.com,多谢!
#include "msp430.h"
#include "BoardConfig.h"
#include "Cry12864.h"
#define Num_of_Results 32
static unsigned int A0results[Num_of_Results]; //通道A0数据缓存
const uchar hang1[] = {" 测试通道一 "};
const uchar hang2[] = {"测电压1: 伏"};
void int_clk()
{
uchar i;
BCSCTL1 &= ~XT2OFF; //开XT2
BCSCTL2 |=SELM1 + SELS;
do
{
IFG1 &= ~OFIFG;
for(i=255;i>0;i--);
}while((IFG1&OFIFG)!=0); //等待起震
IFG1 &= ~OFIFG;
}
void Display(uint val) //液晶显示函数
{
Disp_HZ(0x80,hang1,5);
Disp_HZ(0x90,hang2,8);
Write_Cmd(0x94); //第二行
Write_Data(val/10000 + 0x30);
Write_Data((val/1000%10) + 0x30);
Write_Data(0x2e);
Write_Data((val/100%10) + 0x30);
Write_Data((val/10%10) + 0x30);
Write_Data((val%10) + 0x30);
Delay_Nms(50000); //延时5s
}
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关狗
int_clk(); //初始化时钟
Ini_Lcd(); //初始化LCD
P6SEL |= 0x01; // 使能ADC通道
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
_EINT(); //开全能中断
_NOP(); //延时一会儿
_NOP();
ADC12CTL0 |= ADC12SC; // 开始转换
LPM0;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index = 0;
A0results[index++] = ADC12MEM0; // Move results
if(index == Num_of_Results)
{
uchar i;
unsigned int sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += A0results[i];
}
sum >>= 5; //除以32
Display(sum);
}
} 展开
#include "msp430.h"
#include "BoardConfig.h"
#include "Cry12864.h"
#define Num_of_Results 32
static unsigned int A0results[Num_of_Results]; //通道A0数据缓存
const uchar hang1[] = {" 测试通道一 "};
const uchar hang2[] = {"测电压1: 伏"};
void int_clk()
{
uchar i;
BCSCTL1 &= ~XT2OFF; //开XT2
BCSCTL2 |=SELM1 + SELS;
do
{
IFG1 &= ~OFIFG;
for(i=255;i>0;i--);
}while((IFG1&OFIFG)!=0); //等待起震
IFG1 &= ~OFIFG;
}
void Display(uint val) //液晶显示函数
{
Disp_HZ(0x80,hang1,5);
Disp_HZ(0x90,hang2,8);
Write_Cmd(0x94); //第二行
Write_Data(val/10000 + 0x30);
Write_Data((val/1000%10) + 0x30);
Write_Data(0x2e);
Write_Data((val/100%10) + 0x30);
Write_Data((val/10%10) + 0x30);
Write_Data((val%10) + 0x30);
Delay_Nms(50000); //延时5s
}
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关狗
int_clk(); //初始化时钟
Ini_Lcd(); //初始化LCD
P6SEL |= 0x01; // 使能ADC通道
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
_EINT(); //开全能中断
_NOP(); //延时一会儿
_NOP();
ADC12CTL0 |= ADC12SC; // 开始转换
LPM0;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index = 0;
A0results[index++] = ADC12MEM0; // Move results
if(index == Num_of_Results)
{
uchar i;
unsigned int sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += A0results[i];
}
sum >>= 5; //除以32
Display(sum);
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询