我用430单片机控制串口发送数据,然后显示到12864的液晶屏上
我用430单片机控制串口发送数据,然后显示到12864的液晶屏上,但是比如我用串口助手发送1234吧,液晶屏上只能显示最后一个字符4,之前的都不显示,不知道什么原因,谁能...
我用430单片机控制串口发送数据,然后显示到12864的液晶屏上,但是比如我用串口助手发送1234吧,液晶屏上只能显示最后一个字符4,之前的都不显示,不知道什么原因,谁能帮我解答解答,非常感谢
/******************************************************
程序功能:PC通过串口调试精灵向MCU发送数据,MCU将其在12864
液晶上显示
-------------------------------------------------------
通信格式:N.8.1, 9600
------------------------------------------------------
测试说明:打开串口调试助手,正确设置通信格式,向从PC机上
向学习板发送数据,观察液晶上显示的字符。
******************************************************/
#include <msp430x14x.h>
#include <LCD_HB12864M2A.h>
void InitUART(void);
void PutString(uchar *ptr);
/***************主函数************/
void main( void )
{
uchar pX=0,pY=0;
uchar *tishi = "Send data to MCU, and they will be displayed on HB12864M2A.";
WDTCTL = WDTPW + WDTHOLD; //关狗
InitUART(); //初始化UART
Delay1MS(600);
PortInit(); //IO口初始化
Delay1MS(800); //等待LCM内部初始化
ResetToLcm(); //对LCM复位
Delay1MS(800); //复位后还得等待LCM内部初始化
//Back_Toggle();//打开背光
PutString(tishi);
// _EINT(); //打开全局中断
for (;;)
{
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interrupt
while (IFG2 & URXIFG1); // USART1 TX buffer ready?
Ascii_6x12(pX++,pY,RXBUF1); // RXBUF1 to TXBUF1
}
}
/*******************************************
函数名称:PutSting
功 能:向PC机发送字符串
参 数:ptr--指向发送字符串的指针
返回值 :无
********************************************/
void PutString(uchar *ptr)
{
while(*ptr != '\0')
{
while (!(IFG2 & UTXIFG1)); // TX缓存空闲?
TXBUF1 = *ptr++; // 发送数据
}
while (!(IFG2 & UTXIFG1));
TXBUF1 = '\n';
}
/*******************************************
函数名称:InitUART
功 能:初始化UART端口
参 数:无
返回值 :无
********************************************/
void InitUART(void)
{
P3SEL |= 0xc0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 32k/9600 - 3.41
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE1; // 使能USART0的收发中断
}
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
} 展开
/******************************************************
程序功能:PC通过串口调试精灵向MCU发送数据,MCU将其在12864
液晶上显示
-------------------------------------------------------
通信格式:N.8.1, 9600
------------------------------------------------------
测试说明:打开串口调试助手,正确设置通信格式,向从PC机上
向学习板发送数据,观察液晶上显示的字符。
******************************************************/
#include <msp430x14x.h>
#include <LCD_HB12864M2A.h>
void InitUART(void);
void PutString(uchar *ptr);
/***************主函数************/
void main( void )
{
uchar pX=0,pY=0;
uchar *tishi = "Send data to MCU, and they will be displayed on HB12864M2A.";
WDTCTL = WDTPW + WDTHOLD; //关狗
InitUART(); //初始化UART
Delay1MS(600);
PortInit(); //IO口初始化
Delay1MS(800); //等待LCM内部初始化
ResetToLcm(); //对LCM复位
Delay1MS(800); //复位后还得等待LCM内部初始化
//Back_Toggle();//打开背光
PutString(tishi);
// _EINT(); //打开全局中断
for (;;)
{
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/interrupt
while (IFG2 & URXIFG1); // USART1 TX buffer ready?
Ascii_6x12(pX++,pY,RXBUF1); // RXBUF1 to TXBUF1
}
}
/*******************************************
函数名称:PutSting
功 能:向PC机发送字符串
参 数:ptr--指向发送字符串的指针
返回值 :无
********************************************/
void PutString(uchar *ptr)
{
while(*ptr != '\0')
{
while (!(IFG2 & UTXIFG1)); // TX缓存空闲?
TXBUF1 = *ptr++; // 发送数据
}
while (!(IFG2 & UTXIFG1));
TXBUF1 = '\n';
}
/*******************************************
函数名称:InitUART
功 能:初始化UART端口
参 数:无
返回值 :无
********************************************/
void InitUART(void)
{
P3SEL |= 0xc0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 32k/9600 - 3.41
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE1; // 使能USART0的收发中断
}
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
} 展开
2个回答
展开全部
我没有跑你的程序,但你需要从两方面找原因一,UART是否工作正常,就是先看看能不能正确发送和接受。二,看看显示有没有问题是不是出现了覆盖等问题。解决第一个我想你应该会的,把PC发的数据接受后保存在一个数组在,观察数组元素的值,看看能不能正确接收。如果接收正确,就是显示程序的问题,再去调显示程序。我感觉是显示部分出现了覆盖问题,你可以逐步试一下。
追问
我试过把接收缓存器里的值付给了一个数组,可是数组里的值就是最后一个数4,之前的都没有,应该怎样改呀,我是刚开始学,不知道怎么弄
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
提供一个电子技术导航网站给我们这些电子技术同行们吧:电子世家导航网站,它里面分类收录了很多优秀的电子技术网站,在其所收录的那些网站论坛里面就有很多大侠分享资料的。这个电子技术导航网站挺不错的,希望对电子技术同行们有帮助啦!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询