testboard_rec.lst
来自「PIC MCU开发用的一个小工具,用于对某些外设芯片子程序的调试,有2个按键2x」· LST 代码 · 共 685 行 · 第 1/3 页
LST
685 行
230: 出口:无
231: ******************************************/
232: void d10mS(void)
233: {
234: unsigned int i;
235: for(i=909;i>0;i--);
236: }
237: /******************************************
238: 串行移位寄存器操作函数ttl14164()
239: 作用:传送8BIT数据到74hc164中
240: 入口:待传送的8位数据;
241: 出口:无;
242: 说明:字节传送顺序为MSB->LSB
243: *******************************************/
244: void ttl74164(unsigned char data)
245: {
246: unsigned char temp,cnt;
247: temp=data;
248: for(cnt=8;cnt>0;cnt--)
249: {
250: if(temp&0x80)
251: dis_data=1;
252: else
253: dis_data=0;
254: temp=temp<<1;
255: dis_clk=0;
256: dis_clk=1;
257: }
258: dis_data=0;
259: }
260:
261: /******************************************
262: 字符LCD命令写入函数writ_com
263: 作用:向LCD写入命令字节;
264: 入口:待传送的8位数据;
265: 出口:无;
266: 说明:一个字节的命令
267: *******************************************/
268: void writ_com(unsigned char command)
269: {
270: dis_rs=0;
271: ttl74164(command);
272: dis_en=1;
273: dis_en=0;
274: d256uS();
275: }
276: /******************************************
277: 字符LCD命令写入函数writ_com
278: 作用:向LCD写入命令字节;
279: 入口:待传送的8位数据;
280: 出口:无;
281: 说明:一个字节的命令
282: *******************************************/
283: void writ_data(unsigned char data)
284: {
285: dis_rs=1;
286: ttl74164(data);
287: dis_en=1;
288: dis_en=0;
289: d256uS();
290: }
291: /******************************************
292: 字符LCD初始化函数lcd_init
293: 作用:软件上电初始化
294: 入口:无
295: 出口:无
296: ******************************************/
297: void lcd_init(void)
298: {
299: d10mS();d10mS();d10mS();d10mS();
300: writ_com(0x30);
301: d4mS();
302: dis_en=1;dis_en=0;d256uS();
303: dis_en=1;dis_en=0;d256uS();
304: writ_com(0x38);writ_com(0x01);
305: d4mS();
306: writ_com(0x06); writ_com(0x0c);
307: }
308: /******************************************
309: 存储数据转换为显示数据disp_prodata()
310: 作用:将十六进制转成ASCII码
311: 入口:被转换数据
312: 出口:转换后的数据
313: ******************************************/
314: unsigned char data_tab(unsigned char data)
315: {
316: unsigned char temp;
317: data&=0x0f;
318: switch(data)
319: {
320: case 0: temp='0';break;
321: case 1: temp='1';break;
322: case 2: temp='2';break;
323: case 3: temp='3';break;
324: case 4: temp='4';break;
325: case 5: temp='5';break;
326: case 6: temp='6';break;
327: case 7: temp='7';break;
328: case 8: temp='8';break;
329: case 9: temp='9';break;
330: case 10: temp='A';break;
331: case 11: temp='B';break;
332: case 12: temp='C';break;
333: case 13: temp='D';break;
334: case 14: temp='E';break;
335: case 15: temp='F';break;
336: }
337: return(temp);
338: }
339: /******************************************
340: 显示刷新函数disp_one_row
341: 作用:将数据送入到LCD中
342: 入口:datapt->数据缓冲区首地址
343: cnt---->数据个数(不大于20,超出部分不显示)
344: row---->选择上下行(0上行显示,1下行显示)
345: 出口:无
346: ******************************************/
347: void disp_one_row(unsigned char *datapt,unsigned char cnt,unsigned char row)
348: {
349: unsigned char count;
350: if(row==0)
351: {writ_com(0x80);} //第一行显示地址设置
352: else
353: {writ_com(0xc0);} //第二行显示地址设置
354: //防止数据溢出
355: if(cnt>=20)
356: {cnt=20;count=0;}
357: else
358: {count=20-cnt;}
359: for(;cnt>0;cnt--)
360: {
361: writ_data(*datapt);
362: datapt++;
363: }
364: for(;count>0;count--)
365: {writ_data(' ');}
366: writ_com(0x0c); //开显示
367: }
368: /******************************************
369: 显示刷新函数disp_welcome
370: 作用:显示起画面
371: 入口:无
372: 出口:无
373: ******************************************/
374: void disp_loge(const unsigned char *pt,unsigned char cnt,unsigned char par)
375: {
376: if(par==0)
377: {writ_com(0x80);}
378: else
379: {writ_com(0xc0);}
380: for(;cnt>0;cnt--)
381: {writ_data(*pt);pt++;}
382: writ_com(0x0c);
383: }
384: /******************************************
385: 向指定位置写数据
386: 作用:想指定位置写数
387: 入口:写入数据data,写入位置addr(0~39)
388: 出口:无
389: ******************************************/
390: void disp_onedata(unsigned char data,unsigned char addr)
391: {
392: if(addr>19)
393: {addr-=20;addr+=0xc0;}
394: else
395: {;addr+=0x80;}
396: writ_com(addr);
397: writ_data(data);
398: }
399: /************************************************************
400: 总线空闲等待函数waitfree()
401: 作用:等待总线空闲
402: 入口:无
403: 出口:无
404: ************************************************************/
405: void waitfree(void)
406: {
407: TMR1ON=0;
408: TMR1IF=0;
409: TMR1L=0x65;
410: TMR1H=0xf0;
411: TMR1ON=1; //运行T1
412: while(!TMR1IF)
413: {
414: if(RA1)
415: {
416: TMR1L=0x65;
417: TMR1H=0xf0;
418: TMR1ON=1; //运行T1
419: }
420: }
421: }
422: /************************************************************
423: 延时函数d1mS()
424: 作用:延时1mS
425: ************************************************************/
426: void d1mS(void)
427: {
428: unsigned char cnt;
429: for(cnt=123;cnt>0;cnt--);
430: asm("nop");asm("nop");
431: }
432: /************************************************************
433: 延时函数d7uS()
434: 作用:延时7uS
435: ************************************************************/
436: void d7uS(void)
437: {
438: asm("nop");
439: asm("nop");
440: }
441: /************************************************************
442: 延时函数d17uS()
443: 作用:延时17uS
444: ************************************************************/
445: void d17uS(void)
446: {
447: asm("goto $+1");asm("goto $+1");
448: asm("goto $+1");asm("goto $+1");
449: asm("goto $+1");asm("goto $+1");
450: }
451: /************************************************************
452: 延时函数d100uS()
453: 作用:延时100uS
454: ************************************************************/
455: void d100uS(void)
456: {
457: unsigned char cnt;
458: for(cnt=11;cnt>0;cnt--);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?