共2条
1/1 1 跳转至页
447,LCD 看看这段关于447片内LCD代码为什么但K为3以后就不能正常显示了???不能

问
#include "MSP430x44x.h"
void initLCD( void );
void displayLCD(char *displp);
long int j;
char *LCD = LCDMEM;
char keybuf [4];
char *keylp=keybuf;
void main(void)
{
char u;
keylp = keybuf;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
SCFI0 |= FN_4; // x2 DCO frequency, 8MHz nominal DCO
SCFQCTL = 121; // (121+1) x 32768 x 2 = 7.99 Mhz
FLL_CTL0 = DCOPLUS + XCAP18PF; // set load capacitance for 32k xtal
P1DIR = 0x00; // set port to outputs
P2DIR = 0x00; // set port to outputs
P3DIR = 0x00; // set port to outputs
P4DIR = 0x00; // set port to outputs
P5DIR = 0x00; // set port to outputs
P6DIR = 0x00; // set port to outputs
P5SEL = 0xFF;
//延迟
for(j=0;j<350000;j++)
{
_NOP();
}
initLCD ();
for (u=0;u<4;u++)
{
keybuf [u]=u;
}
displayLCD(keylp);
while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////
//本函数功能为初试化片内LCD
// 依赖性:无
// 前提条件:1。片内必须有LCD
// 2。ACLK 必须是低速晶体,32,768以下,
// 参数:无
// 返回值:无
///////////////////////////////////////////////////////////////////////////////////////////
void initLCD(void )
{
char i=0;
// 初试化 LCD initialize LCD driver (static mode) //
LCDCTL = 0xA5; //static LCD, segments = 0 - 31
BTCTL = BTFRFQ1+BTFRFQ0; // BTCTL ;set fLCD = ACLK / 256 BTFRFQ1
// 清楚 LCD 存储器 clear LCD memory to clear display //
for (i=0; i<20; i++)
{
LCD[i] =0x00;
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//本函数功能为将KRYBUF中的数据读出放到LCDRAM单元
// 依赖性:无
// 前提条件:1。片内LCD必须是已经被初试化,
// 2。无
// 参数:KEYBUF 的地址指针
// 返回值:无(1字节)
///////////////////////////////////////////////////////////////////////////////////////////
void displayLCD(char *displp)
{
char h,k,i;
char digit[40] = {
0x11, 0x11, 0x11, 0x00, // "0"
0x10, 0x01, 0x00, 0x00, // "1"
0x11, 0x10, 0x01, 0x01, // "2"
0x11, 0x11, 0x00, 0x01, // "3"
0x10, 0x01, 0x10, 0x01, // "4"
0x01, 0x11, 0x10, 0x01, // "5"
0x01, 0x11, 0x11, 0x01, // "6"
0x11, 0x01, 0x00, 0x00, // "7"
0x11, 0x11, 0x11, 0x01, // "8"
0x11, 0x11, 0x10, 0x01, // "9"
};
h=0;
i=0;
k=0;
while(h<16)
{
for (i=0; i<4; i++)
{
LCD[h+i] = digit[((*(displp+k))* 4)+i]; // K等于3以后就不显示了
}
h=h+4;
k++;
}
h=0;
k=0;
}
void initLCD( void );
void displayLCD(char *displp);
long int j;
char *LCD = LCDMEM;
char keybuf [4];
char *keylp=keybuf;
void main(void)
{
char u;
keylp = keybuf;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
SCFI0 |= FN_4; // x2 DCO frequency, 8MHz nominal DCO
SCFQCTL = 121; // (121+1) x 32768 x 2 = 7.99 Mhz
FLL_CTL0 = DCOPLUS + XCAP18PF; // set load capacitance for 32k xtal
P1DIR = 0x00; // set port to outputs
P2DIR = 0x00; // set port to outputs
P3DIR = 0x00; // set port to outputs
P4DIR = 0x00; // set port to outputs
P5DIR = 0x00; // set port to outputs
P6DIR = 0x00; // set port to outputs
P5SEL = 0xFF;
//延迟
for(j=0;j<350000;j++)
{
_NOP();
}
initLCD ();
for (u=0;u<4;u++)
{
keybuf [u]=u;
}
displayLCD(keylp);
while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////
//本函数功能为初试化片内LCD
// 依赖性:无
// 前提条件:1。片内必须有LCD
// 2。ACLK 必须是低速晶体,32,768以下,
// 参数:无
// 返回值:无
///////////////////////////////////////////////////////////////////////////////////////////
void initLCD(void )
{
char i=0;
// 初试化 LCD initialize LCD driver (static mode) //
LCDCTL = 0xA5; //static LCD, segments = 0 - 31
BTCTL = BTFRFQ1+BTFRFQ0; // BTCTL ;set fLCD = ACLK / 256 BTFRFQ1
// 清楚 LCD 存储器 clear LCD memory to clear display //
for (i=0; i<20; i++)
{
LCD[i] =0x00;
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//本函数功能为将KRYBUF中的数据读出放到LCDRAM单元
// 依赖性:无
// 前提条件:1。片内LCD必须是已经被初试化,
// 2。无
// 参数:KEYBUF 的地址指针
// 返回值:无(1字节)
///////////////////////////////////////////////////////////////////////////////////////////
void displayLCD(char *displp)
{
char h,k,i;
char digit[40] = {
0x11, 0x11, 0x11, 0x00, // "0"
0x10, 0x01, 0x00, 0x00, // "1"
0x11, 0x10, 0x01, 0x01, // "2"
0x11, 0x11, 0x00, 0x01, // "3"
0x10, 0x01, 0x10, 0x01, // "4"
0x01, 0x11, 0x10, 0x01, // "5"
0x01, 0x11, 0x11, 0x01, // "6"
0x11, 0x01, 0x00, 0x00, // "7"
0x11, 0x11, 0x11, 0x01, // "8"
0x11, 0x11, 0x10, 0x01, // "9"
};
h=0;
i=0;
k=0;
while(h<16)
{
for (i=0; i<4; i++)
{
LCD[h+i] = digit[((*(displp+k))* 4)+i]; // K等于3以后就不显示了
}
h=h+4;
k++;
}
h=0;
k=0;
}
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 |