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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3822|回復: 5
收起左側

單片機數碼管分兩組顯示,第一屏日期,第二屏時間,并且可調。每隔5s變化一次

[復制鏈接]
ID:229077 發表于 2017-9-1 10:06 | 顯示全部樓層 |閱讀模式
想要的結果是:如果按starts1 鍵,顯示停止刷新進入調節時間和日期模式。(如果顯示的是日期就調節日期,如果顯示的是時間就調節時間),調節完后再按starts1鍵計時開始。

現在的問題是:進入keysanc函數后還是每隔5s變換顯示。

幫助:我是初學者程序有好多比較啰嗦,還請幫忙修改指正,并能達到效果,172229507 謝謝謝!

  1. /*#include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit starts1=P3^4;
  5. sbit miaos2=P3^5;
  6. sbit fens3=P3^6;
  7. sbit shis4=P3^7;
  8. sbit dula=P2^6;
  9. sbit wela=P2^7;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,
  12. 0x6d,0x7d,0x07,0x7f,0x6f};
  13. uchar code table1[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  14. uchar t,num,num1,nian ,yue ,ri,flag ,s6,s7,s8;
  15. char shi,fen,miao;
  16. void delay(uint x)     //延時函數
  17.    {
  18.       uint i,j;
  19.       for(i=x;i>0;i--)
  20.       for(j=110;j>0;j--);
  21.    }
  22. void display_seg(uchar num1,uchar num)  //顯示函數
  23.   {
  24.      dula=1;
  25.      P0=table[num];
  26.      dula=0;
  27.      P0=0xff;        //消隱
  28.      wela=1;
  29.      P0=table1[num1];
  30.      wela=0;
  31.      delay(1);
  32. }
  33. void display1(uchar x,uchar y)      //分離函數
  34.    {
  35.         uint shi,ge;         //定義變量
  36.         shi=y/10;
  37.         ge=y%10;
  38.         if(x==1)          //x=1 表示年,
  39.           {
  40.                display_seg(5,shi);       //小時的十位
  41.                delay(2);
  42.                display_seg(4,ge);       //小時的個位
  43.                delay(2);
  44.           }
  45.         if(x==2)          //x=2 表示月
  46.          {
  47.                 display_seg(3,shi);       //分鐘的十位
  48.                 delay(2);
  49.                 display_seg(2,ge);       //分鐘的個位
  50.                 delay(2);
  51.         }
  52.       if(x==3)          //x=3 表示日
  53.         {
  54.              display_seg(1,shi);       //秒的十位
  55.              delay(2);
  56.             display_seg(0,ge);       //秒的個位
  57.             delay(2);
  58.        }
  59.   }

  60. void reflash1()       //刷新函數
  61. {
  62.      display1(1,nian);
  63.      display1(2,yue);
  64.      display1(3,ri);
  65. }


  66. void display2(uchar x,uchar y)      //分離函數
  67. {
  68.      uint shi,ge;         //定義變量
  69.      shi=y/10;
  70.      ge=y%10;
  71.      if(x==1)          //x=1 表示小時,
  72.        {
  73.              display_seg(5,shi);       //小時的十位
  74.              delay(2);
  75.              display_seg(4,ge);       //小時的個位
  76.              delay(2);
  77.        }
  78.       if(x==2)          //x=2 表示分鐘
  79.        {
  80.               display_seg(3,shi);       //分鐘的十位
  81.               delay(2);
  82.               display_seg(2,ge);       //分鐘的個位
  83.               delay(2);
  84.        }
  85.       if(x==3)          //x=3 表示秒
  86.       {
  87.               display_seg(1,shi);       //秒的十位
  88.               delay(2);
  89.               display_seg(0,ge);       //秒的個位
  90.               delay(2);
  91.       }
  92. }

  93. void reflash2()       //刷新函數
  94. {
  95.      display2(1,nian);
  96.      display2(2,yue);
  97.      display2(3,ri);
  98. }

  99. void init()        //初始化 中斷
  100. {
  101.      TMOD=0X01;
  102.      TH0=(65536-50000)/256;
  103.      TL0=(65536-50000)%256;
  104.      EA=1;
  105.      ET0=1;
  106.      TR0=1;
  107. }
  108. void keyscan1()       //按鍵加程序
  109. {
  110.        if(starts1==0)      //功能鍵,如果有按鍵按下記時停止,開始調節時間
  111.         {
  112.               delay(5);
  113.               if(starts1==0)
  114.                {
  115.                     TR0=~TR0;     //按鍵一次停止計數第二次案件開始計數
  116.                }while(!starts1);
  117.        }

  118.        if(miaos2==0)      //秒調節
  119.        {
  120.             TR0=0;       //關閉定時器
  121.              delay(5);
  122.              if(miaos2==0)
  123.                 {
  124.                     miao++;
  125.                     if(miao==60)
  126.                          miao=0;
  127.                }   while(!miaos2);     //去抖
  128.        }        

  129.        if(fens3==0)      //調節分鐘
  130.        {
  131.              delay(5);
  132.              if(fens3==0)
  133.               {
  134.                      fen++;
  135.                       if(fen==60)
  136.                      fen=0;
  137.               }while(!fens3);      
  138.        }      
  139.   

  140.         if(shis4==0)      //調節時
  141.            {
  142.                 delay(5);
  143.                 if(shis4==0)
  144.                 {
  145.                      shi++;
  146.                      if(shi==24)
  147.                      shi=0;
  148.                 }while(!shis4);
  149.            }
  150. }

  151. void main()
  152. {
  153.       uint x,y;
  154.       init();
  155.       while(1)
  156.       {   
  157.             for(x=0;x<300;x++)
  158.             {
  159.                   reflash1();
  160.             }
  161.            for(y=0;y<300;y++)
  162.              {
  163.                   reflash2();                    
  164.              }   
  165.        }
  166. }
  167. void time0() interrupt 1    //定時器/ 計數器0工作方式1
  168. {

  169.      TH0=(65536-9216)/256;    //初值的計算=65536-定時時間(s)/機器周期=65536-定時時間*晶振頻率/12
  170.      TL0=(65536-9216)%256;    //設定的是10ms
  171.       t++;
  172.        if(t==100)      //循環100次 10ms*100=1000ms=1s
  173.          {
  174.               t=0;
  175.               miao++;
  176.              if(miao==60)
  177.              {
  178.                   miao=0;
  179.                   fen++;
  180.                   if(fen==60)
  181.                   {
  182.                        fen=0;
  183.                        shi++;
  184.                        if(shi==24)
  185.                        shi=0;
  186.                   }
  187.              }
  188.          }
  189. }
復制代碼



回復

使用道具 舉報

ID:111634 發表于 2017-9-1 19:13 | 顯示全部樓層
秒時間也每隔5s變換顯示?
回復

使用道具 舉報

ID:82765 發表于 2017-9-2 09:03 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

ID:140489 發表于 2017-9-28 16:29 | 顯示全部樓層
鍵盤掃描函數沒調用,你按鍵肯定沒用
回復

使用道具 舉報

ID:47286 發表于 2017-9-28 23:29 | 顯示全部樓層
cjjcjj1 發表于 2017-9-2 09:03
你好!對你的要求沒有完全看明白

他就是想每屏顯示的內容不一樣 每隔5s切換一個屏 任意屏內 按下按鍵調節當前屏的內容

它遇到的問題是 切換可以了 但按下后還是過5s就切換 停不下來 不能調節當前屏的東西
回復

使用道具 舉報

ID:140489 發表于 2017-9-29 09:24 | 顯示全部樓層
給你改了一下,實現了你想要的功能,年月日顯示的一個固定的數字,要使年月日跑起來,你自己在中斷里面寫
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit starts1=P3^0;
  5. sbit miaos2=P3^1;
  6. sbit fens3=P3^2;
  7. sbit shis4=P3^3;
  8. sbit dula=P2^6;
  9. sbit wela=P2^7;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,
  12. 0x6d,0x7d,0x07,0x7f,0x6f};
  13. uchar code table1[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  14. uchar t,num,num1,nian=17 ,yue=9 ,ri=29,s6,s7,s8;
  15. char shi=8,fen=15,miao;
  16. uint cnt;//顯示切換計時
  17. bit flag;
  18. void delay(uint x)     //延時函數
  19.    {
  20.       uint i,j;
  21.       for(i=x;i>0;i--)
  22.               for(j=110;j>0;j--);
  23.    }
  24. void display_seg(uchar num1,uchar num)  //顯示函數
  25.   {
  26.      dula=1;
  27.      P0=table[num];
  28.      dula=0;
  29.      P0=0xff;        //消隱
  30.      wela=1;
  31.      P0=table1[num1];
  32.      wela=0;
  33.      delay(1);
  34. }
  35. void display1(uchar x,uchar y)      //分離函數
  36.    {
  37.         uint shi,ge;         //定義變量
  38.         shi=y/10;
  39.         ge=y%10;
  40.         if(x==1)          //x=1 表示年,
  41.           {
  42.                display_seg(5,shi);       //小時的十位
  43.                delay(2);
  44.                display_seg(4,ge);       //小時的個位
  45.                delay(2);
  46.           }
  47.         if(x==2)          //x=2 表示月
  48.          {
  49.                 display_seg(3,shi);       //分鐘的十位
  50.                 delay(2);
  51.                 display_seg(2,ge);       //分鐘的個位
  52.                 delay(2);
  53.         }
  54.       if(x==3)          //x=3 表示日
  55.         {
  56.              display_seg(1,shi);       //秒的十位
  57.              delay(2);
  58.             display_seg(0,ge);       //秒的個位
  59.             delay(2);
  60.        }
  61.   }

  62. void reflash1()       //刷新函數
  63. {
  64.      display1(1,shi);
  65.      display1(2,fen);
  66.      display1(3,miao);
  67. }


  68. void display2(uchar x,uchar y)      //分離函數
  69. {
  70.      uint shi,ge;         //定義變量
  71.      shi=y/10;
  72.      ge=y%10;
  73.      if(x==1)          //x=1 表示小時,
  74.        {
  75.              display_seg(5,shi);       //小時的十位
  76.              delay(2);
  77.              display_seg(4,ge);       //小時的個位
  78.              delay(2);
  79.        }
  80.       if(x==2)          //x=2 表示分鐘
  81.        {
  82.               display_seg(3,shi);       //分鐘的十位
  83.               delay(2);
  84.               display_seg(2,ge);       //分鐘的個位
  85.               delay(2);
  86.        }
  87.       if(x==3)          //x=3 表示秒
  88.       {
  89.               display_seg(1,shi);       //秒的十位
  90.               delay(2);
  91.               display_seg(0,ge);       //秒的個位
  92.               delay(2);
  93.       }
  94. }

  95. void reflash2()       //刷新函數
  96. {
  97.      display2(1,nian);
  98.      display2(2,yue);
  99.      display2(3,ri);
  100. }

  101. void init()        //初始化 中斷
  102. {
  103.      TMOD=0X01;
  104.      TH0=(65536-9216)/256;
  105.      TL0=(65536-9216)%256;
  106.      EA=1;
  107.      ET0=1;
  108.      TR0=1;
  109. }
  110. void keyscan1()       //按鍵加程序
  111. {
  112.        if(starts1==0)      //功能鍵,如果有按鍵按下記時停止,開始調節時間
  113.         {
  114.               delay(10);
  115.               if(starts1==0)
  116.                {
  117.                     TR0 =! TR0;     //按鍵一次停止計數第二次案件開始計數
  118.                }while(!starts1);
  119.        }

  120.        if(miaos2==0)      //秒調節
  121.        {
  122.              delay(10);
  123.              if(miaos2==0)
  124.                 {       
  125.                     miao++;
  126.                     if(miao>=60)
  127.                                         miao=0;
  128.                }   while(!miaos2);     
  129.                           
  130.        }        

  131.        if(fens3==0)      //調節分鐘
  132.        {
  133.              delay(10);
  134.              if(fens3==0)
  135.               {
  136.                      fen++;
  137.                       if(fen==60)
  138.                      fen=0;
  139.               }while(!fens3);      
  140.        }      
  141.   

  142.         if(shis4==0)      //調節時
  143.            {
  144.                 delay(10);
  145.                 if(shis4==0)
  146.                 {
  147.                      shi++;
  148.                      if(shi==24)
  149.                      shi=0;
  150.                 }while(!shis4);
  151.            }
  152. }

  153. void main()
  154. {
  155.       init();
  156.       while(1)
  157.       {   
  158.                         
  159.                         keyscan1();
  160.             
  161.                         if(flag==0)
  162.                         {
  163.                   reflash1();
  164.             }
  165.             
  166.                         else
  167.                         {
  168.                   reflash2();                    
  169.              }   
  170.        }
  171. }
  172. void time0() interrupt 1    //定時器/ 計數器0工作方式1
  173. {

  174.      TH0=(65536-9216)/256;    //初值的計算=65536-定時時間(s)/機器周期=65536-定時時間*晶振頻率/12
  175.      TL0=(65536-9216)%256;    //設定的是10ms
  176.       cnt++;
  177.           t++;
  178.        if(t==100)      //循環100次 10ms*100=1000ms=1s
  179.          {
  180.               t=0;
  181.               miao++;
  182.              if(miao==60)
  183.              {
  184.                   miao=0;
  185.                   fen++;
  186.                   if(fen==60)
  187.                   {
  188.                        fen=0;
  189.                        shi++;
  190.                        if(shi==24)
  191.                        shi=0;
  192.                   }
  193.              }
  194.          }

  195.                  
  196.                  if(cnt==500)        //5s切換顯示
  197.                  {
  198.                          cnt=0;
  199.                         flag =! flag;
  200.                  }

  201. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级做a爰片性色毛片16美国 | 国产福利视频在线观看 | 少妇一级淫片aaaaaaaaa | 亚洲免费在线 | 成人午夜性成交 | 久久人人爽人人爽人人片av免费 | 欧美日韩美女 | 天天综合久久 | 一区二区免费视频 | 成人高清视频在线观看 | 亚洲成人天堂 | 亚洲a视频 | 国产精品久久久久久久久久久久久 | 精产国产伦理一二三区 | 男人阁久久 | 日韩不卡一区二区 | 黄色在线免费观看 | 久久与欧美| 亚洲免费人成在线视频观看 | 中文字幕亚洲精品在线观看 | 久久久久国产 | 99久久中文字幕三级久久日本 | 99精品免费久久久久久久久日本 | 亚洲视频一区 | 四虎影视 | a级性视频| 午夜一区 | 91精品在线观看入口 | а天堂中文最新一区二区三区 | av免费在线观看网站 | 中文字幕二区 | 欧美日韩精品亚洲 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 日韩图区 | 国产免费福利小视频 | 国产线视频精品免费观看视频 | 国产成人一区 | 国产最好的av国产大片 | 视频在线一区二区 | 欧美日批| 四虎国产 |