📄 traffic.lst
字号:
C51 COMPILER V8.02 TRAFFIC 10/08/2000 11:39:27 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TRAFFIC
OBJECT MODULE PLACED IN Traffic.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Traffic.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 //P1_0表示南北红灯
3 sbit P1_0=P1^0;
4 //P1_1表示南北绿灯
5 sbit P1_1=P1^1;
6 //P1_2表示南北黄灯
7 sbit P1_2=P1^2;
8 //P1_3表示东西红灯
9 sbit P1_3=P1^3;
10 //P1_4表示东西绿灯
11 sbit P1_4=P1^4;
12 //P1_5表示东西黄灯
13 sbit P1_5=P1^5;
14 sbit P1_6=P1^6;
15 sbit P1_7=P1^7;
16
17 sbit P3_4=P3^4;
18 sbit P3_5=P3^5;
19 /*时序:
20 启动时先南北红灯亮 东西绿灯亮
21 25秒后东西绿灯转为黄灯每秒闪一次
22 则亮0.5秒再灭0.5秒 闪5次之后
23 转为南北绿灯亮东西红灯亮
24 25秒后南北绿灯转为黄灯每秒闪一次
25 则亮0.5秒再灭0.5秒 闪5次
26 然后循环 则60秒一个循环*/
27 unsigned char Count;
28 unsigned char HalfSecond;
29
30 void Timer0_Init(void)
31 {
32 1 TMOD=0x01;//T0为16位定时器计数器
33 1 TH0=-50000/256;
34 1 TL0=-50000%256;//用12兆晶振时为50毫秒溢出一次
35 1 }
36
37 void IO_Init(void)
38 {
39 1 P0=0x00;
40 1 P1=0x00;
41 1 P1=0x11; //南北红灯亮 东西绿灯亮
42 1 P3=0xff;
43 1 }
44 void System_Init(void)
45 {
46 1 IO_Init();
47 1 Timer0_Init();
48 1 TR0=1;
49 1 ET0=1;
50 1 EA=1;
51 1 }
52 //用两位LED的动态显示以显示南北或东西方向的时间
53 code unsigned char Table[10]={0x3f,};
54 xdata unsigned char Dis_Buf[2]={0};
55
C51 COMPILER V8.02 TRAFFIC 10/08/2000 11:39:27 PAGE 2
56 void NmDelay(unsigned char n)
57 {
58 1 unsigned char i=0;
59 1 while(n--)
60 1 {
61 2 for(i=0;i<125;)
62 2 i++;
63 2 }
64 1 }
65 void PreDisplay(void)
66 {
67 1 unsigned char Temp=0;
68 1 Temp=HalfSecond/2;
69 1 if(Temp>25&&Temp<30)
70 1 Temp-=25;
71 1 if(Temp>30&&Temp<55)
72 1 Temp-=30;
73 1 if(Temp>55)
74 1 Temp-=55;
75 1 Dis_Buf[0]=Temp/10;
76 1 Dis_Buf[1]=Temp%10;
77 1 }
78
79 void Display(void)
80 {
81 1 PreDisplay();
82 1 P0=Table[Dis_Buf[1]];
83 1 P3_5=0;
84 1 NmDelay(10);
85 1 P0=Table[Dis_Buf[0]];
86 1 P3_5=1;
87 1 P3_4=0;
88 1 NmDelay(10);
89 1 }
90
91 main()
92 {
93 1 SP=0x60;
94 1 System_Init();
95 1 while(1)
96 1 {
97 2 Display();
98 2 }
99 1 }
100
101 void Timer0(void) interrupt 1 using 1
102 {
103 1 //TR0=1;
104 1 ET0=0;
105 1 if(Count++==10)
106 1 {
107 2 Count=0;
108 2 HalfSecond++;
109 2 if(HalfSecond==50)
110 2 {
111 3 P1_4=0;
112 3 P1_5=1;
113 3 }
114 2 if(HalfSecond>50&&HalfSecond<60)
115 2 {
116 3 if(((HalfSecond-50)%2)!=0)
117 3 P1_5=0;
C51 COMPILER V8.02 TRAFFIC 10/08/2000 11:39:27 PAGE 3
118 3 else P1_5=1;
119 3 }
120 2 if(HalfSecond==60)
121 2 {
122 3 P1_5=0;
123 3 P1_0=0;
124 3 P1_1=1;
125 3 P1_3=1;
126 3 }
127 2 if(HalfSecond==110)
128 2 {
129 3 P1_1=0;
130 3 P1_2=1;
131 3 }
132 2 if(HalfSecond>110&&HalfSecond<120)
133 2 {
134 3 if(((HalfSecond-110)%2)!=0)
135 3 P1_2=0;
136 3 else P1_2=1;
137 3 }
138 2 if(HalfSecond>=120)
139 2 {
140 3 HalfSecond=0;
141 3 P1_0=1;
142 3 P1_4=1;
143 3 P1_3=0;
144 3 }
145 2 }
146 1 ET0=1;
147 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 294 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = 2 ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -