📄 can
字号:
193 1 DIN=1;
194 1 }
195
196
197
198
199 ///////////////////////////////////////////////////////////////////////////////////////////
200 ///////////////////////////////////////////////////////////////////////////////////////////
201 //LCD_init: LCD初始化
202 void LCD_init(void)
203 {
204 1 RST=0;
205 1 delay_1ms();
206 1 RST=1;
207 1 delay_1ms();
208 1 LCD_Write_Byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
209 1 LCD_Write_Byte(0xd0,0);//设定液晶偏置电压
210 1 LCD_Write_Byte(0x20,0);//使用基本指令 水平寻址
211 1
212 1 //LCD_Write_Byte(0x0C,0);//设定显示模式,正常显示
213 1 LCD_Write_Byte(0x0D,0); //设定显示模式,反白显示
214 1 }
215
216 /////////////////////////////////////////////////////////////
217 /////////////////////////////////////////////////////////////
218 //LCD_Set_XY: 设置LCD坐标函数 用于准备显示高度是‘8个点’的汉字或字母
219 //输入参数:X:0-83 Y:0-5
220 void LCD_Set_XY(u8 X, u8 Y)
221 {
222 1 LCD_Write_Byte(0x40 | Y, 0);// 竖
223 1 LCD_Write_Byte(0x80 | X, 0);// 横
224 1 }
225
226 /////////////////////////////////////////////////////////////
227 /////////////////////////////////////////////////////////////
228 //LCD_Clear: LCD清屏函数
229 void LCD_Clear(void)
230 {
231 1 u8 x;
232 1 u8 y;
233 1 LCD_Set_XY(0,0);
234 1
235 1 for(y=0;y<=5;y++)
236 1 {
237 2 for(x=0;x<=83;x++)
238 2 {
239 3 LCD_Write_Byte(0x00,1);
240 3 }
241 2 }
C51 COMPILER V8.02 二节点 03/11/2012 14:11:13 PAGE 5
242 1 }
243
244
245
246 /////////////////////////////////////////////////////////////
247 /////////////////////////////////////////////////////////////
248 //LCD_Write_ABC: 显示8(宽)*16(高)点阵列数字字母符号等半角类
249 //输入参数: x:
250 // y:
251 // ABC:显示的字符的序号
252
253
254 /////////////////////////////////////////////////////////////
255 /////////////////////////////////////////////////////////////
256 //LCD_Write_Chinese: 显示16(宽)*16(高)点阵列汉字等半角类
257 //输入参数:
258 // x:
259 // y:
260 // Chinese:显示的汉字的序号
261 void LCD_Write_Charater(u8 x,u8 y,u8 charater)
262 {
263 1 unsigned char i;
264 1 LCD_Set_XY(x*8,y);
265 1 for(i=0;i<8;i++)
266 1 {
267 2 LCD_Write_Byte2(charater_table[charater*16+i],1);
268 2 }
269 1 LCD_Set_XY(x*8, y+1);// 列,页
270 1 for(i=8; i<16;i++)
271 1 {
272 2 LCD_Write_Byte2(charater_table[charater*16+i],1);
273 2 }
274 1 }
275
276 void LCD_Write_Chinese(u8 x, u8 y,u8 Chinese)
277 {
278 1 unsigned char i;
279 1
280 1 LCD_Set_XY(x*8, y);// 列,页
281 1 for(i=0; i<16;i++)
282 1 {
283 2 LCD_Write_Byte2(Chinese_table[Chinese*32+i],1);
284 2 }
285 1
286 1 LCD_Set_XY(x*8, y+1);// 列,页
287 1 for(i=16; i<32;i++)
288 1 {
289 2 LCD_Write_Byte2(Chinese_table[Chinese*32+i],1);
290 2 }
291 1 }
292
293
294 /////////////////////////////////////////////////////////////////////////////////////////////
295 void anjian()
296 {
297 1 if(p15==0)//按5键在光照等级和温湿度之间切换
298 1 {
299 2 Delay(5000);
300 2 if(p15==0)
301 2 {
302 3 qh=~qh;
303 3 while(!p15);
C51 COMPILER V8.02 二节点 03/11/2012 14:11:13 PAGE 6
304 3 xsg();
305 3 xswsd();
306 3 }
307 2 }
308 1
309 1
310 1
311 1 if(p12==0)
312 1 {
313 2 Delay(500);
314 2 if(p12==0)
315 2 {
316 3 CAN_yuan();
317 3
318 3 while(!p12);
319 3 }
320 2
321 2 CAN_RXD();
322 2 qh=1;
323 2 xswsd();
324 2
325 2
326 2
327 2 }
328 1
329 1
330 1 if(p13==0)
331 1 {
332 2 Delay(3000);
333 2 if(p13==0)
334 2 {
335 3 while(!p13);
336 3 qieh=0;
337 3 PWM_Num++;
338 3 if(PWM_Num>=5)
339 3 PWM_Num=0;
340 3 qh=0;
341 3 xsg();
342 3 }
343 2 }
344 1
345 1 if(p11==0)//按1键,把光照等级发送过去
346 1 {
347 2 Delay(5000);
348 2
349 2 if(p11==0)
350 2 {
351 3 CAN_TXD();
352 3 Delay(100);
353 3 Delay(100);
354 3 while(!p11);
355 3 LCD_Clear();
356 3 LCD_Write_Chinese(0,0,4);//光
357 3 LCD_Write_Chinese(2,0,5);//照
358 3 LCD_Write_Chinese(4,0,6);//等
359 3 LCD_Write_Chinese(6,0,7);//级
360 3 LCD_Write_Chinese(0,2,9);//已
361 3 LCD_Write_Chinese(2,2,10);//;发
362 3 LCD_Write_Chinese(4,2,11);//送
363 3 Delay(60000);
364 3 Delay(60000);
365 3 Delay(60000);
C51 COMPILER V8.02 二节点 03/11/2012 14:11:13 PAGE 7
366 3 Delay(60000);
367 3
368 3 }
369 2 }
370 1 }
371 ///////////////////////////////////////////////////主函数////////////////////////////////////
372 void main(void)
373 {
374 1 bit Flag;
375 1 RST=0;
376 1 Delay(200);
377 1 Delay(200);
378 1 RST=1;
379 1 LCD_init();
380 1 LCD_Clear();
381 1
382 1 SJA_RST = 0; //复位引脚
383 1 Delay(100);
384 1 SJA_RST = 1;//CAN总线复位管脚
385 1 Delay(100);
386 1 Delay(100);
387 1 Delay(100);
388 1 SJA_CS = 0;//CAN总线片选有效
389 1 Delay(100);
390 1 SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
391 1 //CPU初始化
392 1
393 1 CAN_init(); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -