当前位置:   article > 正文

【51单片机】共阳数码管的动态显示_51单片机共阳极动态数码管

51单片机共阳极动态数码管

一、设计思路

二、题目

三、编程

  1. #include "reg52.h"
  2. unsigned char yu = 12 ;
  3. unsigned char SMG_duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  4. 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
  5. 0xbf,0x7f}; //定义了一个数组,里面有18个元素,对应0~F,最后两个分别是一横和一点。
  6. void SelectHC573(unsigned char channel)
  7. {
  8. switch(channel)
  9. {
  10. case 4:
  11. P2 =( P2 & 0x1f ) | 0x80 ;
  12. break;
  13. case 5:
  14. P2 =( P2 & 0x1f ) | 0xa0 ;
  15. break;
  16. case 6:
  17. P2 =( P2 & 0x1f ) | 0xc0 ;
  18. break;
  19. case 7:
  20. P2 =( P2 & 0x1f ) | 0xe0 ;
  21. break;
  22. }
  23. }
  24. void DisplaySMG_Bit(unsigned char value, unsigned char pos)
  25. {
  26. SelectHC573(6);
  27. P0 = 0x01 << pos;
  28. SelectHC573(7);
  29. P0 = value;
  30. }
  31. void DelaySMG(unsigned int t)
  32. {
  33. while(t--);
  34. }
  35. void Display_Dynamic()
  36. {
  37. DisplaySMG_Bit(SMG_duanma[2],0);
  38. DelaySMG(500);
  39. DisplaySMG_Bit(SMG_duanma[0],1);
  40. DelaySMG(500);
  41. DisplaySMG_Bit(SMG_duanma[1],2);
  42. DelaySMG(500);
  43. DisplaySMG_Bit(SMG_duanma[8],3);
  44. DelaySMG(500);
  45. DisplaySMG_Bit(SMG_duanma[16],4);
  46. DelaySMG(500);
  47. DisplaySMG_Bit(SMG_duanma[16],5);
  48. DelaySMG(500);
  49. DisplaySMG_Bit(SMG_duanma[yu/10],6);
  50. DelaySMG(500);
  51. DisplaySMG_Bit(SMG_duanma[yu%10],7);
  52. DelaySMG(500);
  53. }
  54. void Delay(unsigned char t)
  55. {
  56. while(t--)
  57. {
  58. Display_Dynamic();
  59. }
  60. }
  61. void main()
  62. {
  63. while(1)
  64. {
  65. Display_Dynamic();
  66. yu++;
  67. if(yu>12) yu=1;
  68. Delay(100);
  69. }
  70. }

非常简单,唯一的注意事项是动态显示时用到的Delay函数里面要调用Display_Dynamic

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/408764
推荐阅读
相关标签
  

闽ICP备14008679号