兼职项目 智能自行车
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

239 lines
7.8 KiB

C51 COMPILER V9.56.0.0 IRIN 04/06/2022 21:56:10 PAGE 1
C51 COMPILER V9.56.0.0, COMPILATION OF MODULE IRIN
OBJECT MODULE PLACED IN IRIN.OBJ
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE IRIN.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include "IRIN.h"
2 #include "i2c.h"
3
4 uint journey;
5 uint journey1;
6 extern uchar pwm_left;
7 unsigned int b;
8 unsigned int c;
9 extern uint time1;
10 extern uchar pwm_val_left;
11 unsigned int b2;
12 unsigned int c2;
13
14 uint money=7;
15 uint sudu=0;
16
17 uint count=0; //栅格是一圈20个
18
19 uchar ms=0;
20 uint speed=0;
21 uint r_s=0;
22
23 bit state=0;
24 bit s0=0;
25 bit flas=0;
26
27 uchar sec=0;
28 uchar sec1=0;
29
30 /*******************************************************************************
31 * 函 数 名 : delay
32 * 函数功能 : 延时函数,i=1时,大约延时10us
33 *******************************************************************************/
34 void delay11(int i)
35 {
36 1 while(i--);
37 1 }
38
39 void IRIN_Init(void)
40 {
41 1 TMOD=0x01;//定时器1工作方式1
42 1 TH0=0x3C;
43 1 TL0=0xb0;
44 1 ET0=1;
45 1 TH1=0XFc;
46 1 TL1=0X18;
47 1 ET1=1;
48 1 TR1=1;
49 1 TR0=1;
50 1 EA=1;
51 1 EX1=1;
52 1 IT1=1;
53 1
54 1 }
55
C51 COMPILER V9.56.0.0 IRIN 04/06/2022 21:56:10 PAGE 2
56 void display()
57 {
58 1 if(state==0)
59 1 {
60 2 sudu=At24c02Read(10);
61 2 if(money>7)
62 2 {
63 3 money=At24c02Read(5);
64 3 }
65 2 LcdSetCursor(0,0);
66 2 LcdShowStr(0,0,"Speed:");
67 2 Lcd1602_Write_Data(0x30+sudu/100%10);
68 2 Lcd1602_Write_Data(0x30+sudu/10%10);
69 2 Lcd1602_Write_Data(0x30+sudu%10);
70 2 LcdShowStr(10,0,"KM/h");
71 2
72 2 LcdShowStr(0,1,"L:");
73 2 Lcd1602_Write_Data(journey/10000%10+0x30);
74 2 Lcd1602_Write_Data(journey/1000%10+0x30);
75 2 Lcd1602_Write_Data(journey/100%10+0x30);
76 2 Lcd1602_Write_Data(journey/10%10+0x30);
77 2 Lcd1602_Write_Data(journey%10+0x30);
78 2 LcdShowStr(7,1,"M");
79 2
80 2 if(journey>1000)
81 2 {
82 3 money=(journey-1000)*0.002+7;
83 3 At24c02Write(5,money);
84 3 }
85 2 money=money*10;
86 2 LcdShowStr(9,1,"Q:");
87 2 Lcd1602_Write_Data(money/1000%10+0x30);
88 2 Lcd1602_Write_Data(money/100%10+0x30);
89 2 Lcd1602_Write_Data(money/10%10+0x30);
90 2 LcdShowStr(14,1,".");
91 2 Lcd1602_Write_Data(money%10+0x30);
92 2
93 2 money=money/10;
94 2
95 2
96 2 }
97 1 }
98
99
100
101 void keypros()
102 {
103 1 if(k2==0)
104 1 {
105 2 delay11(1000); //消抖处理
106 2 if(k2==0)
107 2 {
108 3 sudu=At24c02Read(10); //读取EEPROM地址1内的数据
109 3
110 3 b2=At24c02Read(1);
111 3 c2=At24c02Read(8);
112 3 journey=(b2<<8) | c2;
113 3
114 3 money=At24c02Read(5);
115 3
116 3 }
117 2 while(!k2);
C51 COMPILER V9.56.0.0 IRIN 04/06/2022 21:56:10 PAGE 3
118 2 }
119 1
120 1 if(k1==0)
121 1 {
122 2 delay11(1000); //消抖处理
123 2 if(k1==0)
124 2 {
125 3 flas=1;
126 3
127 3 }
128 2 while(!k1);
129 2 }
130 1 if(k4==0)
131 1 {
132 2 delay11(1000); //消抖处理
133 2 if(k4==0)
134 2 {
135 3 if(pwm_left>=20)
136 3 {
137 4 pwm_left=1;
138 4 }
139 3 else
140 3 {
141 4 pwm_left++;
142 4 }
143 3 }
144 2 while(!k4);
145 2 }
146 1
147 1 }
148
149 void time0() interrupt 1 //定时器 0
150 {
151 1 TH0=0x3C;
152 1 TL0=0xb0; //50ms定时
153 1 ms++; //变量50ms加一
154 1 if(ms%5==0) s0=~s0;
155 1
156 1
157 1 if(ms%10==0) //500ms定时
158 1 {
159 2
160 2 if(sec!=0) sec--;
161 2 if(sec1!=0) sec1--;
162 2 ms=0; //清零变量
163 2 EX1=0; //关闭外部中断,保证变量在计算的时候不会增加
164 2 r_s=count; //因为是500ms检测一次转动数据,所以要想一秒转动的圈数是 speed=count*2 ,但是光栅是一圈2
-0格,所以还要除以20;
165 2 //综合一下,一秒转动的圈数就是 speed=count*2/20 ==》 speed=counr/10;
166 2 count=0; //清零变量
167 2 EX1=1; //打开外部中断
168 2 speed=speed*0.5+(r_s*6)*0.5; // 这里r_s是一秒走的圈数,然后乘以60得到60秒走的圈数,单位变成了
- r/min; 总方式 speed=count/10*60; ==>> speed=count*6;
169 2
170 2 if(flas==0)
171 2 {
172 3 sudu=(0.15*speed);
173 3 At24c02Write(10,sudu);
174 3
175 3 journey=journey+(r_s*2.5/20);
176 3 journey1=journey;
177 3 c = journey & 0x00FF;
C51 COMPILER V9.56.0.0 IRIN 04/06/2022 21:56:10 PAGE 4
178 3 At24c02Write(8,c);
179 3
180 3 delay11(1000);
181 3 b=journey1>>8;
182 3 At24c02Write(1,b);
183 3 }
184 2 else
185 2 {
186 3 journey=0;
187 3 money=7;
188 3 At24c02Write(1,journey);
189 3 At24c02Write(8,journey);
190 3 At24c02Write(5,money);
191 3 flas=0;
192 3 }
193 2 }
194 1 }
195
196 void int1() interrupt 2 //外部中断 1
197 {
198 1
199 1 count++; //中断每触发一次,变量加一
200 1
201 1 }
202
203
204
205
206
207
208
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1016 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)