您当前的位置:五五电子网电子知识单片机-工控设备51单片机WJ-V4.1 按键设置时间定时器控制8位7段数码管 正文
WJ-V4.1 按键设置时间定时器控制8位7段数码管

WJ-V4.1 按键设置时间定时器控制8位7段数码管

点击数:7940 次   录入时间:03-04 11:56:05   整理:http://www.55dianzi.com   51单片机
  1. /***********************************************
  2. K17~K20分别8位周几-小时-分钟-秒,并按K1
  3. 开跑。 PhyPsy.Chen
  4. ***********************************************/
  5. #include <AT89X52.H>
  6. #include"SEG.H"

  7. bit g_b = 0;
  8. uchar day_value = 0; //设置全局变量: 供显示的数据
  9. uchar hrs_value = 0;
  10. uchar min_value = 0;
  11. uchar sec_value = 0;


  12. void main(void)
  13. {
  14. RST_MR = 0; //74HC595 reset
  15. RST_MR = 1;
  16. EA_G = 1; //forbid putout
  17. Timer0_Init(); //init timer
  18. Key_SetTime(); // set time data for display, and press K1 to start timer
  19. display(day_value, hrs_value, min_value, sec_value); //display
  20. }

  21. void Timer0_Init(void) //init timer
  22. {
  23. TMOD = 0x10; //timer1, way 2
  24. TH1 = 0xDC; //10ms/cycle
  25. TL1 = 0x00;
  26. ET1 = 1;
  27. TR1 = 0;
  28. EA = 1;
  29. }

  30. void Timer_0(void) interrupt 3 using 3
  31. {
  32. statIC uchar s_t = 0;
  33. TH1 = 0xDC;
  34. TL1 = 0x00;
  35. s_t++;
  36. if (s_t == 100) // 1sec
  37. {
  38. s_t = 0;
  39. if (!g_b)
  40. {
  41. g_b = 1; //to turn on timer symbol
  42. }
  43. }
  44. }

  45. void Key_SetTime(void) // set time data
  46. {
  47. unsigned char i = 0;
  48. unsigned char j = 0;
  49. unsigned char k = 0;
  50. while (1)
  51. {
  52. if (!K17) //set day
  53. {
  54. delayX1ms(10);
  55. if(!K17)
  56. {
  57. while (!K17);
  58. day_value += 1;
  59. if (day_value == 7)
  60. {
  61. day_value = 0;
  62. }
  63. }
  64. }

  65. if(!K18) //set hours
  66. {
  67. delayX1ms(10);
  68. if (!K18)
  69. {
  70. while (!K18);
  71. hrs_value += 1;
  72. if (hrs_value == 24)
  73. {
  74. hrs_value = 0;
  75. }
  76. }
  77. }

  78. if (!K19) // set minutes
  79. {
  80. delayX1ms(10);
  81. if(!K19)
  82. {
  83. while (!K19);
  84. min_value += 1;
  85. if (min_value == 60)
  86. {
  87. min_value = 0;
  88. }
  89. }
  90. }

  91. if (!K20) //set seconds
  92. {
  93. delayX1ms(10);
  94. if(!K20)
  95. {
  96. while (!K20);
  97. sec_value += 10;
  98. if (sec_value == 60)
  99. {
  100. sec_value = 0;
  101. }
  102. }
  103. }

  104. EditData(day_value, hrs_value, min_value, sec_value); // display set value

  105. P3 = 0x0F;
  106. i = P3;
  107. P3 = 0xF0;
  108. j = P3;
  109. P3 = 0xFF;
  110. if ((i | j) == 0xEE) // if K1 was pressed, start timer1
  111. {
  112. TR1 = 1;
  113. break;
  114. }
  115. }
  116. }



  117. 本文关键字:数码管  定时器  51单片机单片机-工控设备 - 51单片机