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 + -
显示快捷键?