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

📄 lcd.c

📁 脉冲宽度的测量
💻 C
字号:
#include <REGX52.H>
#include "LCD1602.h"
#include "Key2.h"
#include "CeLiang.h"
#include "delay.h"

void IntToStr(uint t, uchar *str, uchar n) 
{	uchar a[5]; uchar i2, j;                                 	
	a[0]=(t/10000)%10;         //取得整数值到数组         	
	a[1]=(t/1000)%10;                                     	
	a[2]=(t/100)%10;                                      	
	a[3]=(t/10)%10;                                       	
	a[4]=(t/1)%10;             	
                                                      
	for(i2=0; i2<5; i2++)         //转成ASCII码              	
		a[i2]=a[i2]+'0';                                    	
	for(i2=0; a[i2]=='0' && i2<=3; i2++);
    for(j=5-n; j<i2; j++)       //填充空格                 	
		{ *str=' ';  str++; }                   	                             	
	for(; i2<5; i2++)                                       	
		{ *str=a[i2]; str++; }  //加入有效的数字           	
	*str='\0'; 
}


main()
{   data uchar i,j,k,key;
    data uchar TempBuffer[10];   //LCD字符显示缓存

    max=0;
	LCD_Initial();      //LCD初始化

	/*延时2s*/
    for(i=100;i>0;--i)
	  delay_1ms(20);
    
	/*提示输入脉冲的测量次数*/
	GotoXY(0,0);
	Print(" Input Measure  ");
	GotoXY(0,1);
	Print(" Number(10-64): ");
    
	/*此while循环为测量次数输入模块*/
	while(1)
	{  key=keyScan();
	   switch(key)
         { case(11):
            LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+1;
       	    IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
	       break;

	       case(12):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+2;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

    	   case(13):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+3;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;
	
	       case(21):
            LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏 
	        max=max*10+4;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

   	       case(22):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+5;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

   	       case(23):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+6;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

	       case(31):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+7;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

   	       case(32):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+8;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

   	       case(33):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+9;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;

   	       case(42):
	        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
            max=max*10+0;
	        IntToStr(max,&TempBuffer[0],3);
            GotoXY(0,0);
            Print(&TempBuffer[0]);
           break;
       }//switch
	   if(max>64)
	    {  max=64;
		   IntToStr(max,&TempBuffer[0],3);
           GotoXY(0,0);
           Print(&TempBuffer[0]);
		}
	   if(max>9)break;
	}//while
    /*输入测量次数模块结束*/

	/*显示输入的数2s*/
    for(i=100;i>0;--i)
	  delay_1ms(20);


    for(i=0;i<=max;++i)
    {  time[i].second=0;
       time[i].m_second=0;
    }

    GotoXY(0,0);
	Print(" Please press 1 ");
	GotoXY(0,1);
	Print("    to start    ");
	key=0;

    /*下面为测量脉冲过程*/
    while(keyScan()!=11);
    LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
    GotoXY(0,0);
    Print("  LOADING.....  ");
    int0_initial();
    while(puls_num<max);//测量结束	
    /*测量脉冲结束,下面为结果计算和显示*/
	
    LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
    GotoXY(0,1);
    Print("  Measrue end!  ");

  	/*显示输入的数2s*/
    for(i=100;i>0;i--)
	  delay_1ms(20);

    GotoXY(0,0);
    Print(" Please press 2 ");
    GotoXY(0,1);
    Print("     To show    "); 
	while(keyScan()!=12);
    
    /*显示模块,按"->"键增加,按"<-"键减少*/
	i=max-1;
	while(1)
    {  LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
	            
	   if(time[i].m_second/100>0)k=3;      //三位数
       else if(time[i].m_second/10>0)k=2;  //二位数
	        else k=1;                     //一位数
	   if(time[i].second/100>0)j=3;      //三位数
       else if(time[i].second/10>0)j=2;  //二位数
	        else j=1;                     //一位数
	   
	   GotoXY(0,0);
       Print(" Times:");
	   IntToStr(i,&TempBuffer[0],j);
       GotoXY(7,0);
       Print(&TempBuffer[0]);
      
       GotoXY(2,1);
       Print("Data:");
       GotoXY(7+j,1);
       Print(".");

	   IntToStr(time[i].second,&TempBuffer[0],j);
       GotoXY(7,1);
       Print(&TempBuffer[0]);

	   IntToStr(time[i].m_second,&TempBuffer[0],k);
       GotoXY(8+j,1);
       Print(&TempBuffer[0]);
       
       GotoXY(8+j+k,1);
       Print("ms");

	   while(1)
	   { key=keyScan();
	     if(key==41&&i>1)
		 { i=i-1;break;}
	     if(key==43&&i<max-1)
		 { i=i+1;break;}
	   }
	}//while
    while(1);
}

⌨️ 快捷键说明

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