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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3039|回復: 3
收起左側

DS12C887+LCD1602+89C51單片機程序

[復制鏈接]
ID:877522 發表于 2021-3-2 16:47 | 顯示全部樓層 |閱讀模式
1.jpg

單片機源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char //無符號型變量0-255
  4. //sbit dula=P2^6;
  5. //sbit wela=P2^7;
  6. sbit lcden=P3^4;
  7. sbit lcdrs=P3^5;
  8. sbit s1=P3^0;
  9. sbit s2=P3^1;
  10. sbit s3=P3^2;
  11. sbit s4=P3^3;
  12. sbit rd=P3^7;
  13. sbit dscs=P1^4;
  14. sbit dsas=P1^5;
  15. sbit dsrw=P1^6;
  16. sbit dsds=P1^7;
  17. sbit dsirq=P3^3;
  18. void keyscan();
  19. uchar num,count,s1num,flag,i;
  20. char miao,shi,fen,Year,Month,Date,Week;    //char 有符號型變量-128-127
  21. uchar code table3[7][3]={"MON","TUE","WED","THU","FRI","STA","SUN"}; //星期的編碼
  22. uchar code table[]="  21-03-05 5";
  23. uchar code table1[]="   00:00:00";
  24. void delay(uint z)
  25.     {
  26.                 uint x,y;
  27.                 for(x=z;x>0;x--)
  28.                 for(y=110;y>0;y--);        
  29.     }

  30. void write_com(uchar com)   //LCD 寫指令
  31.         {
  32.         lcdrs=0;     //RS 低電平寫指令
  33.         P0=com;
  34.         delay(5);
  35.         lcden=1;
  36.         delay(5);   
  37.         lcden=0;   
  38.         }   

  39. void write_data(uchar date)   //LCD 寫數據
  40.         {
  41.         lcdrs=1;     //RS 高電平寫數據
  42.         P0=date;
  43.         delay(5);
  44.         lcden=1;     //E=H給高脈沖
  45.         delay(5);    //E=H延時
  46.         lcden=0;     //關閉脈沖
  47.         }

  48. //void  set_time();  

  49. void init()           //初始化  
  50.     {     
  51.          uchar num;
  52. //       dula=0;
  53. //       wela=0;
  54.          lcden=0;
  55. //       set_time();
  56.         dsds=0; dsds=0; dsds=0;
  57.         write_com(0x38);
  58.         write_com(0x0c);
  59.         write_com(0x06);
  60.         write_com(0x01);

  61.         write_com(0x80);     //指針位置
  62.         for(num=0;num<15;num++)    //LCD寫第一行數據
  63.         {
  64.         write_data(table[num]);
  65.         delay(5);  
  66.         }

  67. //        write_com(0x80+11);   //星期位置
  68. //        for(i=0;i<3;i++)   
  69. //        {
  70. //        write_data(table3[Week][i]);  //寫入星期
  71. //        delay(5);  
  72. //        }

  73.         write_com(0x80+0x40);    //指針位置
  74.         for(num=0;num<12;num++)    //LCD寫第二行數據
  75.         {
  76.        write_data(table1[num]);    //lcd寫入 時分秒
  77.         delay(5);
  78.         }                 
  79.     }  
  80. void write_sfm1(uchar add,uchar date1)   // 年月日   寫地址+數據
  81.     {
  82.         uchar shi,ge;
  83.         shi=date1/10;                    //  整數
  84.         ge=date1%10;                     //  余數
  85.         write_com(add+0x80);
  86.         write_data(0x30+shi);               //寫入LCD 數據
  87.         write_data(0x30+ge);
  88.     }

  89. void write_sfm(uchar add,uchar date)   //十分秒     寫地址+數據
  90.     {
  91.     uchar shi,ge;
  92.     shi=date/10;
  93.     ge=date%10;   
  94.     write_com(0x80+0x40+add);
  95.     write_data(0x30+shi);
  96.     write_data(0x30+ge);   
  97.     }   
  98. void write_ds(uchar add,uchar date)  //DS12C887 寫地址+數據  接入P2口
  99. {
  100. dscs=0;
  101. dsds=1;
  102. dsrw=1;
  103. dsas=1;
  104. P2=add;

  105. dsas=0;   
  106. dsrw=0;
  107. P2=date;  
  108. dsrw=1;  
  109. dsas=1;
  110. dscs=1;   
  111. }   
  112. uchar read_ds(uchar add)    //DS12C887 讀數據   接入P2口
  113. {
  114.         uchar z;
  115.         dscs=0;
  116.   dsrw=1;
  117.         dsds=1;
  118.   dsas=1;
  119.         P2=add;
  120.         dsas=0;
  121.   dsds=0;
  122.   P2=0xff;
  123.         z=P2;
  124.         dsds=1;
  125.   dsas=1;
  126.         dscs=1;
  127.         return z;
  128. }

  129. //void set_time()
  130. //{
  131. ////   write_ds(3,10);
  132. ////   write_ds(6,32);
  133. //}
  134. void main()
  135. {
  136.         init();
  137.         write_ds(0x0a,0x20);         //DS12CR887寄存器A功能設置,開啟時鐘振蕩器
  138.         write_ds(0x0b,0x06);         //寄存器B功能設置,不開啟鬧鐘中斷使能,數據模式為二進制,24小時模式。
  139.         write_ds(0x0a,0x00);     //開始調時,DS12CR887關閉時鐘振蕩器
  140.     write_ds(0,55);          // 初始化秒 寫入55   
  141.     write_ds(2,59);         //  初始化分 寫入55
  142.     write_ds(4,23);          //  初始化時 寫入23


  143.     write_ds(6,7);                 //初始化星期
  144.         write_ds(7,02);          //初始化日
  145.         write_ds(8,03);          //初始化月
  146.         write_ds(9,21);          //初始化年

  147.         while(1)
  148.         {
  149.                 keyscan();
  150.         if(flag==0)
  151.         {
  152.                 miao=read_ds(0);    //讀秒
  153.                 fen=read_ds(2);     //讀分
  154.                 shi=read_ds(4);     //讀時
  155.                
  156.                 write_sfm(9,miao);        //LCD 寫入秒
  157.                 write_sfm(6,fen);   //LCD 寫入分
  158.                 write_sfm(3,shi);   //LCD 寫入時

  159.         Year=read_ds(9);    //讀年
  160.         Month=read_ds(8);   //讀月
  161.         Date=read_ds(7);    //讀日
  162.        Week=read_ds(6);   //讀星期  取消使用字母星期

  163.        write_sfm1(11,Week);    //LCD 寫入周  取消使用字母星期
  164.         write_sfm1(8,Date);     //LCD 寫入日
  165.         write_sfm1(5,Month);    //LCD 寫入月
  166.         write_sfm1(2,Year);     //LCD 寫入年
  167.         }   
  168.         }   
  169. }
  170. void keyscan()
  171. {
  172.    rd=0;
  173.    if(s1==0)
  174.    {
  175.    delay(5);
  176.   if(s1==0)
  177.     {
  178.     s1num++;  
  179.     flag=1;   // flag=1 時鐘停止 開始調時      
  180.     while(!s1);
  181.   if(s1num==1)
  182.     {   
  183. // TR0=0;
  184.     write_com(0x80+0x40+9);
  185.     write_com(0x0f);
  186.     }
  187.   if(s1num==2)
  188.     {  
  189.     write_com(0x80+0x40+6);
  190.     }  
  191.   if(s1num==3)
  192.     {  
  193.     write_com(0x80+0x40+3);
  194.     }  
  195.   if(s1num==4)
  196.     {  
  197.     write_com(0x80+11);
  198.     }
  199.   if(s1num==5)
  200.     {  
  201.     write_com(0x80+8);
  202.     }
  203.   if(s1num==6)
  204.     {  
  205.     write_com(0x80+5);
  206.     }
  207.   if(s1num==7)
  208.     {  
  209.     write_com(0x80+2);
  210.     }
  211.   if(s1num==8)
  212.     {  
  213.     s1num=0;
  214.     write_com(0x0c);
  215.     flag=0;             //此時時鐘開始啟動
  216.     }  
  217.    }   
  218. }

  219.     if(s1num!=0)
  220.     {   
  221.       if(s2==0)
  222.       {
  223.          delay(5);
  224.          if(s2==0)
  225.           {
  226.           while(!s2);
  227.           if(s1num==1)
  228.           {
  229.              miao++;
  230.              if(miao==60)
  231.              miao=0;
  232.              write_sfm(9,miao);
  233.              write_com(0x80+0x40+9);  
  234.              write_ds(0,miao);
  235.           }
  236.           if(s1num==2)
  237.           {
  238.             fen++;
  239.             if(fen==60)
  240.             fen=0;
  241.             write_sfm(6,fen);
  242.             write_com(0x80+0x40+6);
  243.             write_ds(2,fen);
  244.           }
  245.           if(s1num==3)
  246.           {
  247.             shi++;
  248.             if(shi==24)
  249.             shi=0;
  250.             write_sfm(3,shi);
  251.             write_com(0x80+0x40+3);
  252.             write_ds(4,shi);
  253.           }
  254.            if(s1num==4)
  255.           {
  256.             Week++;
  257.             if(Week==8)
  258.             Week=1;
  259.             write_sfm1(11,Week);
  260.             write_com(0x80+11);
  261.             write_ds(6,Week);   
  262.           }
  263.            if(s1num==5)
  264.           {
  265.             Date++;
  266.             if(Date==32)
  267.             Date=1;
  268.             write_sfm1(8,Date);
  269.             write_com(0x80+8);
  270.             write_ds(7,Date);   
  271.           }
  272.            if(s1num==6)
  273.           {
  274.             Month++;
  275.             if(Month==13)
  276.             Month=1;
  277.             write_sfm1(5,Month);
  278.             write_com(0x80+5);
  279.             write_ds(8,Month);   
  280.           }
  281.             if(s1num==7)
  282.           {
  283.             Year++;
  284.             if(Year==29)
  285.             Year=18;
  286.             write_sfm1(2,Year);
  287.             write_com(0x80+2);
  288.             write_ds(9,Year);   
  289.           }


  290.         }               
  291.       }


  292.        if(s3==0)
  293.         {
  294.           delay(5);
  295.           if(s3==0)
  296.           {
  297.             while(!s3);
  298.              if(s1num==1)
  299.              {   
  300.               miao--;
  301.               if(miao==-1)
  302.               miao=59;
  303.               write_sfm(9,miao);
  304.               write_com(0x80+0x40+9);
  305.               write_ds(0,miao);               
  306.              }
  307.              if(s1num==2)
  308.              {
  309.               fen--;
  310.               if(fen==-1)
  311.               fen=59;
  312.               write_sfm(6,fen);
  313.               write_com(0x80+0x40+6);
  314.               write_ds(2,fen);
  315.              }   
  316.               if(s1num==3)
  317.              {
  318.               shi--;
  319.               if(shi==-1)
  320.               shi=23;
  321.               write_sfm(3,shi);
  322.               write_com(0x80+0x40+3);
  323.               write_ds(4,shi);
  324.              }
  325.         if(s1num==4)
  326.           {
  327.             Week--;
  328.             if(Week==0)
  329.             Week=7;
  330.             write_sfm1(11,Week);
  331.             write_com(0x80+11);
  332.             write_ds(6,Week);   
  333.           }
  334.            if(s1num==5)
  335.           {
  336.             Date--;
  337.             if(Date==0)
  338.             Date=31;
  339.             write_sfm1(8,Date);
  340.             write_com(0x80+8);
  341.             write_ds(7,Date);   
  342.           }
  343.            if(s1num==6)
  344.           {
  345.             Month--;
  346.             if(Month==0)
  347.             Month=12;
  348.             write_sfm1(5,Month);
  349.             write_com(0x80+5);
  350.             write_ds(8,Month);   
  351.           }
  352.             if(s1num==7)
  353.           {
  354.             Year--;
  355.             if(Year==18)
  356.             Year=29;
  357.             write_sfm1(2,Year);
  358.             write_com(0x80+2);
  359.             write_ds(9,Year);   
  360.           }            
  361.            }
  362.         }  
  363.     }  
  364. }  


  365. //調節星期的程序
  366. //                    Week++;
  367. //                                    switch(Week)
  368. //                                                {
  369. //                                                        case 0:write_com(0x80+11);
  370. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  371. //                                                        case 1:write_com(0x80+11);
  372. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  373. //                                                        case 2:write_com(0x80+11);
  374. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  375. //                                                        case 3:write_com(0x80+11);
  376. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  377. //                                                        case 4:write_com(0x80+11);
  378. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  379. //                                                        case 5:write_com(0x80+11);
  380. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  381. //                                                        case 6:write_com(0x80+11);
  382. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  383. //                                                        case 7:write_com(0x80+11); Week=0;
  384. //                                                        for(i=0;i<3;i++) write_data(table3[Week][i]);   break;
  385. //                                                }

  386. //DS12887  寫時鐘
復制代碼


回復

使用道具 舉報

ID:328014 發表于 2021-3-9 19:22 | 顯示全部樓層
回復

使用道具 舉報

ID:591930 發表于 2021-3-13 22:01 | 顯示全部樓層
按照你的做仿真,復制你的程序,,為什么沒有顯示
回復

使用道具 舉報

ID:877522 發表于 2021-3-16 09:04 | 顯示全部樓層
高占國 發表于 2021-3-13 22:01
按照你的做仿真,復制你的程序,,為什么沒有顯示

是不是 接線有問題
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本二区在线观看 | 国产精品美女久久久久久免费 | 91久久国产 | 国产精品一区二区三区四区五区 | 日韩欧美一级片 | 欧美激情久久久久久 | 国产99精品 | 精品久久久久久久久久久久 | 91精品国产91久久久久久最新 | 999精品视频 | 99亚洲精品| 欧美一区二 | 免费1区2区3区 | 日韩在线观看精品 | 亚洲成人综合在线 | 中文字幕一页二页 | 国产在线视频一区 | 天天插天天舔 | 日本h片在线观看 | 欧美日韩免费一区二区三区 | 国产黄色网 | 成年女人免费v片 | 在线综合视频 | www.黄色片视频 | 日韩在线国产 | 狠狠狠干 | 国产成人jvid在线播放 | 操视频网站 | 99精品一区二区三区 | 狠狠骚 | 欧美激情在线观看一区二区三区 | av网站免费| 精品视频一区二区 | 一区二区高清在线观看 | 精品1区2区3区4区 | 久久精品视频9 | 欧美精品一区二区三区四区五区 | 婷婷亚洲综合 | 欧美日韩视频在线第一区 | 精品一区二区在线视频 | 亚洲精品一区中文字幕乱码 |