📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 05/29/2010 11:53:43 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define juli 1
5 //------------------- 定义1602液晶控制管脚-------------------------------------------------
6 sbit RS=P2^0;
7 sbit RIW=P2^1;
8 sbit E=P2^2;
9 sbit int0=P3^2;
10 sbit int1=P3^3;
11 sbit kuan=P3^4;
12 uchar i;
13
14 uint timecount=0;
15 uchar biaozhi=0; //第一个开关
16 float jishi1=0;
17 float jishi2=0;
18 float speed;
19 float length;
20
21 //-------------------------定义数组----------------------------------------------------------
22 uchar tab[16]=" ";
23
24
25 void delay(uint xms) //按键扫描延时子程序
26 {
27 1 uint i,j;
28 1 for(i=xms;i>0;i--)
29 1 for(j=110;j>0;j--);
30 1 }
31 //---------------------1602写指令时序开始------------------------------------------------------
32 void wi(uchar com)
33 {
34 1 uint i=200;
35 1 RS=1;
36 1 RIW=1;
37 1 RS=0;
38 1 RIW=0;
39 1 E=0;
40 1 E=1;
41 1 P0=com;
42 1 while(i--);
43 1 E=0;
44 1 }
45 //---------------------1602写指令时序结束---------------------------------------------------
46 //---------------------1602写数据时序开始--------------------------------------------------
47 void wd(uchar dat)
48 {
49 1 uint i=200;
50 1 RS=0;
51 1 RIW=1;
52 1 RS=1;
53 1 RIW=0;
54 1 E=0;
55 1 E=1;
C51 COMPILER V7.50 MAIN 05/29/2010 11:53:43 PAGE 2
56 1 P0=dat;
57 1 while(i--);
58 1 E=0;
59 1 }
60 //---------------------1602写数据时序结束------------------------------------------------
61 void chushi() //1602初始化程序
62 {
63 1
64 1 wi(0x01); //清屏
65 1 wi(0x06); //设置输入方式 AC自动加1,显示不发生移位
66 1 wi(0x0F); //显示开关控制 开显示 开光标 闪烁
67 1 wi(0x38); //功能设置 双行显示 5*8点阵 八位数据
68 1 }
69
70 void xianshi_speed(void)
71 {
72 1 unsigned long zancun=speed/1000;
73 1 tab[6]=zancun%10+0x30;
74 1 zancun=zancun/10;
75 1 tab[5]=zancun%10+0x30;
76 1 zancun=zancun/10;
77 1 tab[3]='.';
78 1 tab[4]=zancun%10+0x30;
79 1 zancun=zancun/10;
80 1 tab[2]=zancun%10+0x30;
81 1 zancun=zancun/10;
82 1 tab[1]=zancun%10+0x30;
83 1 zancun=zancun/10;
84 1 tab[0]=zancun%10+0x30;
85 1 wi(0x89);
86 1 for(i=0;i<16;i++)
87 1 {wd(tab[i]);} //显示数组
88 1 }
89 void xianshi_length(void)
90 {
91 1 unsigned long zancun=length/100;
92 1 tab[6]=zancun%10+0x30;
93 1 zancun=zancun/10;
94 1 tab[5]=zancun%10+0x30;
95 1 zancun=zancun/10;
96 1 tab[4]='.';
97 1 tab[3]=zancun%10+0x30;
98 1 zancun=zancun/10;
99 1 tab[2]=zancun%10+0x30;
100 1 zancun=zancun/10;
101 1 tab[1]=zancun%10+0x30;
102 1 zancun=zancun/10;
103 1 tab[0]=zancun%10+0x30;
104 1 wi(0xc9);
105 1 for(i=0;i<16;i++)
106 1 {wd(tab[i]);} //显示数组
107 1 }
108
109 void main()
110 {
111 1 IT0=1;
112 1 EX0=1;
113 1
114 1 IT1=1;
115 1 EX1=1;
116 1
117 1 PT1=1;
C51 COMPILER V7.50 MAIN 05/29/2010 11:53:43 PAGE 3
118 1
119 1 TMOD=0x11; //T0工作为16位计数器(方式1),T1工作方式为16位定时器
120 1 TH0=0; //计数为65536
121 1 TL0=0; //
122 1 TH1=0; //定时器采用定时4ms. 初值为4000
123 1 TL1=0;
124 1 //TR1=1; //TR1=1,控制开关闭合,计数脉冲进入T1计数器,启动定时
125 1 //TR0=1; //TR0=1,控制开关闭合,计数脉冲进入T1计数器,启动计数
126 1 ET0=1; //定时器0开中断
127 1 ET1=1; //定时器1开中断
128 1
129 1 EA=1;
130 1
131 1
132 1 chushi(); //初始化
133 1
134 1 wi(0x80);
135 1 wd('s');
136 1 wd('p');
137 1 wd('d');
138 1 wd('(');
139 1 wd('m');
140 1 wd('/');
141 1 wd('s');
142 1 wd(')');
143 1 wd('=');
144 1 wi(0xc0);
145 1 wd('l');
146 1 wd('e');
147 1 wd('n');
148 1 wd('(');
149 1 wd('c');
150 1 wd('m');
151 1 wd(')');
152 1 wd(' ');
153 1 wd('=');
154 1 while(1)
155 1 {
156 2 speed=41000/jishi1*1000000;
157 2 length=speed*jishi2/1000000;
158 2 if(speed>41000000000&&biaozhi==0)
159 2 {
160 3 speed=0;
161 3 length=0;
162 3 biaozhi=0;
163 3 EX0=0;
164 3 EX1=1;
165 3 }
166 2 xianshi_speed();
167 2 xianshi_length();
168 2 if(kuan==0)
169 2 {
170 3 wi(0xc7);
171 3 wd(0xff);
172 3 }
173 2 else if(kuan==1)
174 2 {
175 3 wi(0xc7);
176 3 wd(' ');
177 3 }
178 2 }
179 1
C51 COMPILER V7.50 MAIN 05/29/2010 11:53:43 PAGE 4
180 1 }
181
182
183 void INT0_interrupt() interrupt 0 using 1
184 {
185 1 //delay(30);
186 1 //int0=1;
187 1 delay(10);
188 1 if(int0==0)
189 1 {
190 2 switch(biaozhi)
191 2 {
192 3 case 1:
193 3 {
194 4 jishi1=timecount*65536+TH1*256+TL1;
195 4 EX0=0;
196 4 EX1=1;
197 4 biaozhi=2;
198 4 }break;
199 3 case 3:
200 3 {
201 4 biaozhi=0;
202 4 EX0=0;
203 4 EX1=1;
204 4 }break;
205 3 default :break;
206 3 }
207 2 }
208 1 }
209
210 void INT1_interrupt() interrupt 2 using 1
211 {
212 1 //delay(30);
213 1 //int1=1;
214 1 delay(10);
215 1 if(int1==0)
216 1 {
217 2 if(biaozhi==0) //开始计数
218 2 {
219 3 biaozhi=1;
220 3 TR1=1;
221 3
222 3 EX1=0;
223 3 EX0=1;
224 3 }
225 2 else if(biaozhi==2)
226 2 {
227 3 jishi2=timecount*65536+TH1*256+TL1;
228 3 biaozhi=3;
229 3 TR1=0; //停止计时
230 3 TH1=0; //计数初值重装载
231 3 TL1=0;
232 3 timecount=0;
233 3
234 3 EX1=0;
235 3 EX0=1;
236 3 }
237 2 }
238 1 }
239
240
241 void t1(void) interrupt 3 using 0 //T1中断服务
C51 COMPILER V7.50 MAIN 05/29/2010 11:53:43 PAGE 5
242 {
243 1 TH1=0; //计数初值重装载
244 1 TL1=0;
245 1 timecount++;
246 1 if(timecount==65535)
247 1 {
248 2 timecount=0;
249 2 }
250 1 }
251
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1260 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 8
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 + -