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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

通過單片機DS12C887時鐘做一個定時器程序,設(shè)置了兩個響應(yīng)點

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389070 發(fā)表于 2019-7-29 14:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
使用AT89C52開發(fā),通過DS12C887實時時鐘芯片可以保持千年無誤差計算。斷電也不會歸零,而是和電腦一樣,給一次數(shù)據(jù)就好。時間的設(shè)置可以通過按鍵調(diào)節(jié),不知道怎么調(diào)節(jié)的問我就好。加入了四個邏輯設(shè)置定時,控制開和關(guān)。24小時一個循環(huán),有1602數(shù)碼管顯示。即插即用,   

單片機源程序如下:
  1. /******************************************************************************/
  2. /* 項目名稱  :  DS12C887實時時鐘                                   */
  3. /* 主控芯片  : STC89C52                                                       */
  4. /* 文件名稱  :設(shè)置定時器                                                      */
  5. /* 文件功能  : DS12C887實時時鐘操作設(shè)置定時器                                 */
  6. /******************************************************************************/
  7. /**********************************包含頭文件**********************************/
  8. #include<reg52.h>
  9. #include<define.h>
  10. sbit LED=P2^4;

  11. void delay(uint z)//延時函數(shù)
  12. {
  13.         uint x,y;
  14.         for(x=z;x>0;x--)
  15.                 for(y=110;y>0;y--);
  16. }

  17. //鬧鐘1的時間判斷開
  18. void shijiankai1_Time(void)
  19. {
  20. if(shi==0&&fen==0&&miao==05)         //判斷開的時間,如果為真打開LED
  21.         {
  22.          LED=0;                                      //LED開
  23.         }                 
  24. }

  25. //鬧鐘1的時間判斷關(guān)
  26. void shijianguan1_Time(void)
  27. {
  28. if(shi==0&&fen==0&&miao==10)         //判斷關(guān)的時間,如果為真打開LED
  29.         {
  30.          LED=1;                                      //LED開
  31.         }                 
  32. }

  33. //鬧鐘2的時間判斷開
  34. void shijiankai2_Time(void)
  35. {
  36. if(shi==0&&fen==0&&miao==15)         //判斷開的時間,如果為真打開LED
  37.         {
  38.          LED=0;                                      //LED開
  39.         }                 
  40. }

  41. //鬧鐘2的時間判斷關(guān)
  42. void shijianguan2_Time(void)
  43. {
  44. if(shi==0&&fen==0&&miao==20)         //判斷關(guān)的時間,如果為真打開LED
  45.         {
  46.          LED=1;                                      //LED開
  47.         }                 
  48. }


  49. void di() //蜂鳴器報警聲音
  50. {
  51.         beep=0;
  52.         delay(100);
  53.         beep=1;
  54. }
  55. void write_com(uchar com)
  56. {//寫液晶命令函數(shù)
  57.         rs=0;
  58.         lcden=0;
  59.         P0=com;
  60.         delay(3);
  61.         lcden=1;
  62.         delay(3);
  63.         lcden=0;       
  64. }
  65. void write_date(uchar date)
  66. {//寫液晶數(shù)據(jù)函數(shù)
  67.         rs=1;
  68.         lcden=0;
  69.         P0=date;
  70.         delay(3);
  71.         lcden=1;
  72.         delay(3);
  73.         lcden=0;       
  74. }
  75. void init()
  76. {//初始化函數(shù)
  77.         uchar num;
  78.         EA=1;//打開總中斷
  79.         EX1=1;//開外部中斷1
  80.         IT1=1;//設(shè)置負跳變沿觸發(fā)中斷
  81.         flag1=0;//變量初始化
  82.         t0_num=0;
  83.         s1num=0;
  84.         week=1;
  85.         dula=0;//關(guān)閉數(shù)碼管顯示
  86.         wela=0;
  87.         lcden=0;
  88.         rd=0;
  89. /*以下幾行在首次設(shè)置DS12C887時使用,以后不必再寫入*/
  90.         write_ds(0x0A,0x20);//打開振蕩器
  91.         write_ds(0x0B,0x26);//設(shè)置24小時模式,數(shù)據(jù)二進制格式
  92. //-----------------------------------------------------
  93.         write_com(0x38);//1602液晶初始化
  94.         write_com(0x0c);
  95.         write_com(0x06);
  96.         write_com(0x01);
  97.         write_com(0x80);
  98.         for(num=0;num<15;num++)//寫入液晶固定部分顯示
  99.                 {
  100.                         write_date(table[num]);
  101.                         delay(1);
  102.                 }
  103.         write_com(0x80+0x40);
  104.         for(num=0;num<11;num++)
  105.                 {
  106.                         write_date(table1[num]);
  107.                         delay(1);
  108.                 }
  109. }
  110. void write_sfm(uchar add,char date)
  111. {//1602液晶刷新時分秒函數(shù)4為時,7為分,10為秒
  112.         char shi,ge;
  113.         shi=date/10;
  114.         ge=date%10;
  115.         write_com(0x80+0x40+add);
  116.         write_date(0x30+shi);
  117.         write_date(0x30+ge);
  118. }
  119. void write_nyr(uchar add,char date)
  120. {//1602液晶刷新年月日函數(shù)3為年,6為分,9為秒
  121.         char shi,ge;
  122.         shi=date/10;
  123.         ge=date%10;
  124.         write_com(0x80+add);
  125.         write_date(0x30+shi);
  126.         write_date(0x30+ge);
  127. }
  128. void write_week(char we)
  129. {//寫液晶星期顯示函數(shù)
  130.         write_com(0x80+12);
  131.         switch(we)
  132.         {
  133.                 case 1:        write_date('M');delay(5);
  134.                                 write_date('O');delay(5);
  135.                                 write_date('N');
  136.                                 break;
  137.                 case 2:        write_date('T');delay(5);
  138.                                 write_date('U');delay(5);
  139.                                 write_date('E');
  140.                                 break;
  141.                 case 3:        write_date('W');delay(5);
  142.                                 write_date('E');delay(5);
  143.                                 write_date('D');
  144.                                 break;
  145.                 case 4:        write_date('T');delay(5);
  146.                                 write_date('H');delay(5);
  147.                                 write_date('U');
  148.                                 break;
  149.                 case 5:        write_date('F');delay(5);
  150.                                 write_date('R');delay(5);
  151.                                 write_date('I');
  152.                                 break;
  153.                 case 6:        write_date('S');delay(5);
  154.                                 write_date('A');delay(5);
  155.                                 write_date('T');
  156.                                 break;
  157.                 case 7:        write_date('S');delay(5);
  158.                                 write_date('U');delay(5);
  159.                                 write_date('N');
  160.                                 break;
  161.         }
  162. }

  163. void write_ds(uchar add,uchar date)
  164. {//寫12C887函數(shù)
  165.         dscs=0;
  166.         dsas=1;
  167.         dsds=1;
  168.         dsrw=1;
  169.         P0=add;//先寫地址
  170.         dsas=0;
  171.         dsrw=0;
  172.         P0=date;//再寫數(shù)據(jù)
  173.         dsrw=1;
  174.         dsas=1;
  175.         dscs=1;                               
  176. }

  177. uchar read_ds(uchar add)
  178. {//讀12C887函數(shù)
  179.         uchar ds_date;
  180.         dsas=1;
  181.         dsds=1;
  182.         dsrw=1;
  183.         dscs=0;
  184.         P0=add;//先寫地址
  185.         dsas=0;
  186.         dsds=0;
  187.         P0=0xff;
  188.         ds_date=P0;//再讀數(shù)據(jù)
  189.         dsds=1;
  190.         dsas=1;
  191.         dscs=1;
  192.         return ds_date;       
  193. }

  194. void main()//主函數(shù)
  195. {
  196.         init();//調(diào)用初始化函數(shù)
  197.         while(1)
  198.         {
  199.                         year=read_ds(9);//讀取12C887數(shù)據(jù)
  200.                         month=read_ds(8);       
  201.                         day=read_ds(7);
  202.                         week=read_ds(6);
  203.                         shi=read_ds(4);
  204.                         fen=read_ds(2);
  205.                         miao=read_ds(0);       
  206.                         write_sfm(10,miao);//送液晶顯示
  207.                         write_sfm(7,fen);
  208.                         write_sfm(4,shi);
  209.                         write_week(week);
  210.                         write_nyr(3,year);
  211.                         write_nyr(6,month);
  212.                         write_nyr(9,day);
  213.                 }

  214.                     shijiankai1_Time();         //鬧鐘時間設(shè)置開
  215.                  shijianguan1_Time();         //鬧鐘時間設(shè)置關(guān)
  216.                     shijiankai2_Time();         //鬧鐘時間設(shè)置開
  217.                  shijianguan2_Time();         //鬧鐘時間設(shè)置關(guān)
  218. }

  219. void exter() interrupt 2//外部中斷1服務(wù)程序
  220. {        uchar c; //進入中斷表示鬧鐘時間到,
  221.         flag_ri=1; //設(shè)置標(biāo)志位,用以大程序中報警提示
  222.         c=read_ds(0x0c);//讀取12C887的C寄存器表示響應(yīng)了中斷
  223. }
復(fù)制代碼

所有資料51hei提供下載:
資料夾.zip (5.41 KB, 下載次數(shù): 29)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:676699 發(fā)表于 2020-1-2 18:27 來自手機 | 只看該作者
你好,請問怎么通過按鍵設(shè)置時間呢?
回復(fù)

使用道具 舉報

板凳
ID:378116 發(fā)表于 2020-4-20 13:58 | 只看該作者
沒有電路圖嗎?
回復(fù)

使用道具 舉報

地板
ID:378116 發(fā)表于 2020-4-20 13:59 | 只看該作者
沒有電路圖嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品免费一区二区三区 | 狠狠操操| 免费成人午夜 | 日本精品久久 | 国产成人精品一区二区三区在线观看 | 亚洲第一av网站 | 欧美日韩国产精品一区二区 | 成人国产a | 99爱在线免费观看 | 91av在线免费观看 | 成人精品一区二区三区中文字幕 | 亚洲永久在线 | 国产69精品久久久久777 | 国产精品国产三级国产aⅴ原创 | 精品国产欧美 | 91影院| 国产精品性做久久久久久 | 天堂素人约啪 | 国产精品一区二区三区四区 | 古典武侠第一页久久777 | 精品日韩一区 | 亚洲一区二区三区在线播放 | 国产视频久久 | 国产精品日韩在线 | 欧美日韩综合一区 | 免费成人国产 | 午夜久久久久久久久久一区二区 | 综合久久99 | 国产精品无码久久久久 | 天天干天天爱天天 | 欧美日韩在线视频一区 | 欧美日韩在线精品 | 精品中文字幕在线观看 | 欧美精品一级 | 国产视频久久 | 亚洲人成人一区二区在线观看 | 久久99精品国产自在现线小黄鸭 | 日韩av在线免费 | 激情 婷婷 | 欧美激情综合五月色丁香小说 | 亚洲天堂网站 |