📄 traffic.lst
字号:
C51 COMPILER V7.06 TRAFFIC 08/15/2008 01:20:34 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TRAFFIC
OBJECT MODULE PLACED IN traffic.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE traffic.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*程序功能:89S52单片机交通灯模拟程序*************/
2 /*设计者:吴海林**********************/
3 /*硬件说明:P0口作为数码管段控,P1口作为数码管位近代
4 P2口作为交通灯信号模拟P2.0为绿,P2.1为黄
5 P2.3为红,P2.4为绿,P2.5为黄,P2.6为红*****************/
6 #include "reg52.h"
7 #include "absacc.h"
8 typedef unsigned char uchar;
9 sbit green1=P2^0;
10 sbit red1=P2^1;
11 sbit yellow1=P2^2;
12 sbit green2=P2^3;
13 sbit red2=P2^4;
14 sbit yellow2=P2^5;
15 void Init_Timer0(void);
16 void contr(void);
17 void time(void);
18 void State0(void);
19 void State1(void);
20 void State2(void);
21 void State3(void);
22 void display(uchar data *p); //显示子程序
23 void deltime(uchar s);
24 uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //在ROM中定义数字转换码;
25 uchar data b[4];
26 uchar data flag,state,second,n=0;
27 void main(void)
28 { Init_Timer0();
29 1 TR0=1;
30 1 EA=1;
31 1 ET0=1;
32 1 contr();
33 1
34 1 }
35 /*定时器0初始化*/
36 void Init_Timer0(void)
37 {
38 1 TMOD=0x01;
39 1 TH0=0x3c;
40 1 TL0=0xb0;
41 1 }
42 /*交通灯控制程序*/
43 void contr(void)
44 {loop:state=0;
45 1 second=40;
46 1 while(1)
47 1 {switch(state)
48 2 {case 0: if(second==0){state=1;second=5;display(b);}
49 3 else State0();break;
50 3 case 1: if(second==0){state=2;second=20;display(b);}
51 3 else State1();break;
52 3 case 2: if(second==0){state=3;second=5;display(b);}
53 3 else State2();break;
54 3 case 3: if(second==0){state=0;second=40;display(b);}
55 3 else State3();break;
C51 COMPILER V7.06 TRAFFIC 08/15/2008 01:20:34 PAGE 2
56 3 default: goto loop;
57 3 }
58 2 }
59 1 }
60 /*不同状态时,调用相应的处理程序*/
61 void State0(void)
62 { green1=1;red1=0;yellow1=0;
63 1 green2=0;red2=1;yellow2=0;
64 1 b[0]=second%10;b[1]=second/10;
65 1 b[2]=(second+5)%10;b[3]=(second+5)/10;
66 1 display(b);
67 1 }
68 void State1(void)
69 { green1=0;red1=0;yellow1=1;
70 1 green2=0;red2=1;yellow2=0;
71 1 b[0]=second%10;b[1]=second/10;
72 1 b[2]=second%10;b[3]=second/10;
73 1 display(b);
74 1 }
75 void State2(void)
76 { green1=0;red1=1;yellow1=0;
77 1 green2=1;red2=0;yellow2=0;
78 1 b[0]=(second+5)%10;b[1]=(second+5)/10;
79 1 b[2]=second%10;b[3]=second/10;
80 1 display(b);
81 1 }
82 void State3(void)
83 { green1=0;red1=1;yellow1=0;
84 1 green2=0;red2=0;yellow2=1;
85 1 b[0]=second%10;b[1]=second/10;
86 1 b[2]=second%10;b[3]=second/10;
87 1 display(b);
88 1 }
89 /*显示程序*/
90 void display( uchar data *p)
91 { uchar data i,sel;
92 1 sel=0x01;
93 1 for(i=0;i<=3;i++)
94 1 {P0=tab[*p];
95 2 P1=~sel;
96 2 deltime(1);
97 2 P1=0xff;
98 2 p++;
99 2 sel=sel<<1;
100 2 }
101 1 }
102 /*延时程序,使数码管每次点亮的时间足够长*/
103 void deltime(uchar s)
104 { uchar data j;
105 1 while(s--)
106 1 {for(j=0;j<=125;j++);}
107 1 }
108 /*中断程序*/
109 void time(void) interrupt 1 using 1
110 {TR0=0;
111 1 TH0=0x3c;
112 1 TL0=0xb0;
113 1 n++;
114 1 if(n==20)
115 1 {n=0;second--;}
116 1 TR0=1;
117 1 }
C51 COMPILER V7.06 TRAFFIC 08/15/2008 01:20:34 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 393 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 3
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 + -