日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
DS1302C51源代碼
DS1302C51源代碼
 更新時(shí)間:2009-7-9 16:54:58  點(diǎn)擊數(shù):0
【字體: 字體顏色

#include
#include

#define mcuport2 P2
#define mcuport1 P1

unsigned char pd;
/*********************************************************************/
sbit T_CLK="P0"^7; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */
sbit T_IO="P0"^6; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */
sbit T_RST="P0"^5; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
//lcd引腳聲明
/**************************************************/
sbit rs="P0"^0;
sbit rw="P0"^1;
sbit e="P0"^3;
/********************************************************************
*
* 名稱: v_RTInputByte
* 說明:
* 功能: 往DS1302寫入1Byte數(shù)據(jù)
* 調(diào)用:
* 輸入: ucDa 寫入的數(shù)據(jù)
* 返回值: 無
***********************************************************************/
void v_RTInputByte(unsigned char ucDa)
{
unsigned char i;
ACC = ucDa;
for(i="8"; i>0; i--)
{
T_IO = ACC0; /*相當(dāng)于匯編中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
/********************************************************************
*
* 名稱: uchar uc_RTOutputByte
* 說明:
* 功能: 從DS1302讀取1Byte數(shù)據(jù)
* 調(diào)用:
* 輸入:
* 返回值: ACC
***********************************************************************/
unsigned char uc_RTOutputByte(void)
{
unsigned char i;
for(i="8"; i>0; i--)
{
ACC = ACC >>1; /*相當(dāng)于匯編中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
*
* 名稱: v_W1302
* 說明: 先寫地址,后寫命令/數(shù)據(jù)
* 功能: 往DS1302寫入數(shù)據(jù)
* 調(diào)用: v_RTInputByte()
* 輸入: ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)
* 返回值: 無
***********************************************************************/
void v_W1302(unsigned char ucAddr, unsigned char ucDa)
{

 T_RST = 0;
 T_CLK = 0;
 T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
v_RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名稱: uc_R1302
* 說明: 先寫地址,后讀命令/數(shù)據(jù)
* 功能: 讀取DS1302某地址的數(shù)據(jù)
* 調(diào)用: v_RTInputByte() , uc_RTOutputByte()
* 輸入: ucAddr: DS1302地址
* 返回值: ucDa :讀取的數(shù)據(jù)
***********************************************************************/
unsigned char uc_R1302(unsigned char ucAddr)
{
unsigned char ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(ucAddr); /* 地址,命令 */
ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
T_CLK = 1;
T_RST =0;

return(ucDa);
}


/********************************************************************
*
* 名稱: v_BurstW1302T
* 說明: 先寫地址,后寫數(shù)據(jù)(時(shí)鐘多字節(jié)方式)
* 功能: 往DS1302寫入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)
* 調(diào)用: v_RTInputByte()
* 輸入: pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 控制
* 8Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無
***********************************************************************/
void v_BurstW1302T(unsigned char *pSecDa)
{
unsigned char i;
v_W1302(0x8e,0x00); /* 控制命令,WP="0",寫操作?*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbe); /* 0xbe:時(shí)鐘多字節(jié)寫命令 */
for (i="8";i>0;i--) /*8Byte = 7Byte 時(shí)鐘數(shù)據(jù) + 1Byte 控制*/
{
v_RTInputByte(*pSecDa);/* 寫1Byte數(shù)據(jù)*/
pSecDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名稱: v_BurstR1302T
* 說明: 先寫地址,后讀命令/數(shù)據(jù)(時(shí)鐘多字節(jié)方式)
* 功能: 讀取DS1302時(shí)鐘數(shù)據(jù)
* 調(diào)用: v_RTInputByte() , uc_RTOutputByte()
* 輸入: pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: ucDa :讀取的數(shù)據(jù)
***********************************************************************/
void v_BurstR1302T(unsigned char *pSecDa)
{
unsigned char i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbf); /* 0xbf:時(shí)鐘多字節(jié)讀命令 */
for (i="8"; i>0; i--)
{
*pSecDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
pSecDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名稱: v_BurstW1302R
* 說明: 先寫地址,后寫數(shù)據(jù)(寄存器多字節(jié)方式)
* 功能: 往DS1302寄存器數(shù)寫入數(shù)據(jù)(多字節(jié)方式)
* 調(diào)用: v_RTInputByte()
* 輸入: pReDa: 寄存器數(shù)據(jù)地址
* 返回值: 無
***********************************************************************/
void v_BurstW1302R(unsigned char *pReDa)
{
unsigned char i;
v_W1302(0x8e,0x00); /* 控制命令,WP="0",寫操作?*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xfe); /* 0xbe:時(shí)鐘多字節(jié)寫命令 */
for (i="31";i>0;i--) /*31Byte 寄存器數(shù)據(jù) */
{
v_RTInputByte(*pReDa); /* 寫1Byte數(shù)據(jù)*/
pReDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名稱: uc_BurstR1302R
* 說明: 先寫地址,后讀命令/數(shù)據(jù)(寄存器多字節(jié)方式)
* 功能: 讀取DS1302寄存器數(shù)據(jù)
* 調(diào)用: v_RTInputByte() , uc_RTOutputByte()
* 輸入: pReDa: 寄存器數(shù)據(jù)地址
* 返回值: 無
***********************************************************************/
void v_BurstR1302R(unsigned char *pReDa)
{
unsigned char i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xff); /* 0xbf:時(shí)鐘多字節(jié)讀命令 */
for (i="31"; i>0; i--) /*31Byte 寄存器數(shù)據(jù) */
{
*pReDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */
pReDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名稱: v_Set1302
* 說明:
* 功能: 設(shè)置初始時(shí)間
* 調(diào)用: v_W1302()
* 輸入: pSecDa: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無
***********************************************************************/
void v_Set1302(unsigned char *pSecDa)
{
unsigned char i;

unsigned char ucAddr = 0x80;
v_W1302(0x8e,0x00); /* 控制命令,WP="0",寫操作?*/
for(i =7;i>0;i--)
{
v_W1302(ucAddr,*pSecDa); /* 秒 分 時(shí) 日 月 星期 年 */

pSecDa++;
ucAddr +=2;
}
v_W1302(0x8e,0x80); /* 控制命令,WP="1",寫保護(hù)?*/
}
/********************************************************************
*
* 名稱: v_Get1302
* 說明:
* 功能: 讀取DS1302當(dāng)前時(shí)間
* 調(diào)用: uc_R1302()
* 輸入: ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年
* 7Byte (BCD碼) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 無
***********************************************************************/
void v_Get1302(unsigned char  ucCurtime[])
{
unsigned char i;
unsigned char ucAddr = 0x81;
for (i="0";i<7;i++)
{
ucCurtime[i] = uc_R1302(ucAddr);/*格式為: 秒 分 時(shí) 日 月
星期 年 */
ucAddr += 2;
}
}
/********************************************************************************/
//lcd寫命令使能
/********************************************************************************/
void enable(void)
{
  unsigned char j,k;
 
  rs="0";
  rw="0";
  _nop_();
  e="0";
  for(k="10";k>0;k--)
  for(j="245";j>0;j--);
  e="1";
                 
}


/*******************************************************************************/
//lcd寫數(shù)據(jù)使能
/*******************************************************************************/
void writer(void)
 {
      unsigned char j,k;
     
      rs="1";
      rw="0";
      _nop_();
      e="0";
      for(k="10";k>0;k--)
      for(j="245";j>0;j--);
      e="1";
   
    
  }

/******************************************************************************/
//初始化
/******************************************************************************/
void start(void)
{
   mcuport2=0x01;   //
   enable();
   mcuport2=0x01;   //
   enable(); 
   mcuport2=0x38;
   enable();
   mcuport2=0x0f;
   enable();
   mcuport2=0x06;
   enable();
   }
/***************************************************************************
延時(shí)40MS
****************************************************************************/
void delay40ms(void)
{
  unsigned char i,j;
  for(i="40";i>0;i--)
  for(j="248";j>0;j--);
}

/***************************************************************************/
unsigned char  key4x4()
{

     unsigned char temp;
     unsigned char key,keydata;
    
keydata="0xff";   
while(keydata==0xff)
  {
     keydata="0xff";
      mcuport1=0xff;
      mcuport1=mcuport1&0xef;
      temp="mcuport1";
      temp="temp"&0x0f;
      if (temp!=0x0f)
        {
          delay40ms();
          temp="mcuport1";
          temp="temp"&0x0f;
          if (temp!=0x0f)
            {
              temp="mcuport1";
              temp="temp"&0x0f;            
              switch(temp)
                {
                  case 0x0e:
                   key="0";
                    break;
                  case 0x0d:
                    key="1";
                    break;
                  case 0x0b:
                   key="2";
                    break;
                  case 0x07:
                    key="3";
                    break;
                }
                keydata="key";
               
             

            }

        }

      mcuport1=0xff;
      mcuport1=mcuport1&0xdf;
      temp="mcuport1";
      temp="temp"&0x0f;
      if (temp!=0x0f)
        {
          delay40ms();
          temp="mcuport1";
          temp="temp"&0x0f;
          if (temp!=0x0f)
            {
              temp="mcuport1";
              temp="temp"&0x0f;            
              switch(temp)
                {
                  case 0x0e:
                    key="4";
                    break;
                  case 0x0d:
                    key="5";
                    break;
                  case 0x0b:
                    key="6";
                    break;
                  case 0x07:
                    key="7";
                    break;
                }
                keydata="key";

             

            }

        }

      mcuport1=0xff;
      mcuport1=mcuport1&0xbf;
      temp="mcuport1";
      temp="temp"&0x0f;
      if (temp!=0x0f)
        {
          delay40ms();
          temp="P3";
         temp="temp"&0x0f;
          if (temp!=0x0f)
            {
              temp="mcuport1";
              temp="temp"&0x0f;            
              switch(temp)
                {
                  case 0x0e:
                    key="8";
                    break;
                  case 0x0d:
                    key="9";
                    break;
                  case 0x0b:
                    key="10";
                    break;
                  case 0x07:
                    key="11";
                    break;
                }
                keydata="key";

            

            }

        }

      mcuport1=0xff;
      mcuport1=mcuport1&0x7f;
      temp="mcuport1";
      temp="temp"&0x0f;
      if (temp!=0x0f)
        {
          delay40ms();
          temp="mcuport1";
          temp="temp"&0x0f;
          if (temp!=0x0f)
            {
              temp="mcuport1";
              temp="temp"&0x0f;            
              switch(temp)
                {
                  case 0x0e:
                    key="12";
                    break;
                  case 0x0d:
                    key="13";
                    break;
                  case 0x0b:
                    key="14";
                    break;
                  case 0x07:
                    key="15";
                    break;
                }
                keydata="key";          
            }
        }
 
    
}
  
return(keydata);
}
void main(void)
{
  unsigned char  modify[]={0x8a,0x8b,0x8d,0x8e,0xc5,0xc6,0xc8,0xc9,0xcb,0xcc};
  unsigned char   ts1302[]={0x00,0x00,0x00,0x18,0x07,0x03,0x05};//初始話碼表
  unsigned char  table[]={'0','1','2','3','4','5','6','7','8','9'};//數(shù)字ASCII碼表
  unsigned char  get1302[7];
  unsigned char  appear[]={'D','A','T','A',':','2','0','0','0','/','0','0',
                           '/','0','0','!','T','I','M','E',':','0','0','/','0','0','/',
                           '0','0'};   //顯示碼表
  unsigned char data i,j;
  char data n;
  unsigned char data ii,ts,keydata1;                        //循環(huán)顯示計(jì)數(shù)值
 
  EA="1";
  EX0=1;
  v_Set1302(&ts1302[0]);
  start();
 while(1)
{
  mcuport1=0x7f;
  if(pd==1)
   {
   
     keydata1=0x00;
     EA="0";
     while(keydata1!=15)
      {
       
        keydata1=key4x4();
        switch(keydata1)
         {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:  switch(ii)                                          //檢測(cè)到1-9,執(zhí)行相同的命令
                      {
                        case 0:  if(keydata1<2)                           //對(duì)月份的高位進(jìn)行修改
                                 {
                                   mcuport2=modify[ii];enable();
                                   mcuport2=table[keydata1];writer();
                                   ts1302[4]=(ts1302[4]&0x0f)+(keydata1*16);
                                   v_Set1302(&ts1302[0]);
                                   mcuport2=modify[ii];enable();
                                  }
                                 break;
                        case 1:ts=(ts1302[4]&0xf0)+keydata1;              //對(duì)月份的低位進(jìn)行修改
                               if(ts<0x13)
                                  {
                                    mcuport2=modify[ii];enable();
                                    mcuport2=table[keydata1];writer();
                                    ts1302[4]=ts;
                                    v_Set1302(&ts1302[0]);
                                    mcuport2=modify[ii];enable();
                                   }
                                break;                                  
                        case 2:                                           //對(duì)日的高位進(jìn)行修改
                                if(keydata1<4)
                                 {
                                   mcuport2=modify[ii];enable();
                                   mcuport2=table[keydata1];writer();
                                   ts1302[3]=(ts1302[3]&0x0f)+(keydata1*16);
                                   v_Set1302(&ts1302[0]);
                                   mcuport2=modify[ii];enable();
                                 }
                                 break;
                        case 3:ts=(ts1302[3]&0xf0)+keydata1;                //對(duì)日的低位進(jìn)行修改
                               if(ts<0x32)
                                  {
                                    mcuport2=modify[ii];enable();
                                    mcuport2=table[keydata1];writer();
                                    ts1302[3]=ts;
                                    v_Set1302(&ts1302[0]);
                                    mcuport2=modify[ii];enable();
                                   }
                                break;    
                        case 4:                                            //對(duì)小時(shí)的高位進(jìn)行修改
                                if(keydata1<3)
                                 {
                                   mcuport2=modify[ii];enable();
                                   mcuport2=table[keydata1];writer();
                                   ts1302[2]=(ts1302[2]&0x0f)+(keydata1*16);
                                   v_Set1302(&ts1302[0]);
                                   mcuport2=modify[ii];enable();
                                 }
                                 break;
                        case 5:ts=(ts1302[2]&0xf0)+keydata1;                  //對(duì)小時(shí)的低位進(jìn)行修改
                               if(ts<0x25)
                                  {
                                    mcuport2=modify[ii];enable();
                                    mcuport2=table[keydata1];writer();
                                   
                                    ts1302[2]=ts;
                                    v_Set1302(&ts1302[0]);
                                    mcuport2=modify[ii];enable();
                                   }
                                break;    
                        case 6:if(keydata1<7)                                 //對(duì)分的高位進(jìn)行修改
                                 {
                                   mcuport2=modify[ii];enable();
                                   mcuport2=table[keydata1];writer();
                                   ts1302[1]=(ts1302[1]&0x0f)+(keydata1*16);
                                   v_Set1302(&ts1302[0]);
                                   mcuport2=modify[ii];enable();
                                 }
                                 break;
                        case 7:ts=(ts1302[1]&0xf0)+keydata1;                  //對(duì)分的低位進(jìn)行修改
                               if(ts<0x61)
                                  {
                                    mcuport2=modify[ii];enable();
                                    mcuport2=table[keydata1];writer();
                                    ts1302[1]=ts;
                                    v_Set1302(&ts1302[0]);
                                    mcuport2=modify[ii];enable();
                                   }
                                break; 
                        case 8:if(keydata1<7)                                  //對(duì)秒的高位進(jìn)行修改
                                 {
                                   mcuport2=modify[ii];enable();
                                   mcuport2=table[keydata1];writer();
                                   ts1302[0]=(ts1302[0]&0x0f)+(keydata1*16);
                                   v_Set1302(&ts1302[0]);
                                   mcuport2=modify[ii];enable();
                                 }
                                 break;
                        case 9:ts=(ts1302[0]&0xf0)+keydata1;                   //對(duì)秒的低位進(jìn)行修改
                               if(ts<0x61)
                                  {
                                    mcuport2=modify[ii];enable();
                                    mcuport2=table[keydata1];writer();
                                    ts1302[0]=ts;
                                    v_Set1302(&ts1302[0]);
                                    mcuport2=modify[ii];enable();
                                   }
                                break; 
                                             
                        }
                     break;
            case 14: mcuport1=0x7f;
                     while(mcuport1!=0x7f);
                     
                     ii="ii"+1;
                     if(ii>9){ii="0";}mcuport2=modify[ii];enable();break;
            case 13: mcuport1=0x7f;
                     while(mcuport1!=0x7f);
                     ii="ii"-1;
                     if(ii>9){ii="9";}
                     mcuport2=modify[ii];
                     enable();
                     break;
            case 10: case 11: case 12:
            case 15: mcuport1=0x7f;
                     while(mcuport1!=0x7f);
                     break;
            //default: exit(0);
         }
       }
      
       EA="1";
       EX0=1;
       pd="0";
       EA="1";
       mcuport1=0x7f;
   }
/*********************************************************************/      
       
       
      
     
        for(i="20";i>0;i--)
        for(j="245";j>0;j--);             //一段延時(shí)
       
     
        v_Get1302(get1302);
        appear[7]=table[(get1302[6]&0xf0)/16];
        appear[8]=table[get1302[6]&0x0f];
        appear[10]=table[(get1302[4]&0xf0)/16];
        appear[11]=table[get1302[4]&0x0f];
        appear[13]=table[(get1302[3]&0xf0)/16];
        appear[14]=table[get1302[3]&0x0f];
        appear[21]=table[(get1302[2]&0xf0)/16];
        appear[22]=table[get1302[2]&0x0f];
        appear[24]=table[(get1302[1]&0xf0)/16];
        appear[25]=table[get1302[1]&0x0f];
        appear[27]=table[(get1302[0]&0xf0)/16];
        appear[28]=table[get1302[0]&0x0f];//修改顯示碼表
   
   
        mcuport2=0x80;
        enable();
        mcuport2=0x80;
        enable();
       
        for(n="0";n<16;n++)
          {
            mcuport2=appear[n];
            writer();
          }
        mcuport2=0xc0;
        enable();
        mcuport2=0xc0;
        enable();   
        for(n="16";n<29;n++)
          {
             mcuport2=appear[n];
             writer();                  //lcd顯示控制
           }  
            
       
       
       
       
}
}

void int0(void) interrupt 0
{
  EA="0";
  delay40ms();
 
     pd="1";
    
  
 }

  • 上一篇: 萬年歷算法全集
  • 下一篇: 24C01--24C256共9種EEPROM的字節(jié)讀寫操作程序
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1