找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

解決單片機(jī)按鍵控制數(shù)碼管帶來閃滅顯示問題的項(xiàng)目工程(初級版)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 51黑電子會(huì)員 于 2020-5-22 08:38 編輯
  1. /*****
  2. 本程序分兩個(gè)程序。一個(gè)是程序一,按鍵控制數(shù)碼管帶來閃滅顯示問題的程序。
  3. 另一個(gè)是程序二,解決按鍵控制數(shù)碼管帶來閃滅顯示問題的程序。通過利用數(shù)碼
  4. 管顯示函數(shù)代替按鍵掃描函數(shù)內(nèi)的按鍵延時(shí),以及在按鍵掃描函數(shù)內(nèi)按鍵松手時(shí),
  5. 再次調(diào)用數(shù)碼管顯示函數(shù)。提醒:先試程序一,再試程序二,之后兩者對比,找
  6. 出不同點(diǎn),取最適合的。
  7. *****/
  8. //程序一:按鍵控制數(shù)碼管帶來閃滅顯示問題的程序
  9. //#include<reg51.h>
  10. //#define uchar unsigned char
  11. //#define uint unsigned int
  12. //sbit add=P3^0;
  13. //sbit dec=P3^4;
  14. //uchar lingweiflag;
  15. //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共陰數(shù)碼管段碼數(shù)字0~9字碼表,高電平點(diǎn)亮數(shù)碼管段碼數(shù)字0~9。
  16. //uint num;
  17. //uint qian,bai,shi,ge;//定義拆字變量
  18. //  /**ms級延時(shí)子程序**/
  19. //  void delay(uint x)
  20. //{
  21. //   uint i,j;                       
  22. //   for(i=0;i<x;i++)     
  23. //    for(j=0;j<110;j++);
  24. //  }
  25. //  void display()
  26. //{
  27. //   qian=num/1000;//取得千位數(shù)字
  28. //   bai=num%1000/100;//取得百位數(shù)字
  29. //   shi=num%100/10;//取得十位數(shù)字
  30. //   ge=num%10;//取得個(gè)位數(shù)字
  31. //
  32. //   P2=0xfe;//數(shù)碼管千位顯示位
  33. //   P1=table[qian];//數(shù)碼管千位數(shù)值顯示
  34. //   delay(2);//延時(shí)
  35. //
  36. //   P2=0xfd;//數(shù)碼管百位顯示位
  37. //   P1=table[bai];//數(shù)碼管百位數(shù)值顯示
  38. //   delay(2);//延時(shí)
  39. //
  40. //   P2=0xfb;//數(shù)碼管十位顯示位
  41. //   P1=table[shi];//數(shù)碼管十位數(shù)值顯示
  42. //   delay(2);//延時(shí)
  43. //
  44. //   P2=0xf7;//數(shù)碼管個(gè)位顯示位
  45. //   P1=table[ge];//數(shù)碼管個(gè)位數(shù)值顯示
  46. //   delay(2);//延時(shí)
  47. // }
  48. //  void keyscan()
  49. //{
  50. //   if(add==0)
  51. // {         
  52. //    delay(5);
  53. //    if(add==0)
  54. //  {
  55. //     num++;
  56. //     while(!add);
  57. //     lingweiflag=0;
  58. //    }
  59. //   }
  60. //   if(dec==0&&lingweiflag==0)
  61. // {         
  62. //    delay(5);
  63. //    if(dec==0)
  64. //  {
  65. //     num--;
  66. //     while(!dec);
  67. //    }
  68. //   }
  69. //   if(num>9999)
  70. // {
  71. //      num=0;
  72. //   }
  73. //   if(num==0)
  74. // {
  75. //       num=0;
  76. //       lingweiflag=1;
  77. //   }
  78. // }
  79. //  void main()
  80. //{
  81. //   while(1)
  82. // {
  83. //    display();
  84. //    keyscan();
  85. //   }
  86. //  }



  87. //程序二:解決按鍵控制數(shù)碼管帶來閃滅顯示問題的程序
  88. #include<reg51.h>
  89. #define uchar unsigned char
  90. #define uint unsigned int
  91. sbit add=P3^0;
  92. sbit dec=P3^4;
  93. uchar lingweiflag;
  94. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共陰數(shù)碼管段碼數(shù)字0~9字碼表,高電平點(diǎn)亮數(shù)碼管段碼數(shù)字0~9。
  95. uint num;
  96. uint qian,bai,shi,ge;//定義拆字變量
  97.   /**ms級延時(shí)子程序**/
  98.   void delay(uint x)
  99. {
  100.    uint i,j;                       
  101.    for(i=0;i<x;i++)     
  102.     for(j=0;j<110;j++);
  103.   }
  104.   void display()
  105. {
  106.    qian=num/1000;//取得千位數(shù)字
  107.    bai=num%1000/100;//取得百位數(shù)字
  108.    shi=num%100/10;//取得十位數(shù)字
  109.    ge=num%10;//取得個(gè)位數(shù)字

  110.    P2=0xfe;//數(shù)碼管千位顯示位
  111.    P1=table[qian];//數(shù)碼管千位數(shù)值顯示
  112.    delay(2);//延時(shí)

  113.    P2=0xfd;//數(shù)碼管百位顯示位
  114.    P1=table[bai];//數(shù)碼管百位數(shù)值顯示
  115.    delay(2);//延時(shí)

  116.    P2=0xfb;//數(shù)碼管十位顯示位
  117.    P1=table[shi];//數(shù)碼管十位數(shù)值顯示
  118.    delay(2);//延時(shí)

  119.    P2=0xf7;//數(shù)碼管個(gè)位顯示位
  120.    P1=table[ge];//數(shù)碼管個(gè)位數(shù)值顯示
  121.    delay(2);//延時(shí)
  122. }
  123.   void keyscan()
  124. {
  125.    if(add==0)
  126. {         
  127. //  delay(5);
  128.     display();
  129.     if(add==0)
  130.   {
  131.      num++;
  132. //   while(!add);
  133.      while(!add)
  134.   {   
  135.        display();
  136.      }
  137.      lingweiflag=0;
  138.     }
  139.    }
  140.    if(dec==0&&lingweiflag==0)
  141. {         
  142. //  delay(5);
  143.     display();
  144.     if(dec==0)
  145.   {
  146.      num--;
  147. //   while(!dec);
  148.      while(!dec)
  149.      display();
  150.     }
  151.    }
  152.    if(num>9999)
  153. {
  154.     num=0;
  155.    }
  156.    if(num==0)
  157. {
  158.     num=0;
  159.     lingweiflag=1;
  160.    }
  161. }
  162.   void main()
  163. {
  164.    while(1)
  165. {
  166.     display();
  167.     keyscan();
  168.    }
  169.   }
復(fù)制代碼

評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表