当前位置:首页 > 单片机 > 单片机
[导读] 程序运行开始,A灯先亮5秒,然后灭了到B灯亮5秒,B再灭再到C灯亮5秒,C灭,程序结束,不再运行。这程序该怎么写?用定时器精确定时……晶振11.092MHZ。#include"REG52.H"/***/sbitLED_A=P1^0;sbitLED_B

程序运行开始,A灯先亮5秒,然后灭了到B灯亮5秒,B再灭再到C灯亮5秒,C灭,程序结束,不再运行。这程序该怎么写?用定时器精确定时……晶振11.092MHZ。

  1. #include"REG52.H"

  2. /*

  3. *

  4. */

  5. sbitLED_A=P1^0;

  6. sbitLED_B=P1^1;

  7. sbitLED_C=P1^2;

  8. unsignedcharTIME_BASE;

  9. unsignedcharMACT_ENDB;

  10. unsignedcharRece_Errp;

  11. /*

  12. *定时器初始化

  13. */

  14. voidSystemInit(void)

  15. {

  16. TMOD=0x01;

  17. TH0=(65536-45872)/256;//定时50ms//晶振:11.0592MHZ

  18. TL0=(65536-45872)%256;

  19. ET0=1;

  20. TR0=1;

  21. EA=1;

  22. }

  23. intmain(void)

  24. {

  25. SystemInit();

  26. while(1)

  27. {

  28. /*程序一开始上电Rece_Errp=0定时器5秒加一次*/

  29. if(Rece_Errp==0)

  30. {

  31. LED_A=0;//A亮5秒

  32. LED_B=1;//B是灭

  33. LED_C=1;//C是灭

  34. }

  35. /*判断是否5秒时间到*/

  36. elseif(Rece_Errp==1)

  37. {

  38. LED_A=1;//A是灭

  39. LED_B=0;//B亮5秒

  40. LED_C=1;//C是灭

  41. }

  42. elseif(Rece_Errp==2)

  43. {

  44. LED_A=1;//A是灭

  45. LED_B=1;//B是灭

  46. LED_C=0;//C亮5秒

  47. }

  48. else

  49. {

  50. LED_A=1;//A是灭

  51. LED_B=1;//B是灭

  52. LED_C=1;//C是灭

  53. while(1);//程序运行到这里停止

  54. }

  55. }

  56. }

  57. voidTimer0_IRQ(void)interrupt1

  58. {

  59. TH0=(655365-45872)/256;

  60. TL0=(655365-45872)%256;

  61. /*进入中断50ms+1次*/

  62. TIME_BASE++;

  63. if(TIME_BASE==20)//20ms*50ms=刚好等于1000ms也就是1秒

  64. {

  65. TIME_BASE=0;

  66. MACT_ENDB++;//一秒加一次

  67. if(MACT_ENDB==5)//等于刚好5秒时间到

  68. {

  69. MACT_ENDB=0;

  70. Rece_Errp++;//用来切换LEDA、B、C5秒灭

  71. }

  72. }

  73. }


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭