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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么單片機數碼管電子鐘按鍵是黑一下屏?

[復制鏈接]
跳轉到指定樓層
樓主
ID:261485 發表于 2018-8-7 23:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我的數碼管電子鐘什么都沒問題了,可就是按鍵調時間時,一按下按鍵整個頻就黑了,松開又亮了,而且功能也都實現了,就是按下按鍵時會黑一下,請問各位大佬是怎么回事呢???????我在板子上實現的,應該是我的程序不完善,下面是我的程序。。。。。希望各位大佬幫忙解答下。。。。。

單片機源程序如下:
  1. #include<reg51.h>

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. u8 ms0;
  5. u8 sec;
  6. u8 min;
  7. u8 hour;

  8. sbit LSA=P2^2;
  9. sbit LSB=P2^3;
  10. sbit LSC=P2^4;

  11. sbit k1=P3^1;
  12. sbit k2=P3^0;
  13. sbit k3=P3^2;
  14. sbit k4=P3^3;

  15. u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };

  16. void delay(u8 i)
  17. {
  18.    i--;
  19. }


  20. void keyscan();
  21. void display();


  22. void main()
  23. {       
  24.               P0=0X00;
  25.              TMOD|=0X01;
  26.                  TH0=(65536-49960)/256;
  27.                  TL0=(65536-49960)%256;
  28.                  EA=1;
  29.                  ET0=1;
  30.                  TR0=1;

  31.                  while(1)
  32.                  {
  33.               display();
  34.                  }
  35.    
  36. }
  37. void display()
  38. {
  39.    while(1)
  40.    {
  41.       LSA=0;LSB=0;LSC=0;
  42.           P0=smgduan[sec%10];
  43.           delay(2);
  44.           P0=0x00;

  45.           LSA=1;LSB=0;LSC=0;
  46.           P0=smgduan[sec/10];
  47.           delay(2);
  48.           P0=0x00;

  49.           LSA=0;LSB=1;LSC=0;
  50.           P0=0x40;
  51.           delay(2);
  52.           P0=0x00;

  53.           LSA=1;LSB=1;LSC=0;
  54.           P0=smgduan[min%10];
  55.           delay(2);
  56.           P0=0x00;

  57.           LSA=0;LSB=0;LSC=1;
  58.           P0=smgduan[min/10];
  59.           delay(2);
  60.           P0=0x00;

  61.           LSA=1;LSB=0;LSC=1;
  62.           P0=0x40;
  63.           delay(2);
  64.           P0=0x00;
  65.           
  66.           LSA=0;LSB=1;LSC=1;
  67.           P0=smgduan[hour%10];
  68.           delay(2);
  69.           P0=0x00;

  70.           LSA=1;LSB=1;LSC=1;
  71.           P0=smgduan[hour/10];
  72.           delay(2);
  73.           P0=0x00;

  74.    }
  75. }


  76. void T0_time() interrupt 1
  77. {
  78.      TH0=(65536-49960)/256;
  79.          TL0=(65536-49960)%256;
  80.          ms0++;
  81.          if(ms0>=20)      
  82.          {
  83.                 ms0=0;
  84.             sec++;
  85.                 if(sec>=60)
  86.                 {
  87.                    sec=0;
  88.                    min++;
  89.                    if(min>=60)
  90.                    {
  91.                       min=0;
  92.                       hour++;
  93.                           if(hour>=20)
  94.                           hour=0;
  95.                    }
  96.                 }
  97.          }
  98.          keyscan();
  99. }
  100. /*void digdisplay()
  101. {
  102.     switch(a)
  103.         {
  104.             case(0):
  105.                         LSA=0;LSB=0;LSC=0;break;
  106.                 case(1):
  107.                         LSA=0;LSB=0;LSC=1;break;
  108.             case(2):
  109.                         LSA=0;LSB=1;LSC=0;break;
  110.                 case(3):
  111.                         LSA=0;LSB=1;LSC=1;break;
  112.                 case(4):
  113.                         LSA=1;LSB=0;LSC=0;break;
  114.             case(5):
  115.                         LSA=1;KSB=0;LSC=1;break;
  116.                 case(6):
  117.                         LSA=1;LSB=1;LSC=0;break;
  118.                 case(7):
  119.                         LSA=1;LSB=1;LSC=1;break;
  120.         }
  121. }  */

  122. void keyscan()
  123. {
  124.    if(k1==0)
  125.      {
  126.              delay(5);
  127.                  if(k1==0)
  128.                  {
  129.                     min--;
  130.                         if(min>=60)
  131.                         min=0;
  132.                  }
  133.                  while(!k1);
  134.          }
  135.         if(k2==0)
  136.           {
  137.              delay(5);
  138.                  if(k2==0)
  139.                  {
  140.                     min++;
  141.                         if(min>=60)
  142.                         min=0;
  143.                  }
  144.                  while(!k2);
  145.           }
  146.          if(k3==0)
  147.            {
  148.               delay(5);
  149.                   if(k3==0)
  150.                   {
  151.                      hour--;
  152.                          if(hour>=24)
  153.                          hour=0;
  154.                   }
  155.                   while(!k3);
  156.            }
  157.           if(k4==0)
  158.           {
  159.              delay(5);
  160.                  if(k4==0)
  161.                  {
  162.                      hour++;
  163.                          if(hour>=24)
  164.                          hour=0;
  165.                  }
  166.                  while(!k4);
  167.           }
  168. }
復制代碼

所有資料51hei提供下載:
數碼管.zip (24.99 KB, 下載次數: 5)


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

使用道具 舉報

沙發
ID:213173 發表于 2018-8-8 06:43 | 只看該作者
你的按鍵掃描程序使用while(!k1)死循環判斷松手,并且按鍵掃描程序被放在定時器中斷中,在此期間內單片機任何工作都停止等待松手。
回復

使用道具 舉報

板凳
ID:164602 發表于 2018-8-8 08:13 | 只看該作者
看了你的按鍵函數,就知道是你的程序問題了。
第一:為什么數碼管會黑呢?因為沒有執行顯示部分的程序啊。
第二:為什么沒有執行顯示部分的程序呢?因為你按鍵程序用 while(!k1);占住了程序的執行啊——只要你不松手,數碼管就會一直是黑的。
按鍵的松手消抖程序,不應該這樣寫,可能以前你都是這樣寫的,并且從來沒有碰到問題,因為沒有碰到這樣的需要適時顯示的情況。
這樣寫比較好:
for (i=0;((i<10)&&(k1==0));i++)
{
    Delay1ms();
}

評分

參與人數 2黑幣 +27 收起 理由
凌凈清河 + 15 學習了
咻咻修 + 12 贊一個!

查看全部評分

回復

使用道具 舉報

地板
ID:7485 發表于 2018-8-8 10:03 | 只看該作者
你可以使用“顯示”函數來延時就不會這樣了。根據顯示函數的運行占用時間,確定循環幾次,滿足延時。
回復

使用道具 舉報

5#
ID:384109 發表于 2018-8-8 13:04 | 只看該作者
按鍵掃描不要放在定時器中斷里,放在主程序的循環里,顯示程序應該放在定時器里,這樣不論按鍵掃描或其他的程序死循環,只要定時器正常運行,就都能顯示了

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:384167 發表于 2018-8-8 13:56 | 只看該作者
按鍵程序有問題,你按住按鍵程序就死在那,當然不執行顯示程序了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线观看 | 99在线视频观看 | 91在线视频观看免费 | av中文在线观看 | 91精品久久久久久久久久入口 | 精品亚洲一区二区三区 | 国产一区二区三区在线 | av一区二区三区四区 | 91精品无人区卡一卡二卡三 | 欧美成人免费在线视频 | 久久久久成人精品 | 精品国产乱码久久久久久影片 | 黄色一级网 | 美女福利网站 | 成人午夜影院 | 成人在线欧美 | 精品国产乱码久久久久久a丨 | 一级做a | 亚洲成人av在线播放 | 91精品久久| 99久久婷婷国产综合精品电影 | 成人免费福利视频 | 天天爱综合| 国产在线精品区 | 亚洲一区国产 | www.狠狠干| 中文字幕一区在线 | 极品销魂美女一区二区 | 自拍偷拍中文字幕 | 亚洲一区国产精品 | 免费看国产片在线观看 | av网站在线播放 | 亚洲一区导航 | 久久蜜桃av一区二区天堂 | 国色天香综合网 | 精品1区| 女同久久另类99精品国产 | 91精品国产92 | 亚洲九九色 | 九九av| 国产精品久久av |