久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

DS1302時(shí)鐘芯片顯示時(shí)間C51程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2009年10月15日   【字體:

/*
程序效果:通過DS1302芯片顯示時(shí)間,本程序主要是要理解
       DS1302芯片的協(xié)議,這樣便于編寫程序。
       當(dāng)然時(shí)間顯示也可以用單片機(jī)的定時(shí)器來控制,比起延時(shí)
       子函數(shù)來說較精準(zhǔn)。
*/
#include<reg52.h>  //頭文件
#include<intrins.h>
#define uchar unsigned char //宏定義
sbit scl2=P1^3; //位聲明
sbit sda2=P1^4;
sbit rst2=P1^5;
uchar tmpdata[8]={0x00,0x3b, //顯示的時(shí)間值
0x17,0x1f,0x0c,0x08,0x09,0x00};
uchar tmpdisplay[8];
code uchar write_rtc_address[7]={  //寫入時(shí)間的地址
0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
code uchar read_rtc_address[7]={   //讀取時(shí)間的地址
0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
code unsigned char table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,  //共陰數(shù)碼管 0-9
0x40,0x00}; //    '-' '熄滅‘表
void delay();
void display(uchar *lp,uchar lc); //顯示子函數(shù)
void write_ds1302(uchar address,uchar dat); //寫子函數(shù)
uchar read_ds1302(uchar address);//讀子函數(shù)
void read_rtc();
void set_rtc();
void main()
{
   rst2=0;
   set_rtc();
   while(1)
   {
      read_rtc();
      switch(tmpdata[0]/5)  // 設(shè)計(jì)每隔5秒交替顯示年月日 時(shí)分秒
      {  
         case 0:   //顯示時(shí)分秒
         case 2:
         case 4:
         case 6:
         case 8:
         case 10:
               tmpdisplay[0]=tmpdata[2]/16;
               tmpdisplay[1]=tmpdata[2]&0x0f;
               tmpdisplay[2]=10; //在時(shí)與分之間加一個(gè)“-”
               tmpdisplay[3]=tmpdata[1]/16;
               tmpdisplay[4]=tmpdata[1]&0x0f;
               tmpdisplay[5]=10;
               tmpdisplay[6]=tmpdata[0]/16;
               tmpdisplay[7]=tmpdata[0]&0x0f;
               break;
         case 1:  //顯示年月日
         case 3:
         case 5:
         case 7:
         case 9:
         case 11:
               tmpdisplay[0]=tmpdata[6]/16;
               tmpdisplay[1]=tmpdata[6]&0x0f;
               tmpdisplay[2]=10;
               tmpdisplay[3]=tmpdata[4]/16;
               tmpdisplay[4]=tmpdata[4]&0x0f;
               tmpdisplay[5]=10;
               tmpdisplay[6]=tmpdata[3]/16;
               tmpdisplay[7]=tmpdata[3]&0x0f;
               break;
         default :
             break;
        }
      display(tmpdisplay,8);
   }
}
void display(uchar *lp,uchar lc) //lp為數(shù)組的首地址,lc為顯示的個(gè)數(shù)
{
   uchar i;  //定義局部變量
   P2=0;  //清零端口,準(zhǔn)備顯示
   P1=P1&0xf8; //不影響P1口的高5位,低三位用于控制哪個(gè)數(shù)碼管亮
   for(i=0;i<lc;i++) //循環(huán)顯示
   {
      P2=table[lp[i]];//查表獲得相應(yīng)的數(shù)值
      delay();  //延時(shí),使數(shù)碼管更加亮
      P2=0;  //清零端口,準(zhǔn)備顯示下一位
      P1++;  //點(diǎn)亮下一個(gè)數(shù)碼管
   }
}
void delay()  //延時(shí)子函數(shù)
{
   uchar i;   //i的值的大小可以決定數(shù)碼管的亮暗的程度
   for(i=20;i>0;i--); //但i的值要適中,并不是越大越好
}
void write_ds1302_byte(uchar temp) //寫子函數(shù)
{
   uchar i;
   for(i=0;i<8;i++)  //循環(huán)8次,寫入數(shù)據(jù)
   {
      scl2=0;
      sda2=temp&0x01; //每次傳輸?shù)妥止?jié)
      temp>>=1;   //右移一位
      scl2=1;
   }
}
void write_ds1302(uchar address,uchar dat) //根據(jù)ds1302協(xié)議編寫的程序
{
   rst2=0;
   _nop_();
   scl2=0;
   _nop_();
   rst2=1;
   _nop_();  //從此后開始發(fā)送數(shù)據(jù)
   write_ds1302_byte(address);//發(fā)送地址
   write_ds1302_byte(dat);  //發(fā)送數(shù)據(jù)
   rst2=0;  //停止發(fā)送數(shù)據(jù)
}
uchar read_ds1302(uchar address)  //根據(jù)ds1302編寫的程序
{
   uchar i,temp=0;
   rst2=0;
   _nop_();
   scl2=0;
   _nop_();
   rst2=1;
   _nop_();
   write_ds1302_byte(address);
   for(i=0;i<8;i++)   //循環(huán)8次,讀取數(shù)據(jù)
   {
      scl2=1;
      _nop_();
      if(sda2)
       temp|=0x80;//每次傳輸?shù)妥止?jié)
       scl2=0;
       temp>>=1; // 右移一位
   }
   rst2=0;
   _nop_();
   scl2=1;
   sda2=0;
   return temp;   //返回 temp值
}
void  read_rtc() //讀取日歷
{
   uchar i,*p;
   p=read_rtc_address; //傳遞地址
   for(i=0;i<7;i++) //分七次讀取年月日 時(shí)分秒 星期
   {
      tmpdata[i]=read_ds1302(*p);
      p++;
   }
}
void set_rtc()    //設(shè)定日歷
{
   uchar i,*p,tmp;
   for(i=0;i<7;i++)
 {
    tmp=tmpdata[i]/10;
    tmpdata[i]=tmpdata[i]%10;
    tmpdata[i]=tmpdata[i]+tmp*16;
 }
   write_ds1302(0x8e,0x00);

   p=write_rtc_address; //傳遞地址
   for(i=0;i<7;i++)  //分七次寫入年月日 時(shí)分秒星期
   {
      write_ds1302(*p,tmpdata[i]);
      p++;
   }
   write_ds1302(0x8e,0x80);
}
如果程序無法編譯,請刪除所有前導(dǎo)空白.

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 日本涩涩视频 | 欧美一级视频免费看 | jizz在线免费观看 | 91精品国产91久久久久久不卞 | 一区二区三区国产 | 可以在线看的黄色网址 | 国产999精品久久久久久 | 激情视频中文字幕 | 亚洲国产成人一区二区 | 婷婷成人在线 | 日韩国产专区 | 亚洲精品成人在线 | 偷拍自拍在线观看 | 欧美日韩一区在线播放 | 国产欧美精品一区二区 | 青春草在线 | 国产精品美女久久久久aⅴ国产馆 | 日韩视频一区二区 | 91在线精品播放 | 91综合网 | 天堂素人约啪 | 天天摸天天看 | 国产精品网址 | 国产精品免费观看 | 成人免费在线视频 | 看片地址 | 中文字幕一区二区三区四区五区 | av毛片| 精品一区二区久久久久久久网站 | 精品二区 | 成人欧美一区二区三区在线观看 | 午夜精品一区二区三区三上悠亚 | 日日爱视频 | 日韩中文字幕网 | 91精品国产一区二区三区香蕉 | 97精品超碰一区二区三区 | 国产99在线 | 欧美 | 本道综合精品 | 亚洲高清免费视频 | 国产美女精品视频免费观看 | 亚洲欧美少妇 |