[创客交流] 解决按键控制数码管带来闪灭显示问题的项目工程-初级版

[复制链接]
 楼主| zhamatu 发表于 2020-10-25 17:14 | 显示全部楼层 |阅读模式
  1. /*****
  2. 本程序分两个程序。一个是程序一,按键控制数码管带来闪灭显示问题的程序。
  3. 另一个是程序二,解决按键控制数码管带来闪灭显示问题的程序。通过利用数码
  4. 管显示函数代替按键扫描函数内的按键延时,以及在按键扫描函数内按键松手时,
  5. 再次调用数码管显示函数。提醒:先试程序一,再试程序二,之后两者对比,找
  6. 出不同点,取最适合的。
  7. *****/


 楼主| zhamatu 发表于 2020-10-25 17:15 | 显示全部楼层
  1. //程序一:按键控制数码管带来闪灭显示问题的程序
  2. //#include<reg51.h>
  3. //#define uchar unsigned char
  4. //#define uint unsigned int
  5. //sbit add=P3^0;
  6. //sbit dec=P3^4;
  7. //uchar lingweiflag;
  8. //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
  9. //uint num;
  10. //uint qian,bai,shi,ge;//定义拆字变量
  11. //  /**ms级延时子程序**/
  12. //  void delay(uint x)
  13. //{
  14. //   uint i,j;                       
  15. //   for(i=0;i<x;i++)     
  16. //    for(j=0;j<110;j++);
  17. //  }
  18. //  void display()
  19. //{
  20. //   qian=num/1000;//取得千位数字
  21. //   bai=num%1000/100;//取得百位数字
  22. //   shi=num%100/10;//取得十位数字
  23. //   ge=num%10;//取得个位数字
  24. //
  25. //   P2=0xfe;//数码管千位显示位
  26. //   P1=table[qian];//数码管千位数值显示
  27. //   delay(2);//延时
  28. //
  29. //   P2=0xfd;//数码管百位显示位
  30. //   P1=table[bai];//数码管百位数值显示
  31. //   delay(2);//延时
  32. //
  33. //   P2=0xfb;//数码管十位显示位
  34. //   P1=table[shi];//数码管十位数值显示
  35. //   delay(2);//延时
  36. //
  37. //   P2=0xf7;//数码管个位显示位
  38. //   P1=table[ge];//数码管个位数值显示
  39. //   delay(2);//延时
  40. // }
  41. //  void keyscan()
  42. //{
  43. //   if(add==0)
  44. // {         
  45. //    delay(5);
  46. //    if(add==0)
  47. //  {
  48. //     num++;
  49. //     while(!add);
  50. //     lingweiflag=0;
  51. //    }
  52. //   }
  53. //   if(dec==0&&lingweiflag==0)
  54. // {         
  55. //    delay(5);
  56. //    if(dec==0)
  57. //  {
  58. //     num--;
  59. //     while(!dec);
  60. //    }
  61. //   }
  62. //   if(num>9999)
  63. // {
  64. //    num=0;
  65. //   }
  66. //   if(num==0)
  67. // {
  68. //    num=0;
  69. //    lingweiflag=1;
  70. //   }
  71. // }
  72. //  void main()
  73. //{
  74. //   while(1)
  75. // {
  76. //    display();
  77. //    keyscan();
  78. //   }
  79. //  }
 楼主| zhamatu 发表于 2020-10-25 17:16 | 显示全部楼层
  1. //程序二:解决按键控制数码管带来闪灭显示问题的程序
  2. #include<reg51.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit add=P3^0;
  6. sbit dec=P3^4;
  7. uchar lingweiflag;
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9
  9. uint num;
  10. uint qian,bai,shi,ge;//定义拆字变量。
  11.   /**ms级延时子程序**/
  12.   void delay(uint x)
  13. {
  14.    uint i,j;                       
  15.    for(i=0;i<x;i++)     
  16.     for(j=0;j<110;j++);
  17.   }
  18.   void display()
  19. {
  20.    qian=num/1000;//取得千位数字
  21.    bai=num%1000/100;//取得百位数字
  22.    shi=num%100/10;//取得十位数字
  23.    ge=num%10;//取得个位数字

  24.    P2=0xfe;//数码管千位显示位
  25.    P1=table[qian];//数码管千位数值显示
  26.    delay(2);//延时

  27.    P2=0xfd;//数码管百位显示位
  28.    P1=table[bai];//数码管百位数值显示
  29.    delay(2);//延时

  30.    P2=0xfb;//数码管十位显示位
  31.    P1=table[shi];//数码管十位数值显示
  32.    delay(2);//延时

  33.    P2=0xf7;//数码管个位显示位
  34.    P1=table[ge];//数码管个位数值显示
  35.    delay(2);//延时
  36. }
  37.   void keyscan()
  38. {
  39.    if(add==0)
  40. {         
  41. //  delay(5);
  42.     display();
  43.     if(add==0)
  44.   {
  45.      num++;
  46. //   while(!add);
  47.      while(!add)
  48.    {
  49.       display();
  50.      }
  51.      lingweiflag=0;
  52.     }
  53.    }
  54.    if(dec==0&&lingweiflag==0)
  55. {         
  56. //  delay(5);
  57.     display();
  58.     if(dec==0)
  59.   {
  60.      num--;
  61. //   while(!dec);
  62.      while(!dec)
  63.      display();
  64.     }
  65.    }
  66.    if(num>9999)
  67. {
  68.     num=0;
  69.    }
  70.    if(num==0)
  71. {
  72.     num=0;
  73.     lingweiflag=1;
  74.    }
  75. }
  76.   void main()
  77. {
  78.    while(1)
  79. {
  80.     display();
  81.     keyscan();
  82.    }
  83.   }
 楼主| zhamatu 发表于 2020-10-25 17:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部