您的位置 首页 嵌入式

MSP430与DS1302之1602显现

includemsp430x14xh>typedefunsignedcharuchar;typedefunsignedintuint;**************宏定义*************

#include

typedef unsigned char uchar;
typedef unsigned int uint;
/**************宏界说***************/
#define DataDir P4DIR
#define DataPort P4OUT
#define Busy 0x80
#define CtrlDir P3DIR
#define CLR_RS P3OUT&=~BIT0; //RS = P3.0
#define SET_RS P3OUT|=BIT0;
#define CLR_RW P3OUT&=~BIT1; //RW = P3.1
#define SET_RW P3OUT|=BIT1;
#define CLR_EN P3OUT&=~BIT2; //EN = P3.2
#define SET_EN P3OUT|=BIT2;

/**************宏界说***************/
#define DS_RST BIT7 //DS_RST = P2.7
#define DS_SCL BIT5 //DS_SCL = P2.5
#define DS_SDA BIT6 //DS_SDA = P2.6
#define DS_RST_IN P2DIR &= ~DS_RST
#define DS_RST_OUT P2DIR |= DS_RST
#define DS_RST0 P2OUT &= ~DS_RST
#define DS_RST1 P2OUT |= DS_RST
#define DS_SCL_IN P2DIR &= ~DS_SCL
#define DS_SCL_OUT P2DIR |= DS_SCL
#define DS_SCL0 P2OUT &= ~DS_SCL
#define DS_SCL1 P2OUT |= DS_SCL
#define DS_SDA_IN P2DIR &= ~DS_SDA
#define DS_SDA_OUT P2DIR |= DS_SDA
#define DS_SDA0 P2OUT &= ~DS_SDA
#define DS_SDA1 P2OUT |= DS_SDA
#define DS_SDA_BIT P2IN & DS_SDA
ucharflag;//界说一个读标志位
uchar second,minute,hour,week,day,month,year;//秒、分、时、星期、日、月、年
/*******************************************
函数称号:delay
功 能:延时一段时间
参 数:time–延时长度
********************************************/
void delay(uint time)
{
uint i;
for(i = 0;i < time;i++) _NOP();
}
/*******************************************
函数称号:Delay5ms 功 能:延时约5ms
********************************************/
void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i–;
}
}
/*******************************************
函数称号:WaitForEnable
功 能:等候1602液晶完结内部操作
********************************************/
void WaitForEnable(void)
{
P4DIR &= 0x00; //将P4口切换为输入状况
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();

while((P4IN & Busy)!=0); //检测忙标志
CLR_EN;
P4DIR |= 0xFF; //将P4口切换为输出状况
}
/*******************************************
函数称号:write_com
功 能:向液晶模块写入指令
********************************************/
void write_com(uchar cmd)
{
WaitForEnable(); // 检测忙信号?

CLR_RS;
CLR_RW;
_NOP();
DataPort = cmd; //将指令字写入数据端口
_NOP();

SET_EN; //发生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}

/*******************************************
函数称号:write_data
功 能:向液晶显现的当时地址写入显现数据
参 数:data–显现字符数据
返回值 :无
********************************************/
void write_data( uchar data )
{
WaitForEnable(); //等候液晶不忙
SET_RS;
CLR_RW;
_NOP();
DataPort = data; //将显现数据写入数据端口
_NOP();
SET_EN; //发生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}
void Write1602(uchar add,uchar dat)
{
write_com(add);
write_data(dat);
}

void zifuchuan(uchar *ch)
{
while(*ch!=0)
write_data(*ch++);
Delay5ms();
}

/*******************************************
函数称号:LcdReset
功 能:对1602液晶模块进行复位操作
********************************************/
void LcdReset(void)
{
CtrlDir |= 0x07; //控制线端口设为输出状况
DataDir = 0xFF; //数据端口设为输出状况

write_com(0x38);//规则的复位操作
Delay5ms();
write_com(0x38);
Delay5ms();
write_com(0x38);
Delay5ms();
write_com(0x38);//显现形式设置
write_com(0x06);//写字符时全体不移动
write_com(0x0c);//显现开,不开游标,不闪耀
write_com(0x01);//显现清屏

Write1602(0x80,2);
Write1602(0x81,0);
Write1602(0x80+4,-);
Write1602(0x80+7,-);
Write1602(0x80+0x40+5,:);
Write1602(0x80+0x40+8,:);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/254072.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部