精华内容
下载资源
问答
  • 只要给trig一个超过20us的高电平,那么echo就会产生高电平,直到超声波回到超声波模块中,整个程序的难点在于怎么计数高电平时间,而输入捕获可以捕获echo口的高电平时间,正好做到这一点。其实用通用定时器简单的...

    这个超声波测距是利用定时器中的输入捕获为主要技术手段设计而成

    测距模块:

    超声波测距的型号是HC_SR04,这个超声波模块有一个控制端trig,和一个测距口echo。只要给trig一个超过20us的高电平,那么echo就会产生高电平,直到超声波回到超声波模块中,整个程序的难点在于怎么计数高电平时间,而输入捕获可以捕获echo口的高电平时间,正好做到这一点。其实用通用定时器简单的计数功能也可以做到这一点,准备下一步采用这一方法写一个程序。

    显示模块:

    显示距离可以直接调用mdk中usart.c文件中的printf,可以直接打印距离。

    设置最小距离

    这是这个超声波测距中的另一难点,我们是直接使用串口向单片机传数据,但是串口只能传字符串,这个时候我们就需要利用ASCII码将一个个字符转换成数字。串口是一位一位传数据的,会将数据存在一个缓冲数组(USART_RX_BUF【】)中,并且在传数据的过程中我们会得到这个数据的长度len。利用这个式子将接收到的字符串转化成数字:

     for(i=0;i<len;i++)
       {
          s1+=(USART_RX_BUF[len-1-i]-48)*table1[i];
       }

    int table1[]={1,10,100,1000};

    0的ASCII码是48,根据这个可以求得其他数据的ASCII码。

    报警模块

    当测得的距离小于串口设置的阀值,串口显示error,LED灯闪烁。

    接下来是我的程序:

    这是超声波模块利用到的GPIO口的初始化和输入捕获的初始化

    #include "timer.h"
    #include "led.h"
    #include "usart.h"
    #include "delay.h"
    
    
    
    //¶¨Ê±Æ÷5ͨµÀ1ÊäÈ벶»ñÅäÖÃ
    //arr£º×Ô¶¯ÖØ×°Öµ(TIM2,TIM5ÊÇ32λµÄ!!)
    //psc£ºÊ±ÖÓÔ¤·ÖƵÊý
    void TIM5_CH1_Cap_Init(u32 arr,u16 psc)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	NVIC_InitTypeDef NVIC_InitStructure;
      TIM_ICInitTypeDef  TIM5_ICInitStructure;
    	
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);  	//TIM5ʱÖÓʹÄÜ    
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 	//ʹÄÜPORTAʱÖÓ	
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIOA0
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//ËÙ¶È100MHz
    	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //ÏÂÀ­
    	GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯PA0
    	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //GPIOA0
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//¸´Óù¦ÄÜ
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	//ËÙ¶È100MHz
    	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
    	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //ÏÂÀ­
    	GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯PA0
    
    	GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0¸´ÓÃλ¶¨Ê±Æ÷5
      
    	  
    	TIM_TimeBaseStructure.TIM_Prescaler=psc;  //¶¨Ê±Æ÷·ÖƵ
    	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ
    	TIM_TimeBaseStructure.TIM_Period=arr;   //×Ô¶¯ÖØ×°ÔØÖµ
    	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
    	
    	TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);
    	
    
    	//³õʼ»¯TIM5ÊäÈ벶»ñ²ÎÊý
    	TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 	Ñ¡ÔñÊäÈë¶Ë IC1Ó³Éäµ½TI1ÉÏ
      TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;	//ÉÏÉýÑز¶»ñ
      TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //Ó³Éäµ½TI1ÉÏ
      TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;	 //ÅäÖÃÊäÈë·ÖƵ,²»·ÖƵ 
      TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 ÅäÖÃÊäÈëÂ˲¨Æ÷ ²»Â˲¨
      TIM_ICInit(TIM5, &TIM5_ICInitStructure);
    		
    	TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//ÔÊÐí¸üÐÂÖÐ¶Ï ,ÔÊÐíCC1IE²¶»ñÖжÏ	
    	
      TIM_Cmd(TIM5,ENABLE ); 	//ʹÄܶ¨Ê±Æ÷5
    
     
      NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//ÇÀÕ¼ÓÅÏȼ¶3
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;		//×ÓÓÅÏȼ¶3
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQͨµÀʹÄÜ
    	NVIC_Init(&NVIC_InitStructure);	//¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷¡¢
    	
    	
    }
    //²¶»ñ״̬
    //[7]:0,ûÓгɹ¦µÄ²¶»ñ;1,³É¹¦²¶»ñµ½Ò»´Î.
    //[6]:0,»¹Ã»²¶»ñµ½µÍµçƽ;1,ÒѾ­²¶»ñµ½µÍµçƽÁË.
    //[5:0]:²¶»ñµÍµçƽºóÒç³öµÄ´ÎÊý(¶ÔÓÚ32λ¶¨Ê±Æ÷À´Ëµ,1us¼ÆÊýÆ÷¼Ó1,Òç³öʱ¼ä:4294Ãë)
    u8  TIM5CH1_CAPTURE_STA=0;	//ÊäÈ벶»ñ״̬		    				
    u32	TIM5CH1_CAPTURE_VAL;	//ÊäÈ벶»ñÖµ(TIM2/TIM5ÊÇ32λ)
    //¶¨Ê±Æ÷5ÖжϷþÎñ³ÌÐò	 
    void TIM5_IRQHandler(void)
    { 		    
    
     	if((TIM5CH1_CAPTURE_STA&0X80)==0)//»¹Î´³É¹¦²¶»ñ	
    	{
    		if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//Òç³ö
    		{	     
    			if(TIM5CH1_CAPTURE_STA&0X40)//ÒѾ­²¶»ñµ½¸ßµçƽÁË
    			{
    				if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßµçƽ̫³¤ÁË
    				{
    					TIM5CH1_CAPTURE_STA|=0X80;		//±ê¼Ç³É¹¦²¶»ñÁËÒ»´Î
    					TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;
    				}else TIM5CH1_CAPTURE_STA++;
    			}	 
    		}
    		if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//²¶»ñ1·¢Éú²¶»ñʼþ
    		{	
    			if(TIM5CH1_CAPTURE_STA&0X40)		//²¶»ñµ½Ò»¸öϽµÑØ 		
    			{	  			
    				TIM5CH1_CAPTURE_STA|=0X80;		//±ê¼Ç³É¹¦²¶»ñµ½Ò»´Î¸ßµçƽÂö¿í
    			  TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);//»ñÈ¡µ±Ç°µÄ²¶»ñÖµ.
    	 			TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 ÉèÖÃΪÉÏÉýÑز¶»ñ
    			}else  								//»¹Î´¿ªÊ¼,µÚÒ»´Î²¶»ñÉÏÉýÑØ
    			{
    				TIM5CH1_CAPTURE_STA=0;			//Çå¿Õ
    				TIM5CH1_CAPTURE_VAL=0;
    				TIM5CH1_CAPTURE_STA|=0X40;		//±ê¼Ç²¶»ñµ½ÁËÉÏÉýÑØ
    				TIM_Cmd(TIM5,DISABLE ); 	//¹Ø±Õ¶¨Ê±Æ÷5
    	 			TIM_SetCounter(TIM5,0);
    	 			TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);		//CC1P=1 ÉèÖÃΪϽµÑز¶»ñ
    				TIM_Cmd(TIM5,ENABLE ); 	//ʹÄܶ¨Ê±Æ÷5
    			}		    
    		}			     	    					   
     	}
    	TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //Çå³ýÖжϱê־λ
    }
    
    
     这是主函数:
    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "timer.h"
    #include "beep.h"
    
    extern u8  TIM5CH1_CAPTURE_STA;		//ÊäÈ벶»ñ״̬		    				
    extern u32	TIM5CH1_CAPTURE_VAL;	//ÊäÈ벶»ñÖµ  
    long long temp=0;//²â¾àʱ¼ä
    long long S=0,s1=0,t=0,Sm=0;//¾àÀë
    
    int table1[]={1,10,100,1000};
    
    //¿ªÆô³¬Éù²¨Ä£¿é
    void count()
    {
       trig=1;
    	 delay_ms(20);
    	 trig=0; 
    }
    
    //½ÓÊÕÊý¾Ý
    float js()
    {
    	u8 i;
    	u8 len;	 
    	if(USART_RX_STA&0x8000)//Èç¹û½ÓÊÕµ½Êý¾Ý
    		{					   
    			len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
    			for(i=0;i<len;i++)
    			{
    			   s1+=(USART_RX_BUF[len-1-i]-48)*table1[i];
    			}
    //			printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",s1);
    			t=s1;//½«½ÓÊÕµ½µÄÊý¾Ý¸øµ½t
    			s1=0;//s1³õʼ»¯
    			printf("\r\n\r\n");//²åÈë»»ÐÐ
    			USART_RX_STA=0;//״̬λÇåÁã
    		}
    		return t;
    }
    
    //ÅжϺ¯Êý
    float pd()
    { 
    	  if(S<t)
    		{
    			 printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",t);
    		   printf("\r\n error!!!¡\\n");
    			 LED1=!LED1;//³¬¹ý·§Öµ£¬±¨¾¯
    		}
    		else
    		{   
    			  printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",t);
    		    printf("distance:%lld mm\r\n",S);//´òÓ¡¾àÀë
    		}
    		return t;
    }
    /*********¿¨¶ûÂüÂ˲¨************/
    int kalmanfilter(long long  indata)
    {
    	static float prevdata=0;
    	static float p=10,q=0.0001,r=0.005,KGain=0;
    	p=p+q;
    	KGain=p/(p+r);
    	indata = prevdata+(KGain*(indata-prevdata));
    	p=(1-KGain)*p;
    	prevdata=indata;
    	Sm=prevdata;
    	return indata;
    }
    
    //¼ÆËã¾àÀë
    void jisuan()
    {
    
    	 long long a;
       if(TIM5CH1_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
    		{
    			temp=TIM5CH1_CAPTURE_STA&0X3F; 
    			temp*=0XFFFFFFFF;		 		         //Òç³öʱ¼ä×ܺÍ
    			temp+=TIM5CH1_CAPTURE_VAL;		   //µÃµ½×ܵĸߵçƽʱ¼ä
    			a=temp;
    			S=0.17*a;
    //      kalmanfilter(S);
    			pd();
    			TIM5CH1_CAPTURE_STA=0;	//״̬λÇåÁã
        }
    }
    
    //Ö÷º¯Êý
    int main(void)
    {   
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
    	delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý
    	uart_init(9600);//³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200
    	LED_Init();
    	LED0=0;
     	TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1); //ÒÔ1MhzµÄƵÂʼÆÊý 
      while(1)
    	{
    		count();//¿ªÆô³¬Éù²¨Ä£¿é
    		jisuan();//¼ÆËã¾àÀë
    //	  kalmanfilter(S);
    //		pd();
    		delay_ms(20);
    		js();//½ÓÊÕ´®¿ÚÉèÖõÄ×îС¾àÀë
    		LED0=!LED0;//ÅжϺ¯ÊýÕý³£½øÐÐ
    		delay_ms(200);
    	}
    }
    
    在原程序上我添加了OLED显示的部分与串口显示的内容基本一致,我使用的是6针、蓝色SSD1306的OLED,四线SPI模式。
    在此加上我的主程序:
    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "timer.h"
    #include "beep.h"
    #include "bmp.h"
    #include "oled.h"
    
    
    extern u8  TIM5CH1_CAPTURE_STA;		//ÊäÈ벶»ñ״̬		    				
    extern u32	TIM5CH1_CAPTURE_VAL;	//ÊäÈ벶»ñÖµ  
    long long temp=0;//²â¾àʱ¼ä
    long long S=0,s1=0,t=0,Sm=0;//¾àÀë
    
    int table1[]={1,10,100,1000};
    
    //¿ªÆô³¬Éù²¨Ä£¿é
    void count()
    {
       trig=1;
    	 delay_ms(20);
    	 trig=0; 
    }
    
    //½ÓÊÕÊý¾Ý
    float js()
    {
    	u8 i;
    	u8 len;	 
    	if(USART_RX_STA&0x8000)//Èç¹û½ÓÊÕµ½Êý¾Ý
    		{					   
    			len=USART_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
    			for(i=0;i<len;i++)
    			{
    			   s1+=(USART_RX_BUF[len-1-i]-48)*table1[i];
    			}
    //			printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",s1);
    			t=s1;//½«½ÓÊÕµ½µÄÊý¾Ý¸øµ½t
    			s1=0;//s1³õʼ»¯
    			printf("\r\n\r\n");//²åÈë»»ÐÐ
    			USART_RX_STA=0;//״̬λÇåÁã
    		}
    		return t;
    }
    
    //ÅжϺ¯Êý
    float pd()
    { 
    	  if(S<t)
    		{
    			 printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",t);
    		   printf("\r\n error!!!¡\\n");
    			 LED1=!LED1;//³¬¹ý·§Öµ£¬±¨¾¯
    		}
    		else
    		{   
    			  printf("\r\nÉèÖõÄ×îС¾àÀëΪ:%lld\r\n",t);
    		    printf("distance:%lld mm\r\n",S);//´òÓ¡¾àÀë
    		}
    		return s1;
    }
    /*********¿¨¶ûÂüÂ˲¨************/
    //int kalmanfilter(long long  indata)
    //{
    //	static float prevdata=0;
    //	static float p=10,q=0.0001,r=0.005,KGain=0;
    //	p=p+q;
    //	KGain=p/(p+r);
    //	indata = prevdata+(KGain*(indata-prevdata));
    //	p=(1-KGain)*p;
    //	prevdata=indata;
    //	Sm=prevdata;
    //	return indata;
    //}
    
    //¼ÆËã¾àÀë
    float jisuan()
    {
    
    	 long long a;
       if(TIM5CH1_CAPTURE_STA&0X80)        //³É¹¦²¶»ñµ½ÁËÒ»´Î¸ßµçƽ
    		{
    			temp=TIM5CH1_CAPTURE_STA&0X3F; 
    			temp*=0XFFFFFFFF;		 		         //Òç³öʱ¼ä×ܺÍ
    			temp+=TIM5CH1_CAPTURE_VAL;		   //µÃµ½×ܵĸߵçƽʱ¼ä
    			a=temp;
    			S=0.17*a;
    //      kalmanfilter(S);
    			pd();
    			Sm=S;
    			TIM5CH1_CAPTURE_STA=0;	//״̬λÇåÁã
        }
    		return Sm;
    }
    //OLEDÏÔʾº¯Êý
    void display()
    {
    	 if(Sm>t)
    	 {
    		  OLED_ShowCHinese(0,0,0);//?
    		OLED_ShowCHinese(18,0,1);//?
    		OLED_ShowCHinese(36,0,2);//?
    		OLED_ShowCHinese(54,0,3);//?
    		OLED_ShowCHinese(72,0,4);//?
    		OLED_ShowCHinese(90,0,5);//?
    		OLED_ShowCHinese(108,0,6);//?
    		OLED_ShowCHinese(20,3,7);//?
    		OLED_ShowCHinese(38,3,8);//?
    		OLED_ShowString(60,3,": "); 
    		OLED_ShowNum(72,3,t,6,16);//??ASCII?????
    	  	OLED_ShowString(0,6,"Distance: "); 
    		  OLED_ShowNum(72,6,Sm,6,16);//??ASCII????? 	
    		  delay_ms(2);
      	}
    	 else
    	 {
    		 OLED_Clear();
    		 OLED_ShowCHinese(0,0,0);//?
    		OLED_ShowCHinese(18,0,1);//?
    		OLED_ShowCHinese(36,0,2);//?
    		OLED_ShowCHinese(54,0,3);//?
    		OLED_ShowCHinese(72,0,4);//?
    		OLED_ShowCHinese(90,0,5);//?
    		OLED_ShowCHinese(108,0,6);//?
    		OLED_ShowCHinese(20,3,7);//?
    		OLED_ShowCHinese(38,3,8);//?
    		OLED_ShowString(60,3,": "); 
    		OLED_ShowNum(72,3,t,6,16);//??ASCII?????
    	  OLED_ShowString(48,6,"error!!!"); 
    	 }
    }
    
    //Ö÷º¯Êý
    int main(void)
    {   
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
    	delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý
    	uart_init(9600);//³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200
    	LED_Init();
    	OLED_Init();			//???OLED  
    	OLED_Clear();
    	LED0=0;
     	TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1); //ÒÔ1MhzµÄƵÂʼÆÊý 
      while(1)
    	{
    		
    		count();//¿ªÆô³¬Éù²¨Ä£¿é
    		jisuan();//¼ÆËã¾àÀë
    		delay_ms(20);
    		js();//½ÓÊÕ´®¿ÚÉèÖõÄ×îС¾àÀë
    		display();
    		LED0=!LED0;//ÅжϺ¯ÊýÕý³£½øÐÐ
    		delay_ms(2);
    	}
    }
    

    加上OLED后会使程序跑得很慢,使测距显示没有那么及时。甚至会出现程序跑死的情况存在。。。。目前为止没有找到解决方法。
    
    

    
    


    展开全文
  • mfc-串口控件变量设置

    千次阅读 2016-04-22 13:09:58
    在知道了一些基本的界面之后,咱们来介绍怎么给控件添加变量首先是4radio button按钮,这四东西两两组,(后台划分的),首先,右键radio button ->添加变量(B)->类别->Value->变量类型->int(radio需要...

    在知道了一些个基本的界面之后,咱们来介绍怎么给控件添加变量

    首先是4个radio button按钮,这四个东西两两一组,(后台划分的),首先,右键radio button ->添加变量(B)->类别->Value->变量类型->int(radio只需要知道0 1 就够了,但为了赋值方便,所以用了int)->变量名

    radiobutton

    然后就是edit的,edit里面显示的是字符串,所以添加的变量是CString类型的,

    这里说明一下,

    value的变量只能改变控件的值,不能更改他的状态,

    下面的方法可以改变控件的状态,

    改变控件的状态有三种方法,
    1:直接在属性栏里面修改
    2:通过每个控件的ID修改
    3:新建一个控件变量,

    第一种没什么好的,直接右键 属性就可以了
    第二种很困难,一般都不用,当然了,对付一些特殊情况也是可以的,不会请bing
    这里着重讲解第三种,
    在我们右键添加变量的时候,右边不选择value ,而是control,这样就是给一个控件添加了一个 变量,
    可以通过这个变量修改控件的属性,这个和c#的变量名称一样,很好用。

    展开全文
  • 今天主要写一个串口数据发送的应用程序,专门用来发送数据,具体效果图如下 1.功能要求 发送数据,数据由下拉框进行选择,然后点击按钮进行发送 2.功能实现 (1)上位机界面实现 界面看起来很简单,可以...

    今天主要写一个串口数据发送的应用程序,只专门用来发送数据,具体效果图如下

     

    1.功能要求

    发送数据,数据由下拉框进行选择,然后点击按钮进行发送

    2.功能实现

    (1)上位机界面实现

    界面看起来很简单,可以自己怎么喜欢怎么放置,主要有3个组件:

    label显示“数据”二字

    下拉框用于选择要发送的数据(主要为了体现使用下拉框)

    按钮点击发送数据操作

    重点是串口加入,设置串口的属性,如图需要在组件中拖串口组件到窗体中,还需要设置串口的属性,串口名称,波特率等等。。。

     

    (2)后端代码实现

    主要是分为2点

    下拉框中元素的添加和串口发送

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace SerialPort
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //窗口创建初始化函数
            private void Form1_Load(object sender, EventArgs e)
            {
                String str;//用来临时存储I大写的十六进制格式字符串
                for (int i = 0; i < 256; i++)//256个
                {
                    str = i.ToString("x").ToUpper();//ToString("x")是将数字转换为16进制字符串,ToUpper()是将字符串所有字母转换为大写
                    if (str.Length == 1)
                        str = "0" + str;//如果是一位的比如0xA,此时为了对齐,在数据前加一个字符“0”(0x0A)
                    comboBox1.Items.Add("0x" + str);//统一添加0x
    
                }
                comboBox1.Text = "0x00";//初试值
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                String data = comboBox1.Text;//存储当前下拉框的内容
                String convertdata = data.Substring(2, 2);//获取要发送的数据后两位
                byte[] buffer = new byte[1];//用来存储数据
                buffer[0] = Convert.ToByte(convertdata, 16);//将字符串转化为byte型变量
                try//防止出错
                {
                    serialPort1.Open();//打开串口
                    serialPort1.Write(buffer, 0, 1);//发送数据
                    serialPort1.Close();//关闭串口
                }
                catch//如果出错执行以下代码
                {
                    if (serialPort1.IsOpen)//如果事先端口就已经打开了就关闭端口
                        serialPort1.Close();
                    MessageBox.Show("端口错误", "错误");
                }
            }
    
        }
    }
    

     

    附一下代码下载链接

    serialport

    展开全文
  • 你必须知道的495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
  • 《你必须知道的495C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 让终端或者路由器给协调器发送数据很容易,需要设置目标地址为0x0000就行了,但路由与终端的地址是网络建立以后才分配的,所以很多人不知道怎么让协调器定向地给一个指定路由或者终端发送数据,这个系统就是为了...
  • USB转232驱动包

    2015-02-28 10:02:25
    安装驱动以后在程序中出现一个新的菜单显示USB to Serial Cable Driver 但是我把转换线插到USB口中的时候 系统自动安装驱动是USB人体学输入设备 部分杂牌的USB转串口线的确存在这样的问题 ">路由器交换机等设备初始...
  • 6.时间显示部分实现了一个指针式的时钟,这里的表盘是图片了,因为软件画的话比较麻烦,指针的绘制参考了ucgui中画多边形的代码,并且使用了透明效果,指针遮挡部位下面的文字图案依然能看到的。温度采集用得是片内...
  • E.8.3 当我启动X时, 我看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows 95那样的配置, 我如何改变它? E.8.6 我得到一个错误errno=111. 那是什么意思? 我该做什么? E.8.7 ...
  • 串口:电脑后边有一个9针(双排,一排5针,一排4针)的接口。串口无线安装驱动。如果没有串口,可以进行串口卡转换或者是串口线转换。 控制器自检 控制器连接完毕,接通电源后打开总开关,总开关的指示灯亮起,...
  • Linux从入门到精通

    2010-04-25 19:58:09
    E.8.3 当我启动X时, 我看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows 95那样的配置, 我如何改变它? E.8.6 我得到一个错误errno=111. 那是什么意思? 我该做什么? E.8.7 ...
  • linux从入门到精通.chm

    2010-05-17 09:11:20
    E.8.3 当我启动X时, 我看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows 95那样的配置, 我如何改变它? E.8.6 我得到一个错误errno=111. 那是什么意思? 我该做什么? E.8.7 ...
  • 《Linux从入门到精通》

    热门讨论 2008-09-04 17:05:49
    E.8.3 当我启动X时, 我看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows 95那样的配置, 我如何改变它? E.8.6 我得到一个错误errno=111. 那是什么意思? 我该做什么? E.8.7 ...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • 程序也很简单,只要学过一些单片机程序的人应该都知道吧,串口通信,设置好通信的波特率,初始化工作做好,然后在串口中断程序里写上你要做的事情就可 以了,这里虽然说11.0592的晶振定时器初值为fd,但是如果用...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • 如何成为一个优秀的jsp程序员 国内不谈java 《学不会的JAVA,消不了的忧愁》之五 Servlet的基础结构 一个简单的Servlet 分布式应用开发技术概述 CORBA技术及实例 About UBB with java has a bug Acme包中的...
  • 2.单片机程序,这程序也很简单,只要学过一些单片机程序的人应该都知道吧,串口通信,设置好通信的波特率,初始化工作做好,然后在串口中断程序里写上你要做的事情就可 以了,这里虽然说11.0592的晶振定时器初值为...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    另外有打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...
  • 老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX(PC上用的),省得你来回开关机了。记得装VMWARE-TOOLS,安装方*在我另一篇笔记里。 六 有哪些书推荐 主要推荐ZLG的三本书,有这3本再加网络就不用别的书了,...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    能否利用单片来检测手机电池的充放电时间及充放电时的电压电流变化,并利用一个I/O端口使检测结果在电脑上显示出来? 答:目前市场上的各类智能充电器,大部分都采用MCU进行充电电流和电压的控制。至于要在电脑...
  • 建议把本仓库当作一个代码实现参考的地方,有需要即可拷贝移植。也可以用O00-empty_app空白工程作为基础模板,需要什么功能再进行添加。 系列说明 D系列:与编码(Decode)相关的demo,加密和哈希相关的也会放在...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

串口怎么设置只显示一个