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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2069|回復: 5
打印 上一主題 下一主題
收起左側

小白求問!單片機電子時鐘程序沒有循環,經過第一次按鍵之后按鍵就失靈了

[復制鏈接]
跳轉到指定樓層
樓主
ID:560108 發表于 2019-6-13 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實現該代碼之后發現沒有循環,經過第一次按鍵之后按鍵就失靈了

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<absacc.h>
  4. sbitkgnxz=P3^5; //功能選擇鍵,按一次設定時間,按兩次設定鬧鐘時間,按三次又顯示時間表  
  5. sbit kmin=P3^6;//調整分
  6. sbitkhour=P3^7;//調整時
  7. sbit bear=P1^0;//蜂鳴器控制口
  8. unsigned charsecshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0,flag=0,//flag是按鍵的計數
  9.               secshi1=0,secge1=0,minshi1=0,minge1=0,hourshi1=0,hourge1=0;//定義存儲時間和鬧鐘時分秒的個位和十位
  10. unsigned intnum=0,sec=0,min=0,hour=0,sec1=30,min1=0,hour1=1, num1=0;//定義時間和鬧鐘的時分秒
  11. unsigned char codetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管段控口
  12. voidkeyscan();//鍵盤掃描函數
  13. voiddisplay();//時鐘顯示函數
  14. voiddisplay1();//鬧鐘顯示函數
  15. voidclock();//鬧鐘函數即蜂鳴器函數
  16. /***延時函數****/
  17. void delay(unsigned char z)
  18. {unsigned char x,y;
  19. for(x=z;x>0;x--)
  20.   for(y=255;y>0;y--);
  21. }
  22. /***中斷函數****/
  23. void time0() interrupt 1
  24. {num++;
  25. TH0=(65536-50000)/256;
  26. TL0=(65536-50000)%256;
  27. if(num==20)
  28.   {num=0;
  29.    sec++;
  30.    if(sec==60)
  31.     {sec=0;
  32.      min++;
  33.      if(min==60)
  34.        {min=0;
  35.         hour++;
  36.         if(hour==24)
  37.           {hour=0;
  38.            }
  39.         }
  40.      }
  41. display(); }
  42. }
  43. /******時鐘顯示函數******/
  44. void display()
  45. {
  46. secge=sec%10;
  47. secshi=sec/10;
  48. minge=min%10;
  49. minshi=min/10;
  50. hourge=hour%10;
  51. hourshi=hour/10;
  52. P2=0xfe;
  53. P0=table[secge];
  54. delay(5);
  55. P2=0xfd;
  56. P0=table[secshi];
  57. delay(5);
  58. P2=0xfb;
  59. P0=0x40;
  60. delay(5);
  61. P2=0xf7;
  62. P0=table[minge];
  63. delay(5);
  64. P2=0xef;
  65. P0=table[minshi];
  66. delay(5);
  67. P2=0xdf;
  68. P0=0x40;
  69. delay(5);
  70. P2=0xbf;
  71. P0=table[hourge];
  72. delay(5);
  73. P2=0x7f;
  74. P0=table[hourshi];
  75. delay(5);
  76. }
  77. /*****鬧鐘顯示函數****/
  78. void display1()
  79. {
  80. secge1=sec1%10;
  81. secshi1=sec1/10;
  82. minge1=min1%10;
  83. minshi1=min1/10;
  84. hourge1=hour1%10;
  85. hourshi1=hour1/10;
  86. P2=0xfe;
  87. P0=table[secge1];
  88. delay(10);
  89. P2=0xfd;
  90. P0=table[secshi1];
  91. delay(15);
  92. P2=0xfb;
  93. P0=0x40;
  94. delay(15);
  95. P2=0xf7;
  96. P0=table[minge1];
  97. delay(15);
  98. P2=0xef;
  99. P0=table[minshi1];
  100. delay(15);
  101. P2=0xdf;
  102. P0=0x40;
  103. delay(15);
  104. P2=0xbf;
  105. P0=table[hourge1];
  106. delay(15);
  107. P2=0x7f;
  108. P0=table[hourshi1];
  109. delay(15);
  110. }
  111. /*****鍵盤掃描*********/
  112. void keyscan()
  113. {if(kgnxz==0)     //功能選擇鍵是否按下
  114.    {  delay(10);//延時消抖            
  115.          if(kgnxz==0)//再次判斷鍵是否按下           
  116.            {flag++;}       //計數,功能選擇鍵按鍵次數加一      
  117.            while(!kgnxz);} //釋放鍵  
  118.   if(flag==1)//功能選擇鍵
  119.    {
  120. if(kmin==0)
  121.    {delay(10);
  122.     if(kmin==0)
  123.       {min++;
  124.        if(min>=60)
  125.        min=0;
  126.        }
  127. while(kmin==0)
  128. display();
  129.     }
  130. if(khour==0)
  131.    {delay(10);
  132.     if(khour==0)
  133.       {hour++;
  134.        if(hour==24)
  135.        hour=0;
  136.        }
  137. while(khour==0)
  138. display();
  139.   }
  140. }
  141. if(flag==2)//鬧鐘調整

  142.            if(kmin==0)
  143.         {delay(5);
  144.           if(kmin==0)
  145.             {min1++;
  146.             if(min1==60)
  147.                min1=0;}
  148.           while(!kmin)
  149.                      {display1();}
  150.                    }
  151.       if(khour==0)
  152.         {delay(5);
  153.            if(khour==0)
  154.             {hour1++;
  155.            if(hour1==24)
  156.               hour1=0;}
  157.             while(!khour)
  158.             {display1();}

  159.                            } }
  160. /*****蜂鳴器*********/
  161. void clock()
  162.   {    unsigned int i;
  163.       for(i=1000;i>0;i--)
  164.        {bear=1;
  165.                   P1=0xfe;
  166.                   delay(10);
  167.                   bear=0;
  168.                   P1=0xff;
  169.                   delay(10);}}
  170. /*****主函數*********/
  171. main()
  172. {TMOD=0x01;
  173. TH0=(65536-50000)/256;
  174. TL0=(65536-50000)%256;
  175. EA=1;ET0=1;TR0=1;
  176. while(1)
  177. {      
  178. keyscan();display();
  179. if(flag==1) {keyscan(); display();}
  180. if(flag==2) {keyscan(); display1();}
  181. if(flag==3) {display();}
  182. if((hour==hour1)&&(min==min1)&&(sec==sec1))
  183.   {clock();}//鬧鐘設定時間與時鐘時間相等,調用蜂鳴器函數
  184. }
  185. }
復制代碼



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

使用道具 舉報

來自 5#
ID:517466 發表于 2019-6-15 00:17 | 只看該作者
你的顯示處理是有問題的。問題點在于顯示完一個數碼管之后,筆段數據保持原狀,點亮下一位數碼管,結果數據會被串過去顯示,雖然時間很短。在下一個數碼管點亮之前,P0輸出的筆段全部熄滅。然后點亮下一個數碼管,輸出筆段數據。另外在調整定是時間過程中,由于中斷中調用display()的原因,也會導致顯示混亂。所以中斷處理中要么去除顯示調用,要么根據flag有區別地調用display()或者display1().后面附上我做的修改,含proteus仿真文件和51的keil c工程.程序里使用的共陰數碼管,所有數據做了和0xFF的異或后輸出。

時鐘.zip

71.35 KB, 下載次數: 11

回復

使用道具 舉報

沙發
ID:123289 發表于 2019-6-14 08:46 | 只看該作者
畫出框圖
回復

使用道具 舉報

板凳
ID:332444 發表于 2019-6-14 11:36 | 只看該作者
設一個變量置于中斷中當調整按鈕按下則標記并開始計時規定在一定時間范圍后復原調整計數
回復

使用道具 舉報

地板
ID:332444 發表于 2019-6-14 11:39 | 只看該作者
或另給一個按鈕用于控制開始調整和結束調整
回復

使用道具 舉報

6#
ID:560108 發表于 2019-6-18 17:42 | 只看該作者
suncat0504 發表于 2019-6-15 00:17
你的顯示處理是有問題的。問題點在于顯示完一個數碼管之后,筆段數據保持原狀,點亮下一位數碼管,結果數據 ...

你好,謝謝你的代碼,我已經拿去試驗了,但是發現你的代碼會造成數碼管顯示不了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产乱码麻豆白嫩 | 手机看片在线播放 | 亚洲高清一区二区三区 | 久久久国产精品网站 | 欧美日韩视频 | 99在线免费观看 | 久久久久久成人 | 91在线色视频 | 亚洲视频第一页 | 激情六月丁香婷婷 | 久久国产精品一区二区 | 国产高清精品一区 | 免费视频二区 | 国产男人的天堂 | 成人免费在线播放 | 欧美日韩精品一区二区天天拍 | 国产精品区一区二 | 日韩手机在线看片 | 最新中文字幕 | 色婷婷综合久久久中字幕精品久久 | 国产美女在线看 | 99久久婷婷国产综合精品首页 | 精品一区二区免费视频 | 国产真实精品久久二三区 | 午夜影院中文字幕 | 91av视频在线观看 | 91综合网 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 亚洲高清视频在线观看 | 国产成人综合在线 | 欧美一区二区网站 | 国产精品亚洲精品日韩已方 | 国产精品久久久久久久久久 | av中文字幕在线观看 | 日本一区二区高清不卡 | 亚洲国产一区在线 | www312aⅴ欧美在线看 | 日韩午夜在线播放 | 美女艹b| 免费视频久久久久 | 999国产精品视频 |