找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2767|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

1602 DS1302按鍵調(diào)時(shí) 鬧鐘程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:223983 發(fā)表于 2017-8-2 07:59 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

所有資料51hei提供下載:
1602 DS1302按鍵調(diào)時(shí) 鬧鐘.zip (53.36 KB, 下載次數(shù): 43)


單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit clock=P2^1;           // 鬧鐘
  6. sbit ds=P2^0;           // 18b20

  7. bit flag1;
  8. uint temp;

  9. sbit SCK=P1^7;
  10. sbit SDA=P1^6;  
  11. sbit RST=P1^5;// DS1302復(fù)位
  12. sbit set=P3^4;//定義按鍵端口
  13. sbit s1=P3^5;                    
  14. sbit s2=P3^6;
  15. sbit s3=P3^7;


  16. sbit RS=P1^0;//RS為數(shù)據(jù)/指令選擇1/0
  17. sbit RW=P1^1;//讀寫
  18. sbit E=P1^2;//E為使能信號
  19. bit flag;//是否讀取時(shí)間的標(biāo)志位
  20. uchar setn=0;//復(fù)位鍵、增加鍵、減少鍵按下次數(shù)
  21. uchar code time0[]="20  -  -        ";
  22. uchar code time1[]="   :  :  ";
  23. uchar code time2[]=" Noise    :  :  ";
  24. uchar code time3[]=" Noise  Power:  ";

  25. uchar l_tmpdate[7];//秒分時(shí)日月周年// 可隨時(shí)更改
  26. uchar code write_add[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時(shí)日月周年 寫的寄存器地址
  27. uchar code read_add[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分時(shí)日月周年 讀的寄存器地址
  28. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共陰數(shù)碼管 0-9加'-'熄滅表


  29. void delay(uint z)
  30. {
  31. while(--z);
  32. }
  33. void write_com(uchar com)//液晶寫命令函數(shù)
  34. {
  35. RS=0;//寫命令使能
  36. RW=0;//寫
  37. delay(100);
  38. E=0;
  39. P0=com;
  40. E=1;
  41. delay(10);
  42. E=0;
  43. }
  44. void write_data(uchar dat)//液晶寫數(shù)據(jù)函數(shù)
  45. {
  46. RS=1;//寫數(shù)據(jù)使能
  47. RW=0;
  48. delay(10);
  49. E=0;
  50. P0=dat;
  51. E=1;
  52. delay(10);
  53. E=0;
  54. }
  55. void init()//液晶初始化
  56. {

  57. uchar num;
  58. E=0;
  59. write_com(0x38);//顯示模式設(shè)置
  60. write_com(0x38);
  61. write_com(0x38);
  62. write_com(0x08);//顯示關(guān)閉
  63. write_com(0x01);//顯示清屏
  64. write_com(0x06);//光標(biāo)移動(dòng)設(shè)置整屏不移動(dòng)
  65. write_com(0x0c);//屏幕開、光標(biāo)不閃(0)不顯示(0)
  66. write_com(0x80);
  67. for(num=0;num<16;num++)
  68.   {
  69.    write_data(time0[num]);
  70.    delay(5);
  71.   }
  72. write_com(0x80+0x40);
  73. for(num=0;num<9;num++)
  74.   {
  75.    write_data(time1[num]);
  76.    delay(5);
  77.   }
  78. }

  79. void delay1(uint t)
  80. {
  81.         while(t--);
  82. }

  83. void ds_reset()
  84. {
  85.         ds=1;
  86.         delay1(5);
  87.         ds=0;
  88.         delay1(80);
  89.         ds=1;
  90.         delay1(14);
  91.         if(ds==0)
  92.                 flag1=1;
  93.         else
  94.                 flag1=0;
  95.                 delay1(20);
  96. }

  97. bit ds_read_bit()
  98. {
  99.         bit dat;
  100.         ds=0;
  101.         _nop_();
  102.         _nop_();
  103.         ds=1;
  104.         _nop_();
  105.         dat=ds;
  106.         delay1(10);
  107.         return dat;
  108. }

  109. uchar ds_read_byte()
  110. {
  111.         uchar i,j,k;
  112.         for(i=0;i<8;i++)
  113.         {
  114.                 j=ds_read_bit();
  115.                 k=(j<<7)|(k>>1);
  116.         }
  117.         return k;
  118. }

  119. void ds_write_byte(uchar dat)
  120. {
  121.         uchar i;
  122.         for(i=0;i<8;i++)
  123.         {
  124.                 ds=0;
  125.                 _nop_();
  126.                 ds=dat&0x01;
  127.                 delay1(6);
  128.                 ds=1;
  129.                 dat=dat>>1;
  130.         }
  131.         delay(6);
  132. }

  133. uint read_temperature()
  134. {
  135.         uchar a,b;
  136.         ds_reset();
  137.         ds_write_byte(0xcc);
  138.         ds_write_byte(0xbe);
  139.         a=ds_read_byte();
  140.         b=ds_read_byte();
  141.         temp=b;
  142.         temp=temp<<8;
  143.         temp=temp|a;
  144.         temp=temp*0.0625*10+0.5;
  145.         return temp;
  146. }

  147. void display_18b20()
  148. {
  149.         write_com(0x80+0x40+11);
  150.         write_data(temp/100+0x30);
  151.         write_com(0x80+0x40+12);
  152.         write_data((temp%100)/10+0x30);
  153.         write_com(0x80+0x40+13);
  154.         write_data('.');
  155.         write_com(0x80+0x40+14);
  156.         write_data((temp%100)%10+0x30);
  157.         write_com(0x80+0x40+15);
  158.         write_data('C');
  159. }



  160. void Write_Ds1302_Byte(uchar temp) //寫一個(gè)字節(jié)
  161. {
  162. uchar i;
  163. for (i=0;i<8;i++)    //循環(huán)8次寫入數(shù)據(jù)
  164.   {
  165. SCK=0;
  166.     SDA=temp&0x01;   //每次傳輸?shù)妥止?jié)
  167.     temp>>=1;    //右移一位
  168.     SCK=1;
  169.    }
  170. }   


  171. void Write_Ds1302(uchar add,uchar dat )//向寄存器寫數(shù)據(jù)     
  172. {
  173.   RST=0;
  174. _nop_();
  175.   SCK=0;
  176. _nop_();
  177.   RST=1;//啟動(dòng)
  178.     _nop_();   
  179.   Write_Ds1302_Byte(add); //發(fā)送地址
  180.   Write_Ds1302_Byte(dat); //發(fā)送數(shù)據(jù)
  181.   RST=0;    //恢復(fù)
  182. }
  183. uchar Read_Ds1302_Byte()//讀一個(gè)字節(jié)
  184. {
  185. uchar i,temp=0x00;
  186. for (i=0;i<8;i++)   //循環(huán)8次 讀取數(shù)據(jù)
  187.   {  
  188.    if(SDA)
  189.    temp|=0x80;   //每次傳輸?shù)妥止?jié)
  190.   SCK=0;
  191.   temp>>=1;   //右移一位
  192.    SCK=1;
  193. }
  194. return(temp);
  195. }
  196. uchar Read_Ds1302(uchar address )//從寄存器讀數(shù)據(jù)
  197. {
  198.   uchar date;
  199.   RST=0;
  200. _nop_();
  201. SCK=0;
  202. _nop_();
  203.   RST=1;
  204. _nop_();
  205.   Write_Ds1302_Byte(address);
  206. date=Read_Ds1302_Byte();
  207.   RST=0;
  208. _nop_();  //以下為DS1302復(fù)位的穩(wěn)定時(shí)間
  209.   RST=0;
  210. SCK=0;
  211. _nop_();
  212. SCK=1;
  213. _nop_();
  214. SDA=0;
  215. _nop_();
  216. SDA=1;
  217. _nop_();
  218. return (date);
  219. }


  220. void Read_RTC(void)  //讀取日歷
  221. {
  222. uchar i,*p;
  223. p=read_add;   //讀的地址傳遞
  224. for(i=0;i<7;i++) //分7次讀取 秒分時(shí)日月周年
  225. {
  226.   l_tmpdate[i]=Read_Ds1302(*p);
  227.   p++;
  228. }
  229. }


  230. void Set_RTC(void)  //設(shè)定日歷
  231. {
  232. uchar i,*p,tmp;
  233. for(i=0;i<7;i++)
  234. {           //BCD處理,將十六進(jìn)制轉(zhuǎn)換成十進(jìn)制
  235.   tmp=l_tmpdate[i]/10;
  236.   l_tmpdate[i]=l_tmpdate[i]%10;
  237.   l_tmpdate[i]=l_tmpdate[i]+tmp*16;
  238. }
  239.   Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  240. p=write_add;//傳要寫的寄存器地址
  241.   for(i=0;i<7;i++)  //7次寫入秒分時(shí)日月周年
  242.   {
  243.    Write_Ds1302(*p,l_tmpdate[i]);
  244.     p++;  
  245.   }
  246.   Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  247. }
  248. void write_lcd()
  249. {
  250. static uchar i,temp[2];
  251. switch(i)
  252. {
  253.   case 0: write_com(0x80+0x40+0x07);break;//秒
  254.   case 1: write_com(0x80+0x40+4);break;//分
  255.   case 2: write_com(0x80+0x40+1);break;//時(shí)
  256.   case 3: write_com(0x80+0x08);break;//日
  257.   case 4: write_com(0x80+5);break;//月
  258.   case 5: write_com(0x80+0x0e);break;//星期
  259.   case 6: write_com(0x80+2);break;//年
  260. }
  261. temp[0]=l_tmpdate[i]/16;//數(shù)據(jù)的轉(zhuǎn)換
  262. temp[1]=l_tmpdate[i]&0x0f;
  263. write_data(0x30+temp[0]);
  264. write_data(0x30+temp[1]);
  265. i++;
  266. if(i==7)
  267.   i=0;
  268. }
  269. uchar change(uchar x)//十進(jìn)制轉(zhuǎn)換成十六進(jìn)制
  270. {
  271. uchar tep,y;
  272. y=x;
  273. tep=y/16;
  274. y=y%16;
  275. y=y+tep*10;
  276. return y;
  277. }
  278. void keyscan()
  279. {

  280. uchar tem[2],tp,Flag;//存儲要更改的時(shí)間數(shù)據(jù)
  281. if(set==0)
  282. {
  283.   flag=1;//時(shí)間停止
  284.   delay(500);//去鍵盤按下抖動(dòng)
  285.   if(set==0)
  286.   {
  287.    delay(500);
  288.    while(!set);
  289.    delay(500);//去鍵盤抬起時(shí)抖動(dòng)
  290.    while(!set);
  291.    delay(500);
  292.    setn++;
  293.    if(setn==1)
  294.    {
  295.       write_com(0x80+0x40+8);//將光標(biāo)移動(dòng)到秒個(gè)位
  296.     write_com(0x0f);//顯示光標(biāo)并且閃爍
  297.    
  298.    }
  299.    if(setn==2)
  300.    {
  301.       write_com(0x80+0x40+5);//將光標(biāo)移動(dòng)到分個(gè)位
  302.     write_com(0x0f);//顯示光標(biāo)并且閃爍
  303.    }
  304.    if(setn==3)
  305.    {
  306.    
  307.       write_com(0x80+0x40+2);//將光標(biāo)移動(dòng)到時(shí)個(gè)位
  308.     write_com(0x0f);//顯示光標(biāo)并且閃爍
  309.    }
  310.    if(setn==4)
  311.    {
  312.    write_com(0x80+15);                  //        將光標(biāo)移動(dòng)到星期
  313.    write_com(0x0f);
  314.    }
  315.    if(setn==5)
  316.    {
  317.    write_com(0x80+9);                  //        將光標(biāo)移動(dòng)到日
  318.    write_com(0x0f);
  319.    }
  320.    if(setn==6)
  321.    {
  322.    write_com(0x80+6);                   //        將光標(biāo)移動(dòng)到月
  323.    write_com(0x0f);
  324.    }
  325.    if(setn==7)
  326.    {
  327.    write_com(0x80+3);                          //        將光標(biāo)移動(dòng)到年
  328.    write_com(0x0f);
  329.    }
  330.    if(setn==8)
  331.    {
  332.     setn=0;
  333.     Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  334.     Write_Ds1302(write_add[0],l_tmpdate[0]);
  335.     Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  336.     flag=0;//時(shí)鐘正常運(yùn)行
  337.     write_com(0x0c);//光標(biāo)停止閃爍
  338.    }
  339.   }
  340.   
  341. }
  342. if(setn!=0)//更改時(shí)間
  343. {
  344.   if(s1==0)//增加時(shí)間
  345.   {
  346.    delay(5000);
  347.    if(s1==0)
  348.    {
  349.    
  350.     while(!s1);
  351.     delay(5000);//去鍵盤抬起時(shí)抖動(dòng)
  352.     while(!s1);
  353.     if(setn==1)
  354.     {
  355.      l_tmpdate[0]=change(l_tmpdate[0]);
  356.      l_tmpdate[0]++;
  357.      if(l_tmpdate[0]>=60)
  358.       l_tmpdate[0]=0;
  359.      {  
  360.       tp=l_tmpdate[0]/10;
  361.       l_tmpdate[0]=l_tmpdate[0]%10;
  362.       l_tmpdate[0]=l_tmpdate[0]+tp*16;
  363.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  364.       Write_Ds1302(write_add[0],l_tmpdate[0]);
  365.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  366.      }
  367.      write_com(0x80+0x40+7);                                           //秒
  368.      tem[0]=l_tmpdate[0]/16;//數(shù)據(jù)的轉(zhuǎn)換
  369.      tem[1]=l_tmpdate[0]&0x0f;
  370.      write_data(0x30+tem[0]);
  371.      write_data(0x30+tem[1]);
  372.      write_com(0x80+0x40+8);
  373.      Flag=1;
  374.     }
  375.     if(setn==2)
  376.     { l_tmpdate[1]=change(l_tmpdate[1]);
  377.      l_tmpdate[1]++;
  378.      if(l_tmpdate[1]==60)
  379.       l_tmpdate[1]=0;
  380.      {  
  381.       tp=l_tmpdate[1]/10;
  382.       l_tmpdate[1]=l_tmpdate[1]%10;
  383.       l_tmpdate[1]=l_tmpdate[1]+tp*16;
  384.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  385.       Write_Ds1302(write_add[1],l_tmpdate[1]);
  386.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  387.      }
  388.      write_com(0x80+0x40+4);                                        //分
  389.      tem[0]=l_tmpdate[1]/16;//數(shù)據(jù)的轉(zhuǎn)換
  390.      tem[1]=l_tmpdate[1]&0x0f;
  391.      write_data(0x30+tem[0]);
  392.      write_data(0x30+tem[1]);
  393.      write_com(0x80+0x40+5);
  394.     }
  395.     if(setn==3)
  396.     { l_tmpdate[2]=change(l_tmpdate[2]);
  397.      l_tmpdate[2]++;
  398.      if(l_tmpdate[2]>=24)
  399.       l_tmpdate[2]=0;
  400.      {  
  401.       tp=l_tmpdate[2]/10;
  402.       l_tmpdate[2]=l_tmpdate[2]%10;
  403.       l_tmpdate[2]=l_tmpdate[2]+tp*16;
  404.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  405.       Write_Ds1302(write_add[2],l_tmpdate[2]);
  406.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  407.      }
  408.      write_com(0x80+0x40+1);                                                //時(shí)
  409.      tem[0]=l_tmpdate[2]/16;//數(shù)據(jù)的轉(zhuǎn)換
  410.      tem[1]=l_tmpdate[2]&0x0f;
  411.      write_data(0x30+tem[0]);
  412.      write_data(0x30+tem[1]);
  413.      write_com(0x80+0x40+2);      
  414.     }
  415.     if(setn==4)
  416.     {
  417.      l_tmpdate[5]=change(l_tmpdate[5]);
  418.      l_tmpdate[5]++;
  419.      if(l_tmpdate[5]==8)
  420.       l_tmpdate[5]=1;
  421.      {  
  422.       tp=l_tmpdate[5]/10;
  423.       l_tmpdate[5]=l_tmpdate[5]%10;
  424.       l_tmpdate[5]=l_tmpdate[5]+tp*16;
  425.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  426.       Write_Ds1302(write_add[5],l_tmpdate[5]);
  427.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  428.      }
  429.      write_com(0x80+14);                                                   //星期
  430.      tem[0]=l_tmpdate[5]/16;//數(shù)據(jù)的轉(zhuǎn)換
  431.      tem[1]=l_tmpdate[5]&0x0f;
  432.      write_data(0x30+tem[0]);
  433.      write_data(0x30+tem[1]);
  434.      write_com(0x80+15);
  435.     }
  436.    
  437.     if(setn==5)
  438.     {
  439.      l_tmpdate[3]=change(l_tmpdate[3]);
  440.      l_tmpdate[3]++;
  441.      if(l_tmpdate[3]==32)
  442.       l_tmpdate[3]=0;
  443.      {  
  444.       tp=l_tmpdate[3]/10;
  445.       l_tmpdate[3]=l_tmpdate[3]%10;
  446.       l_tmpdate[3]=l_tmpdate[3]+tp*16;
  447.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  448.       Write_Ds1302(write_add[3],l_tmpdate[3]);
  449.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  450.      }
  451.      write_com(0x80+8);                                                //日
  452.      tem[0]=l_tmpdate[3]/16;//數(shù)據(jù)的轉(zhuǎn)換
  453.      tem[1]=l_tmpdate[3]&0x0f;
  454.      write_data(0x30+tem[0]);
  455.      write_data(0x30+tem[1]);
  456.      write_com(0x80+9);
  457.     }
  458.     if(setn==6)
  459.     {
  460.      l_tmpdate[4]=change(l_tmpdate[4]);
  461.      l_tmpdate[4]++;
  462.      if(l_tmpdate[4]==13)
  463.       l_tmpdate[4]=0;
  464.      write_com(0x80+5);                                           //月
  465.      {  
  466.       tp=l_tmpdate[4]/10;
  467.       l_tmpdate[4]=l_tmpdate[4]%10;
  468.       l_tmpdate[4]=l_tmpdate[4]+tp*16;                         
  469.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  470.       Write_Ds1302(write_add[4],l_tmpdate[4]);
  471.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  472.      }
  473.      tem[0]=l_tmpdate[4]/16;//數(shù)據(jù)的轉(zhuǎn)換
  474.      tem[1]=l_tmpdate[4]&0x0f;
  475.      write_data(0x30+tem[0]);
  476.      write_data(0x30+tem[1]);
  477.      write_com(0x80+6);
  478.     }
  479.     if(setn==7)
  480.     {
  481.      l_tmpdate[6]=change(l_tmpdate[6]);
  482.      l_tmpdate[6]++;
  483.      if(l_tmpdate[6]==100)
  484.       l_tmpdate[6]=0;
  485.      write_com(0x80+2);                                          //年
  486.      {  
  487.       tp=l_tmpdate[6]/10;
  488.       l_tmpdate[6]=l_tmpdate[6]%10;
  489.       l_tmpdate[6]=l_tmpdate[6]+tp*16;
  490.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  491.       Write_Ds1302(write_add[6],l_tmpdate[6]);
  492.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  493.      }
  494.      tem[0]=l_tmpdate[6]/16;//數(shù)據(jù)的轉(zhuǎn)換
  495.      tem[1]=l_tmpdate[6]&0x0f;
  496.      write_data(0x30+tem[0]);
  497.      write_data(0x30+tem[1]);
  498.      write_com(0x80+3);
  499.     }
  500.    }         
  501.   }
  502.   if(s2==0)//減少時(shí)間
  503.   {
  504.    delay(5000);
  505.    if(s2==0)
  506.    {
  507.     while(!s2);
  508.     delay(5000);//去鍵盤抬起時(shí)抖動(dòng)
  509.     while(!s2);
  510.     if(setn==1)
  511.     {
  512.      l_tmpdate[0]=change(l_tmpdate[0]);
  513.      if(l_tmpdate[0]!=0)
  514.       l_tmpdate[0]--;
  515.      if(l_tmpdate[0]==0)
  516.       l_tmpdate[0]=59;
  517.      {  
  518.       tp=l_tmpdate[0]/10;
  519.       l_tmpdate[0]=l_tmpdate[0]%10;
  520.       l_tmpdate[0]=l_tmpdate[0]+tp*16;
  521.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  522.       Write_Ds1302(write_add[0],l_tmpdate[0]);
  523.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  524.      }
  525.      write_com(0x80+0x40+7);                                 //日
  526.      tem[0]=l_tmpdate[0]/16;//數(shù)據(jù)的轉(zhuǎn)換
  527.      tem[1]=l_tmpdate[0]&0x0f;
  528.      write_data(0x30+tem[0]);
  529.      write_data(0x30+tem[1]);
  530.      write_com(0x80+0x40+8);
  531.     }
  532.     if(setn==2)
  533.     {
  534.      l_tmpdate[1]=change(l_tmpdate[1]);
  535.      if(l_tmpdate[1]!=0)
  536.       l_tmpdate[1]--;
  537.      if(l_tmpdate[1]==0)
  538.        l_tmpdate[1]=59;
  539.      {  
  540.       tp=l_tmpdate[1]/10;
  541.       l_tmpdate[1]=l_tmpdate[1]%10;
  542.       l_tmpdate[1]=l_tmpdate[1]+tp*16;
  543.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  544.       Write_Ds1302(write_add[1],l_tmpdate[1]);
  545.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  546.      }
  547.      write_com(0x80+0x40+4);                                        //月
  548.      tem[0]=l_tmpdate[1]/16;//數(shù)據(jù)的轉(zhuǎn)換
  549.      tem[1]=l_tmpdate[1]&0x0f;
  550.      write_data(0x30+tem[0]);
  551.      write_data(0x30+tem[1]);
  552.      write_com(0x80+0x40+5);
  553.     }
  554.     if(setn==3)
  555.     { l_tmpdate[2]=change(l_tmpdate[2]);
  556.      if(l_tmpdate[2]!=0)
  557.       l_tmpdate[2]--;
  558.      if(l_tmpdate[2]==0)
  559.       l_tmpdate[2]=23;
  560.      {  
  561.       tp=l_tmpdate[2]/10;
  562.       l_tmpdate[2]=l_tmpdate[2]%10;
  563.       l_tmpdate[2]=l_tmpdate[2]+tp*16;
  564.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  565.       Write_Ds1302(write_add[2],l_tmpdate[2]);
  566.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  567.      }
  568.      write_com(0x80+0x40+1);                                          //年
  569.      tem[0]=l_tmpdate[2]/16;//數(shù)據(jù)的轉(zhuǎn)換
  570.      tem[1]=l_tmpdate[2]&0x0f;
  571.      write_data(0x30+tem[0]);
  572.      write_data(0x30+tem[1]);
  573.      write_com(0x80+0x40+2);      
  574.     }
  575.     if(setn==4)
  576.     {
  577.      l_tmpdate[5]=change(l_tmpdate[5]);
  578.      if(l_tmpdate[5]!=0)
  579.       l_tmpdate[5]--;
  580.      if(l_tmpdate[5]==0)
  581.       l_tmpdate[5]=7;
  582.      {  
  583.       tp=l_tmpdate[5]/10;
  584.       l_tmpdate[5]=l_tmpdate[5]%10;
  585.       l_tmpdate[5]=l_tmpdate[5]+tp*16;
  586.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  587.       Write_Ds1302(write_add[5],l_tmpdate[5]);
  588.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  589.      }
  590.      write_com(0x80+14);                                                //星期
  591.      tem[0]=l_tmpdate[5]/16;//數(shù)據(jù)的轉(zhuǎn)換
  592.      tem[1]=l_tmpdate[5]&0x0f;
  593.      write_data(0x30+tem[0]);
  594.      write_data(0x30+tem[1]);
  595.      write_com(0x80+15);
  596.     }
  597.     if(setn==5)
  598.     {
  599.      l_tmpdate[3]=change(l_tmpdate[3]);
  600.      if(l_tmpdate[3]!=0)
  601.       l_tmpdate[3]--;
  602.      if(l_tmpdate[3]==0)
  603.       l_tmpdate[3]=31;
  604.      {  
  605.       tp=l_tmpdate[3]/10;
  606.       l_tmpdate[3]=l_tmpdate[3]%10;
  607.       l_tmpdate[3]=l_tmpdate[3]+tp*16;
  608.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  609.       Write_Ds1302(write_add[3],l_tmpdate[3]);
  610.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  611.      }
  612.      write_com(0x80+8);                                           //日
  613.      tem[0]=l_tmpdate[3]/16;//數(shù)據(jù)的轉(zhuǎn)換
  614.      tem[1]=l_tmpdate[3]&0x0f;
  615.      write_data(0x30+tem[0]);
  616.      write_data(0x30+tem[1]);
  617.      write_com(0x80+9);
  618.     }
  619.     if(setn==6)
  620.     {
  621.      l_tmpdate[4]=change(l_tmpdate[4]);
  622.      if(l_tmpdate[4]!=0)
  623.       l_tmpdate[4]--;
  624.      if(l_tmpdate[4]==0)
  625.       l_tmpdate[4]=12;
  626.      write_com(0x80+5);                                         //月
  627.      {  
  628.       tp=l_tmpdate[4]/10;
  629.       l_tmpdate[4]=l_tmpdate[4]%10;
  630.       l_tmpdate[4]=l_tmpdate[4]+tp*16;
  631.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  632.       Write_Ds1302(write_add[4],l_tmpdate[4]);
  633.       Write_Ds1302(0x8E,0x80);//打開寫保護(hù)
  634.      }
  635.      tem[0]=l_tmpdate[4]/16;//數(shù)據(jù)的轉(zhuǎn)換     
  636.      tem[1]=l_tmpdate[4]&0x0f;
  637.      write_data(0x30+tem[0]);
  638.      write_data(0x30+tem[1]);
  639.      write_com(0x80+6);
  640.     }
  641.     if(setn==7)
  642.     {
  643.      l_tmpdate[6]=change(l_tmpdate[6]);
  644.      if(l_tmpdate[6]!=0)
  645.       l_tmpdate[6]--;
  646.      if(l_tmpdate[6]==0)
  647.       l_tmpdate[6]=99;
  648.      write_com(0x80+2);                           //年
  649.      {  
  650.       tp=l_tmpdate[6]/10;
  651.       l_tmpdate[6]=l_tmpdate[6]%10;
  652.       l_tmpdate[6]=l_tmpdate[6]+tp*16;
  653.       Write_Ds1302(0x8E,0X00);//關(guān)閉寫保護(hù)
  654.       Write_Ds1302(write_add[6],l_tmpdate[6]);
  655. ……………………

  656. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:142878 發(fā)表于 2017-9-4 11:25 | 只看該作者
有沒有原理仿真圖啊
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表