共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |