⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testboard1.lst

📁 PIC MCU开发用的一个小工具,用于对某些外设芯片子程序的调试,有2个按键2x20的字符LCD,3个I/O,1个UART,非常好用,包含SCHPCB 以及初始化C代码.
💻 LST
📖 第 1 页 / 共 3 页
字号:
   235:          asm("nop");asm("nop");

   236:         }

   237: /************************************************************

   238: 数据发送函数data_send()

   239:   作用:发送1字节数据

   240:   入口:待发送的数据

   241:   出口:无

   242: ************************************************************/

   243:         void data_send(unsigned char data)

   244:         {

   245:          unsigned char cnt;      

   246:          GIE=0;                         //关闭总中断

   247:          SCB=0;                         

   248:          SCB_T=0;               //获得总线控制权

   249:          d100uS();              //起始信号(低电平1mS)

   250:          d100uS();

   251:          for(cnt=8;cnt>0;cnt--)

   252:                 {

   253:                  SCB=1;                         //同步头信号

   254:                  d7uS();

   255:                  if(data&0x80)

   256:                         SCB=1;                  //输出数据1

   257:                  else

   258:                         SCB=0;                  //输出数据0

   259:                  d17uS();data<<=1;

   260:                  SCB=0;                         //位结束信号

   261:                  d7uS();

   262:                 }

   263:          SCB=1;

   264:          SCB_T=1;               //放弃总线控制权

   265:          INTF=0;

   266:          GIE=1;                         //开总中断

   267:         }

   268: /************************************************************

   269: 数据接收函数data_rec()

   270:   作用:接收1字节数据

   271:   入口:待发送的数据

   272:   出口:接收到的一字节数据

   273: ************************************************************/

   274:         unsigned char data_rec(void)

   275:         {

   276:          unsigned char cnt,temp;

   277:          temp=0;

   278:          SCB_T=1;

   279:          for(cnt=8;cnt>0;cnt--)

   280:                 {

   281:                  while(SCB);            //等待低电平

   282:                  while(!SCB);           //等待同步信号头

   283:                  temp<<=1;

   284:                  d17uS();                       //延时到数据区

   285:                  if(SCB)                        //读取数据

   286:                         temp|=0x01;

   287:                  else

   288:                         temp&=0xfe;

   289:                 }

   290:          return(temp);

   291:         }

   292: /******************************************

   293: LCD操作延时函数d256us();

   294:   作用:延时256uS;

   295:   入口:无;

   296:   出口:无;

   297:   说明:用于LCD的操作延时

   298: *******************************************

   299:         void d256uS(void)

   300:         {

   301:          unsigned char i;

   302:          for(i=83;i>0;i--);

   303:         }

   304: /******************************************

   305: 延时函数d4ms();

   306:   作用:延时4ms

   307:   入口:无

   308:   出口:无

   309:   说明:用于LCD初始化

   310: ******************************************

   311:         void d4mS(void)

   312:         {

   313:          unsigned int i;

   314:          for(i=443;i>0;i--);

   315:         }

   316: /******************************************

   317: 延时函数d10ms();

   318:   作用:延时10ms

   319:   入口:无

   320:   出口:无

   321: ******************************************

   322:         void d10mS(void)

   323:         {

   324:          unsigned int i;

   325:          for(i=909;i>0;i--);

   326:         }

   327: /******************************************

   328: 串行移位寄存器操作函数ttl14164()

   329:   作用:传送8BIT数据到74hc164中

   330:   入口:待传送的8位数据;

   331:   出口:无;

   332:   说明:字节传送顺序为MSB->LSB

   333: *******************************************

   334:         void ttl74164(unsigned char data)

   335:         {

   336:          unsigned char temp,cnt;

   337:          temp=data;

   338:          for(cnt=8;cnt>0;cnt--)

   339:                 {

   340:                  if(temp&0x80)

   341:                         dis_data=1;

   342:                  else

   343:                         dis_data=0;

   344:                  temp=temp<<1;

   345:                  dis_clk=0;

   346:                  dis_clk=1;

   347:         }

   348:          dis_data=0;

   349:         }

   350: 

   351: /******************************************

   352: 字符LCD命令写入函数writ_com

   353:   作用:向LCD写入命令字节;

   354:   入口:待传送的8位数据;

   355:   出口:无;

   356:   说明:一个字节的命令

   357: *******************************************

   358:         void writ_com(unsigned char command)

   359:         {

   360:          dis_rs=0;

   361:          ttl74164(command);

   362:          dis_en=1;

   363:          dis_en=0;

   364:          d256uS();

   365:         }

   366: /******************************************

   367: 字符LCD命令写入函数writ_com

   368:   作用:向LCD写入命令字节;

   369:   入口:待传送的8位数据;

   370:   出口:无;

   371:   说明:一个字节的命令

   372: *******************************************

   373:         void writ_data(unsigned char data)

   374:         {

   375:          dis_rs=1;

   376:          ttl74164(data);

   377:          dis_en=1;

   378:          dis_en=0;

   379:          d256uS();       

   380:         }

   381: /******************************************

   382: 字符LCD初始化函数lcd_init

   383:   作用:软件上电初始化

   384:   入口:无

   385:   出口:无

   386: ******************************************

   387:         void lcd_init(void)

   388:         {

   389:          d10mS();d10mS();d10mS();d10mS();

   390:          writ_com(0x30);

   391:          d4mS();

   392:          dis_en=1;dis_en=0;d256uS();

   393:          dis_en=1;dis_en=0;d256uS();

   394:          writ_com(0x38);writ_com(0x01);

   395:          d4mS();

   396:          writ_com(0x06); writ_com(0x0c);

   397:         }

   398: /******************************************

   399: 存储数据转换为显示数据disp_prodata()

   400:   作用:将十六进制转成ASCII码

   401:   入口:被转换数据

   402:   出口:转换后的数据

   403: ******************************************

   404:         unsigned char data_tab(unsigned char data)

   405:         {

   406:          unsigned char temp;

   407:          data&=0x0f;

   408:          switch(data)

   409:                 {

   410:                  case 0: temp='0';break;

   411:                  case 1: temp='1';break;

   412:                  case 2: temp='2';break;

   413:                  case 3: temp='3';break;

   414:                  case 4: temp='4';break;

   415:                  case 5: temp='5';break;

   416:                  case 6: temp='6';break;

   417:                  case 7: temp='7';break;

   418:                  case 8: temp='8';break;

   419:                  case 9: temp='9';break;

   420:                  case 10: temp='A';break;

   421:                  case 11: temp='B';break;

   422:                  case 12:       temp='C';break;

   423:                  case 13: temp='D';break;

   424:                  case 14:       temp='E';break;

   425:                  case 15: temp='F';break;

   426:                 }

   427:          return(temp);

   428:         }

   429: /******************************************

   430: 显示刷新函数disp_one_row

   431:   作用:将数据送入到LCD中

   432:   入口:datapt->数据缓冲区首地址

   433:                 cnt---->数据个数(不大于20,超出部分不显示)

   434:                 row---->选择上下行(0上行显示,1下行显示)

   435:   出口:无

   436: ******************************************

   437:         void disp_one_row(unsigned char *datapt,unsigned char cnt,unsigned char row)

   438:         {

   439:          unsigned char count;

   440:          if(row==0)

   441:                 {writ_com(0x80);}       //第一行显示地址设置

   442:          else

   443:                 {writ_com(0xc0);}       //第二行显示地址设置

   444:         //防止数据溢出

   445:          if(cnt>=20)    

   446:                 {cnt=20;count=0;}

   447:          else

   448:                 {count=20-cnt;}

   449:          for(;cnt>0;cnt--)

   450:                 {

   451:                  writ_data(*datapt);

   452:                  datapt++;

   453:                 }

   454:          for(;count>0;count--)

   455:                 {writ_data(' ');}

   456:          writ_com(0x0c);                //开显示

   457:         }

   458: /******************************************

   459: 显示刷新函数disp_welcome

   460:   作用:显示起画面

   461:   入口:无

   462:   出口:无

   463: ******************************************

   464:         void disp_loge(const unsigned char *pt,unsigned char cnt,unsigned char par)

   465:         {

   466:          if(par==0)

   467:                 {writ_com(0x80);}

   468:          else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -