天天看点

LED模拟交通灯

LED模拟交通灯

上图是我的电路图 

下面是我根据2种不同的语言和2种不同的延时写的4个程序                但我仿真的时候不知道问啥时间总不对(现还没解决)

一种   循环汇编延时

Code:

  1.  ORG 0100H                                          ; 预留空间   
  2. MAIN:        
  3. LOOP:MOV P0,#0xf3h     ;这两句的作用 让东位铺灯亮  南北红的亮       
  4.      ACALL DTIME   
  5.          MOV R0,#5                               ;这几句的作用? 让东西黄灯,南北红的   
  6. LOOP1:    
  7.          MOV P0,#0F5H   
  8.          ACALL DTIME1   
  9.          MOV P0,#0F7H   
  10.          ACALL DTIME1   
  11.         DJNZ R0,LOOP1   
  12.         MOV P0,#0DEH                          ;南北绿灯,东西红灯   
  13.     ACALL DTIME   
  14.         MOV R0,#5   
  15. LOOP2:    MOV P0,#0EEH                      ;南北黄灯闪,东西红灯     
  16.         ACALL DTIME1   
  17.              MOV P0,#0FEH   
  18.              ACALL DTIME1   
  19.              DJNZ R0,LOOP2   
  20. JMP LOOP   
  21. DTIME:                                                 ;延时   
  22.    MOV R5,#60   
  23. x:    MOV R7,#200   
  24. DEL1: MOV R6,#248   
  25.       NOP   
  26. DEL2: DJNZ R6,DEL2   
  27.       DJNZ R7,DEL1   
  28.         DJNZ R5,X   
  29.   RET;   
  30. DTIME1:MOV r5,#5   
  31. x1:   MOV R7,#200                            ;延时   
  32. DEL3: MOV R6,#248   
  33.       NOP   
  34. DEL4: DJNZ R6,DEL4   
  35.       DJNZ R7,DEL3   
  36.         djnz r5,x1   
  37.   RET;   
  38. END   

二种:   中断实现延时汇编

Code:

  1.  ORG 0100H                                          ; 预留空间   
  2. START:      
  3. LOOP:MOV P0,#11110011B                       ;这两句的作用?  让东位铺灯亮  南北红的亮       
  4.      ACALL DTIME   
  5.      MOV R0,#5                               ;这几句的作用? 让东西黄灯,南北红的   
  6. LOOP1:    
  7.     MOV P0,#0F5H   
  8.      ACALL DTIME1   
  9.      MOV P0,#0F7H   
  10.      ACALL DTIME1   
  11.      DJNZ R0,LOOP1   
  12.     MOV P0,#0DEH                          ;南北绿灯,东西红灯   
  13.     ACALL DTIME   
  14.     MOV R0,#5   
  15. LOOP2:    MOV P0,#0EEH                      ;南北黄灯闪,东西红灯     
  16.           ACALL DTIME1   
  17.              MOV P0,#0FEH   
  18.              ACALL DTIME1   
  19.              DJNZ R0,LOOP2   
  20. JMP LOOP   
  21. DTIME1:                                                 ;延时   
  22.  MOV TMOD,#01H   
  23.  MOV TH0,#3CH   
  24.  MOV TL0,#0B0H   
  25.  MOV R6,#50   
  26.  SETB TR0   
  27.  WM:JBC TF0,NEXT1   
  28.     AJMP WM   
  29.  NEXT1:DJNZ R6,NEXT2   
  30.    RET   
  31.  NEXT2:MOV TH0,#3CH   
  32.        MOV TL0,#0B0H   
  33.           AJMP WM   
  34.   RET;   
  35. DTIME: MOV TMOD,#01H   
  36.         MOV TH0,#3CH   
  37.         MOV TL0,#0B0H   
  38.         MOV R6,#100   
  39.           MOV R7,#6   
  40.         SETB TR0   
  41.  LM:JBC TF0,NEXT   
  42.     AJMP LM   
  43.  NEXT:DJNZ R6,NEXT4   
  44.       DJNZ R7,NEXT3   
  45.         AJMP JS   
  46.  NEXT3:MOV R6,#100   
  47.  NEXT4:MOV TH0,#3CH   
  48.        MOV TL0,#0B0H   
  49.        AJMP LM   
  50.      JS:RET   
  51. END   

三种:   keil  c  循环实现延时

Code:

  1. #include <AT89X51.h>   
  2. char c,x;   
  3. bit f;   
  4. char sum=0;   
  5. xhd();   
  6. dtime(unsigned int i)   
  7. {unsigned char j;   
  8.  while(i--)   
  9.  {for(j=120;j>0;j--);}   
  10. }   
  11. main()   
  12. {TMOD=0x01;   
  13.  TH0=(65536-50000)/256;   
  14.  TL0=(65536-50000)%256;   
  15.  EA=1;   
  16.  ET0=1;   
  17.  TR0=1;   
  18.  P0=0xff;   
  19. xhd();   
  20. }   
  21. xhd()   
  22. {while(1)   
  23. {    
  24.  P0=0xF3;   
  25.  dtime(600);   
  26. for(x=0;x<3;x++)   
  27. {   
  28.  P0=0xF5;   
  29.  dtime(150);   
  30. P0=0xf7;   
  31. dtime(150);   
  32. }   
  33.  P0=0xde;   
  34.  dtime(600);   
  35. for(x=0;x<3;x++)   
  36. {   
  37. P0=0xee;   
  38. dtime(150);   
  39. P0=0xfe;   
  40. dtime(150);   
  41. }   
  42. }   
  43. }  

  4  :  keil c  中断实现延时

Code:

  1. #include <AT89X51.h>   
  2. char c,x,r;   
  3. bit f;   
  4. char sum=0;   
  5. xhd();   
  6. main()   
  7. {TMOD=0x01;   
  8.  TH0=(65536-50000)/256;   
  9.  TL0=(65536-50000)%256;   
  10.  EA=1;   
  11.  ET0=1;   
  12.  TR0=1;   
  13.  P0=0xff;   
  14.  xhd();   
  15. }   
  16. void t()interrupt 1 using 1   
  17. {TH0=(65536-50000)/256;   
  18.  TL0=(65536-50000)%256;   
  19.  c++;   
  20. if(c==r)   
  21. { c=0;   
  22.   f=1;   
  23. }   
  24. }   
  25. xhd()   
  26. {while(1)   
  27. {    
  28.  r=20;P0=0xF3;   
  29.  while(sum<10)   
  30.  {while(!f);   
  31.   f=0;   
  32.   sum++;   
  33. }   
  34. sum=0;   
  35. for(x=0;x<3;x++)   
  36. {   
  37.  r=8;P0=0xF5;   
  38.  while(sum<1)   
  39.  {while(!f);   
  40.  f=0;    
  41.  sum++;   
  42. }   
  43. sum=0;   
  44. P0=0xf7;   
  45. r=8;   
  46. while(sum<1)   
  47.  {while(!f);   
  48.   f=0;   
  49. sum++;   
  50. }   
  51. sum=0;   
  52. }   
  53.  r=20;P0=0xde;   
  54.  while(sum<10)   
  55.  {while(!f);   
  56.  f=0;   
  57.  sum++;   
  58. }   
  59. sum=0;   
  60. for(x=0;x<3;x++)   
  61. {   
  62. r=8;P0=0xee;   
  63.  while(sum<1)   
  64.  {while(!f);   
  65.  f=0;   
  66.   sum++;   
  67. }   
  68. sum=0;   
  69. r=8;P0=0xf3;   
  70.  while(sum<1)   
  71.  {while(!f);   
  72.  f=0;   
  73.  sum++;   
  74. }   
  75. sum=0;   
  76. }   
  77. }   
  78. }