MSP430驱动段式液晶,液晶是4位8,4COM口常用液晶

2025-01-02 03:50:14
推荐回答(2个)
回答1:

使用ht1621等系列 多不了几毛钱还有现成的驱动可以用功耗也低等等
ht1621驱动如下
#include
#include"ht1621.h"

void Delay(void)
{
_NOP();
}

/*****发送命令函数发送HT1621 命令时要先发送ID 值,及命令字用于设置HT1621******/
void SENDCOMA(uchar com)
{
P2OUT&=~BIT2;//CS=0;
Delay();
Ht1621Wr_Data(0X80,3); /*发送设置命令ID=100 0*/
Ht1621Wr_Data(com,9); /*发送命令字*/
P2OUT&=~BIT4;//WR=0;
Delay();
P2OUT|=BIT4;
P2OUT|=BIT2;
Delay();

}
/**************把指定的数字BCD码写到Ht1621指定的地址单元*********************/
void Write_Number(uchar number,uchar *num, uchar Adr)
{
P2OUT&=~BIT2;//CS=0;
Delay();
Ht1621Wr_Data(0XA0,3); /*发送写显示RAM 命令ID=101 */
Ht1621Wr_Data(Adr<<2,6); /*指定写入地址*/
Ht1621Wr_Data(*(num+(number&=0x0f)),8);//写入数据
P2OUT|=BIT2;
Delay();

}
/**************把指定的数字写到Ht1621指定的地址单元*********************/
void Write_Number1(uchar number,uchar *num, uchar Adr)
{
P2OUT&=~BIT2;//CS=0;
Delay();
Ht1621Wr_Data(0XA0,3); /*发送写显示RAM 命令ID=101 */
Ht1621Wr_Data(Adr<<2,6); /*指定写入地址*/
Ht1621Wr_Data(*(num+number),8);//写入数据
P2OUT|=BIT2;
Delay();

}

/*************把指定的8-Bit数据的8位写到Ht1621指定的地址单元**************/
void Write_Data(uchar dat, uchar Adr)
{
P2OUT&=~BIT2;//CS=0;
Delay();
Ht1621Wr_Data(0XA0,3); /*发送写显示RAM 命令ID=101 */
Ht1621Wr_Data(Adr<<2,6); /*指定写入地址*/
Ht1621Wr_Data(dat,8);//写入数据
P2OUT|=BIT2;
Delay();

}
/*********把指定的8-Bit数据的gao四位写到Ht1621指定的地址单元************/
void Ht1621Wr_Data_4(uchar dat, uchar Adr)
{ P2OUT&=~BIT2;//CS=0;
Delay();
Ht1621Wr_Data(0XA0,3); /*发送写显示RAM 命令ID=101 */
Ht1621Wr_Data(Adr<<2,6); /*指定写入地址*/
Ht1621Wr_Data(dat,4);//写入数据
P2OUT|=BIT2;
Delay();

}

/*******Ht1621写数据函数,可以指定地址,指定字节数******/
void Ht1621Wr_AllData(uchar Addr,uchar *p,uchar cnt)
{ uchar i;
P2OUT&=~BIT2;//CS=0;
Ht1621Wr_Data(0XA0,3); /*发送写显示RAM 命令ID=101 */
Ht1621Wr_Data(Addr<<2,6); /*指定写入地址*/
for (i=0;i {
Ht1621Wr_Data(*p,8); //写入数据
p++;
}
P2OUT|=BIT2;
Delay();
}

/***************初始化*************************/
void Init_1621(void)
{
P2OUT|=BIT2;
P2OUT|=BIT4;
P2OUT|=BIT5;
Delay();
SENDCOMA(SYSEN); /*启动振荡器*/
SENDCOMA(LCDON); /*显示使能*/
SENDCOMA(RC256); /*设为内晶振256K*/
SENDCOMA(BIAS); /*设置偏压,背极数*/
SENDCOMA(BIAS); /*设置偏压,背极数*/
Delay();
}
void close_1621(void)
{
SENDCOMA(LCDOFF); /*显示*/
SENDCOMA(TIMERDIS); /*关闭时基输出*/
SENDCOMA(SYSDIS); /*振荡器*/
}

/************发送*********************/
void Ht1621Wr_Data(uchar Data,uchar cnt)//Ht1621写数据子函数
{
uchar i;
for (i=0;i {
if (Data&0x80)
P2OUT|=BIT5;
else P2OUT&=~BIT5;

P2OUT&=~BIT4; //WR = 0;
Delay();
P2OUT|=BIT4; //WR = 1;
Delay();
Data<<=1;

}

}
//--------------------------------------------------------------
//--------------------------------------------------------------
//--------------------------------------------------------------
"ht1621.h"
#define uchar unsigned char
#define uint unsigned int
#define BIAS 0X29 /* 偏压 4个com 背极 28 1/2 29 1/3*/
#define RC256 0X18 /*使用内部256KRC 振荡器*/
#define SYSEN 0X01 /*打开振荡发生器*/
#define LCDON 0X03 /*打开LCD*/
#define SYSDIS 0X00 /*关闭振荡发生器*/
#define LCDOFF 0X02 /*显示关闭*/
#define TIMERDIS 0X04 /*关闭时基输出*/
#define TNORMAL 0XE3 //设置为普通模式

void Init_1621(void);
void Delay(void);
void close_1621(void);
void SENDCOMA(uchar com);
void Write_Number(uchar number,uchar *num, uchar Adr);//BCD时间专用
void Write_Data(uchar dat, uchar Adr);
void Write_Data_4(uchar dat, uchar Adr);

void Ht1621Wr_AllData(uchar Addr,uchar *p,uchar cnt);

void Ht1621Wr_Data(uchar Data,uchar cnt);
void Ht1621Wr_Data_4(uchar dat, uchar Adr);
void Write_Number1(uchar number,uchar *num, uchar Adr);

回答2:

这个很简单的,楼主可以参考一下百度文库的资料 ,上面很全。