|
发表于 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[j]; //循环显示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 |
|