其实很简单就是通过亮灭的时间占比来实现的,我们肉眼分辨不出它瞬间的亮灭,只会合成一个亮度
所以通过此方法能实现功能。这边就直接贴代码了。
1. #include <STC15F2K60S2.H> 2. 3. unsigned int count=0; 4. unsigned int num=10; 5. #define k1 P33 6. #define k2 P32 7. void Delay5ms() //@11.0592MHz 8. { 9. unsigned char i, j; 10. 11. i = 54; 12. j = 199; 13. do 14. { 15. while (--j); 16. } while (--i); 17. } 18. 19. 20. void Timer0Init(void) /16 1T 21. { 22. AUXR |= 0x80; //?????1T?? 23. TMOD &= 0xF0; //??????? 24. TMOD |= 0x01; //??????? 25. TL0 = 0xD7; //?????? 26. TH0 = 0xFD; //?????? 27. TF0 = 0; //??TF0?? 28. TR0 = 1; 29. EA=1; 30. ET0=1; //???0???? 31. } 32. 33. 34. 35. void main() 36. { 37. Timer0Init(); 38. 39. P2=P2&0x1f|0x80; 40. P0=0xff; 41. while(1) 42. { 43. if(k1==0){ 44. Delay5ms(); if(k1==0) 45. num=10; 46. 47. } 48. 49. if(k2==0){ 50. Delay5ms(); if(k2==0) 51. num=20; 52. } 53. 54. 55. if(P31==0){ 56. Delay5ms(); if(P31==0) 57. num=30; 58. } 59. 60. if(P30==0){ 61. Delay5ms(); 62. if(P30==0) 63. num=40; 64. 65. } 66. 67. } 68. 69. 70. 71. 72. 73. void timer0() interrupt 1 74. { 75. TL0 = 0xD7; //?????? 76. TH0 = 0xFD; //50us 77. count++; 78. 79. if(count>num)count=0; 80. 81. if(count>=10) 82. { 83. P2=P2&0x1f|0x80; 84. P02=1; 85. 86. } 87. else 88. { 89. P2=P2&0x1f|0x80; 90. P02=0; 91. 92. } 93. 94. 95. 96. } 97. 98.