micklexqg 发表于 2010-5-12 22:58:38

在单片机中,普通的收音机或者电子表的液晶如何定义数组,即0-9

我们在做以课题,水果时钟,用430单片机来做,由于要求功耗很低,所以不能用数码管或者1602来显示,不但功耗大,而且有可能无法驱动。我先有一收音机的液晶显示器件,包括数据手册,但手册中说要加方波信号,而且还有不同弓攻击,我不知道如果是这样在单片机中如何定义数组,不知哪位高手懂得一些,指导一下,最好能详细一点,我将不胜感激,我会追加分的。如果需要这个液晶的数据手册的话,我可以发你们。

songshanxiaozi 发表于 2011-2-15 10:48:18

430单片机可以直接驱动段码液晶(仅限4XX系列)。当然,也可以用外接驱动芯片如HT1621等,很方便的。你是做时钟的,以你的条件,选一种能显示数字和少量符号的液晶就可以啦。数字可以定义为数组,符号一般是独立的。我给一个例子吧

//名称:LCD.C
//功能:测试MSP430FE42X系列的LCD接口
//日期:2011-2-11

#include "msp430xe42x.h"

typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned int uint16;
typedef signed int int16;
typedef unsigned long uint32;
typedef signed long int32;

#define a 0x01
#define b 0x02
#define c 0x10
#define d 0x04
#define e 0x80
#define f 0x20
#define g 0x08
#define h 0x40   //各段定义

//显示代码
//4MUX
const uint8 dispcode[]=
{
a+b+c+d+e+f,      //0
b+c,            //1
a+b+d+e+g,      //2
a+b+c+d+g,      //3
b+c+f+g,          //4
a+c+d+f+g,      //5
a+c+d+e+f+g,      //6
a+b+c,            //7
a+b+c+d+e+f+g,    //8
a+b+c+d+f+g,      //9
a,                //下
g,                //上
a+g,            //前置1
d,               //+
a+g+d,         //1+
};

//函数声明
void init_bt(void);    //初始化BT
void init_lcd(void);   //初始化LCD
void delay(void);      //延时


//主函数
void main(void)
{
uint8 i;
uint8 j;
uint8 *mem_addr;

init_bt();
init_lcd();
//测试

mem_addr=(unsigned char*)&LCDM1;
for(j=0;j<10;j++)
{
    for(i=0;i<7;i++)
   {
    *(mem_addr+i)=dispcode;   //循环显示0~9
   }
}

   for(i=10;i<15;i++)
   {
   *(mem_addr+7)=dispcode;
   }                           //显示前置
   
for(i=0;i<8;i++)
{
    *(mem_addr+i)=0xff;   //全亮
}

for(i=0;i<8;i++)
{
    *(mem_addr+i)=0;      //全灭
}
while(1);
}


//初始化BT
void init_bt(void)
{
__disable_interrupt();      //禁止中断

WDTCTL|=WDTPW+WDTHOLD;   //关闭看门狗
BTCTL|=BTHOLD;             //关闭BT
BTCTL=BT_fLCD_DIV256;       //256分频驱动LCD
BTCTL&=~BTHOLD;         //开BT
IE2|=BTIE;               //允许中断

__enable_interrupt();   //开中断
}

//初始化LCD
void init_lcd(void)
{
LCDCTL=LCD4MUX
         +LCDSG0_5
         +LCDON;//4MUX,S0~S31,开LCD
}

//延时
void delay(void)
{
uint32 t;

for(t=0;t<500000;t++);
}

//BT中断服务子程序
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{
;
}
这是我刚试验过的MSP430FE425驱动LCD048液晶的程序。希望有用
还有不清楚的,014.bg@163.com
页: [1]
查看完整版本: 在单片机中,普通的收音机或者电子表的液晶如何定义数组,即0-9