您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > MSP430与DS1302之1602显示
MSP430与DS1302之1602显示#include;typedefunsignedcharuchar;typedefunsignedintuint;/**************宏定义***************/#defineDataDirP4DIR#defineDataPortP4OUT#defineBusy0x80#defineCtrlDirP3DIR#defineCLR_RSP3OUT&=~BIT0;//RS=P3.0#defineSET_RSP3OUT|=BIT0;#defineCLR_RWP3OUT&=~BIT1;//RW=P3.1#defineSET_RWP3OUT|=BIT1;#defineCLR_ENP3OUT&=~BIT2;//EN=P3.2#defineSET_ENP3OUT|=BIT2;/**************宏定义***************/#defineDS_RSTBIT7//DS_RST=P2.7#defineDS_SCLBIT5//DS_SCL=P2.5#defineDS_SDABIT6//DS_SDA=P2.6#defineDS_RST_INP2DIR&=~DS_RST#defineDS_RST_OUTP2DIR|=DS_RST#defineDS_RST0P2OUT&=~DS_RST#defineDS_RST1P2OUT|=DS_RST#defineDS_SCL_INP2DIR&=~DS_SCL#defineDS_SCL_OUTP2DIR|=DS_SCL#defineDS_SCL0P2OUT&=~DS_SCL#defineDS_SCL1P2OUT|=DS_SCL#defineDS_SDA_INP2DIR&=~DS_SDA#defineDS_SDA_OUTP2DIR|=DS_SDA#defineDS_SDA0P2OUT&=~DS_SDA#defineDS_SDA1P2OUT|=DS_SDA#defineDS_SDA_BITP2IN&DS_SDAucharflag;//定义一个读标志位ucharsecond,minute,hour,week,day,month,year;//秒、分、时、星期、日、月、年/*******************************************函数名称:delay功能:延时一段时间参数:time--延时长度********************************************/voiddelay(uinttime){uinti;for(i=0;i;0;i--){if(wdata&0x01)DS_SDA1;elseDS_SDA0;DS_SCL0;delay(10);DS_SCL1;delay(10);wdata;;=1;}}/*******************************************函数名称:Read1Byte功能:从DS1302读出1个字节的数据********************************************/ucharRead_Byte(){uchari;ucharrdata=0X00;DS_SDA_IN;//SDA对应的IO设置为输入状态DS_RST1;//REST=1;for(i=8;i;0;i--){DS_SCL1;delay(10);DS_SCL0;delay(10);rdata;;=1;if(DS_SDA_BIT)rdata|=0x80;}return(rdata);}/*******************************************函数名称:Write_dat功能:向某个寄存器写入一个字节数据参数:add--寄存器地址dat--写入的数据********************************************/voidWrite_dat(ucharadd,uchardat){DS_RST0;DS_SCL0;_NOP();DS_RST1;Write_Byte(add);//写入地址Write_Byte(dat);//写入数据DS_SCL1;DS_RST0;}/*******************************************函数名称:Read_dat功能:从某个寄存器读出一个字节数据参数:addr--寄存器地址返回值:读出的数据********************************************/ucharread_1302add(ucharadd){ucharrdata;DS_RST0;DS_SCL0;_NOP();DS_RST1;Write_Byte(add);//写入地址rdata=Read_Byte();//读出数据DS_SCL1;DS_RST0;return(rdata);}/***********初始化1302*************/voidinit_1302(){flag=read_1302add(0x81);//读秒寄存器最高位,读出时钟状态if(flag&0x80);//判断时钟是否关闭,若内部关闭,则初始化,否则继续走{Write_dat(0x8e,0x00);Write_dat(0x80,((55/10);;4)*10+(dat&0x0f);returnsecond;}/*****************读出分的十进制数***************************/ucharreadminute(){uchardat;dat=read_1302add(0x83);minute=((dat&0x70);;4)*10+(dat&0x0f);returnminute;}/*****************读出小时的十进制数***************************/ucharreadhour(){uchardat;dat=read_1302add(0x85);hour=((dat&0x70);;4)*10+(dat&0x0f);returnhour;}/*****************读出天的十进制数***************************/ucharreadday(){uchardat;dat=read_1302add(0x87);day=((dat&0x70);;4)*10+(dat&0x0f);returnday;}/*****************读出月的十进制数***************************/ucharreadmonth(){uchardat;dat=read_1302add(0x89);month=((dat&0x70);;4)*10+(dat&0x0f);returnmonth;}/*****************读出周的十进制数***************************/ucharreadweek(){uchardat;dat=read_1302add(0x8b);week=((dat&0x70);;4)*10+(dat&0x0f);returnweek;}/*****************读出年的十进制数***************************/ucharreadyear(){uchardat;dat=read_1302add(0x8d);year=((dat&0xf0);;4)*10+(dat&0x0f);returnyear;}/************************读出所有时间**********************/voidreadtime(){readsecond();readminute();readhour();readday();readmonth();readweek();readyear();}/*********************向1602写入时间****************************/voidwrite_second(){ucharshi,ge;shi=second/10;ge=second%10;Write1602(0x80+0x40+9,0x30+shi);Write1602(0x80+0x40+10,0x30+ge);}voidwrite_minute(){ucharshi,ge;shi=minute/10;ge=minute%10;Write1602(0x80+0x40+6,0x30+shi);Write1602(0x80+0x40+7,0x30+ge);}voidwrite_hour(){ucharshi,ge;shi=hour/10;ge=hour%10;Write1602(0x80+0x40+3,0x30+shi);Write1602(0x80+0x40+4,0x30+ge);}voidwrite_day(){ucharshi,ge;shi=day/10;ge=day%10;Write1602(0x80+8,0x30+shi);Write1602(0x80+9,0x30+ge);}voidwrite_month(){ucharshi,ge;shi=month/10;ge=month%10;Write1602(0x80+5,0x30+shi);Write1602(0x80+6,0x30+ge);}voidwrite_year(){ucharshi,ge;shi=year/10;ge=year%10;Write1602(0x80+2,0x30+shi);Write1602(0x80+3,0x30+ge);}voidwrite_week(){Write1602(0x80+12,0x30+week);//ucharweek;switch(week){case1:Write1602(0x80+12,'M');Write1602(0x80+13,'O');Write1602(0x80+14,'N');break;case2:Write1602(0x80+12,'T');Write1602(0x80+13,'U');Write1602(0x80+14,'E');break;case3:Write1602(0x80+12,'W');Write1602(0x80+13,'E');Write1602(0x80+14,'N');break;case4:Write1602(0x80+12,'T');Write1602(0x80+13,'H');Write1602(0x80+14,'U');break;case5:Write1602(0x80+12,'F');Write1602(0x80+13,'R');Write1602(0x80+14,'I');break;case6:Write1602(0x80+12,'S');Write1602(0x80+13,'A');Write1602(0x80+14,'T');break;case7:Write1602(0x80+12,'S');Write1602(0x80+13,'U');Write1602(0x80+14,'N');break;}}/*************************主函数*************************/voidmain(void){/*下面六行程序关闭所有的IO口*/P1DIR=0XFF;P1OUT=0XFF;P2DIR=0XFF;P2OUT=0XFF;P3DIR=0XFF;P3OUT=0XFF;P4DIR=0XFF;P4OUT=0XFF;P5DIR=0XFF;P5OUT=0XFF;P6DIR=0XFF;P6OUT=0XFF;WDTCTL=WDTPW+WDTHOLD;//关狗LcdReset();//zifuchuan("Thetimeis:&qu
本文标题:MSP430与DS1302之1602显示
链接地址:https://www.777doc.com/doc-4708765 .html