重载“+-*/”实现高精度运算


       在只进行加法和减法时,我们可以压八位来加快速度,当有乘法时,压八位会爆int所以我们压四位。 高精度除法压位比较难写,所以我们不选择压位。在程序的前端声明一个变量P来记录压位的位数,M记录压N位时对应的最小的数,即可使程序更容易调试。

const int M=100000000,
               P=8;
//输出可以这样写
printf("%*d",P,n[i]);


加减,压八位,输出补零

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int M=100000000,
		  P=8; 	//压位

struct bignum 
{
	int n[5000],l; 	//n数组存放每个结构体中的"大数",l记录长度。
	bignum(){l=1,memset(n,0,sizeof(n));}
//-----------------------------------------------
	void init() 	//输入过程
	{
		string s;
		cin>>s;
		int now=0,ct=0,c1=1; //now记录当前是n数组的第几位,ct记录已经读入多少字符了,满八进一,c1是辅助变量,因为我们是倒着读入,所以每次要乘10 
		for(int i=s.length()-1;i>=0;i--)  //从s的长度-1开始 
		{
			n[now]+=(s[i]-'0')*c1;
			c1*=10;
			ct++;
			if(ct==P&&i!=0)  // 如果i=0了就没有必要now++; 
			{
				now++;
				ct=0;
				c1=1;
			}		
		}
		l=now+1;   //l的长度为now+1; 
	}
	void print()
	{
		printf("%d",n[l-1]);
		for(int i=l-2;i>=0;i--)	
		printf("%0*d",P,n[i]);  //补零输出 
		printf("\n");
	}
//-----------------------------------------------
	bignum operator + (bignum x) const 	//重载加号
	{
		bignum t=*this;
		if(x.l>t.l)t.l=x.l;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]+=x.n[i];
			if(t.n[i]>=M)
			{
				t.n[i+1]+=t.n[i]/M;
				t.n[i]%=M;
			}
		}
		return t;			//  注意:将t的值返回 
	} 
//------------------------------------------------
	bool operator < (bignum x) const  	//重载小于号 
	{
		bignum t=*this;
		if(t.l!=x.l)return t.l<x.l;
		for(int i=t.l-1;i>=0;i--)
		{
			if(t.n[i]!=x.n[i]) return t.n[i]<x.n[i];
		}
		return 0;
	}
	bignum operator -(bignum x) const	//重载减号 
	{
		bignum t=*this;
		if(t<x){printf("-");swap(t,x);}
		int jie =0;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]-=x.n[i];
			while(t.n[i]<0)
			{
				t.n[i]+=M;
				jie++;		
			}
			t.n[i+1]-=jie;
			jie=0;
		}
		while(!t.n[t.l-1] && t.l>1)t.l--;  // 相减后有可能出现前面有0的情况,所以t.l--; 
		return t;
	}
//----------------------------------------------
}a,b,c;

int main()
{
	a.init();		//读入字符串a和b 
	b.init();
	
	c=a+b;				
	c.print();

	c=a-b;
	c.print();
	
	c=a*b;
	c.print();
		 
	return 0;
} 




加减乘,压四位,输出补零


#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int M=10000,
		  P=4; 	//压位

struct bignum 
{
	int n[5000],l; 	//n数组存放每个结构体中的"大数",l记录长度。
	bignum(){l=1,memset(n,0,sizeof(n));}
//-----------------------------------------------
	void init() 	//输入过程
	{
		string s;
		cin>>s;
		int now=0,ct=0,c1=1; //now记录当前是n数组的第几位,ct记录已经读入多少字符了,满八进一,c1是辅助变量,因为我们是倒着读入,所以每次要乘10 
		for(int i=s.length()-1;i>=0;i--)  //从s的长度-1开始 
		{
			n[now]+=(s[i]-'0')*c1;
			c1*=10;
			ct++;
			if(ct==P&&i!=0)  // 如果i=0了就没有必要now++; 
			{
				now++;
				ct=0;
				c1=1;
			}		
		}
		l=now+1;   //l的长度为now+1; 
	}
	void print()
	{
		printf("%d",n[l-1]);
		for(int i=l-2;i>=0;i--)	
		printf("%0*d",P,n[i]);  //补零输出 
		printf("\n");
	}
//-----------------------------------------------
	bignum operator + (bignum x) const 	//重载加号
	{
		bignum t=*this;
		if(x.l>t.l)t.l=x.l;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]+=x.n[i];
			if(t.n[i]>=M)
			{
				t.n[i+1]+=t.n[i]/M;
				t.n[i]%=M;
			}
		}
		return t;			//  注意:将t的值返回 
	} 
//------------------------------------------------
	bool operator < (bignum x) const  	//重载小于号 
	{
		bignum t=*this;
		if(t.l!=x.l)return t.l<x.l;
		for(int i=t.l-1;i>=0;i--)
		{
			if(t.n[i]!=x.n[i]) return t.n[i]<x.n[i];
		}
		return 0;
	}
	bignum operator -(bignum x) const	//重载减号 
	{
		bignum t=*this;
		if(t<x){printf("-");swap(t,x);}
		int jie =0;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]-=x.n[i];
			while(t.n[i]<0)
			{
				t.n[i]+=M;
				jie++;		
			}
			t.n[i+1]-=jie;
			jie=0;
		}
		while(!t.n[t.l-1] && t.l>1)t.l--;  // 相减后有可能出现前面有0的情况,所以t.l--; 
		return t;
	}
//------------------------------------------------
	bignum operator *(bignum x) const //重载乘号 
	{
		bignum t=*this,tep;
		tep.l=t.l+x.l-1;
		for(int i=0;i<t.l;i++)
		for(int j=0;j<x.l;j++)
		{
			tep.n[i+j]+=t.n[i]*x.n[j];
			if(tep.n[i+j]>=M)
			{
				tep.n[i+j+1]+=tep.n[i+j]/M;
				tep.n[i+j]%=M;
			}
		}
		while(tep.n[tep.l])
		{
			tep.n[tep.l+1]+=tep.n[tep.l]/M;
			tep.n[tep.l++]%=M;
		}
		return tep;
	}
//-----------------------------------------
}a,b,c;

int main()
{
	a.init();		//读入字符串a和b 
	b.init();
	
	c=a+b;				
	c.print();

	c=a-b;
	c.print();
	
	c=a*b;
	c.print();
		 
	return 0;
} 
	



加减乘除,不压位


#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int M=10,
		  P=1; 	//压位

struct bignum 
{
	int n[5000],l; 	//n数组存放每个结构体中的"大数",l记录长度。
	bignum(){l=1,memset(n,0,sizeof(n));}
//-----------------------------------------------
	void init() 	//输入过程
	{
		string s;
		cin>>s;
		int now=0,ct=0,c1=1; //now记录当前是n数组的第几位,ct记录已经读入多少字符了,满八进一,c1是辅助变量,因为我们是倒着读入,所以每次要乘10 
		for(int i=s.length()-1;i>=0;i--)  //从s的长度-1开始 
		{
			n[now]+=(s[i]-'0')*c1;
			c1*=10;
			ct++;
			if(ct==P&&i!=0)  // 如果i=0了就没有必要now++; 
			{
				now++;
				ct=0;
				c1=1;
			}		
		}
		l=now+1;   //l的长度为now+1; 
	}
	void print()
	{
		printf("%d",n[l-1]);
		for(int i=l-2;i>=0;i--)	
		printf("%0*d",P,n[i]);  //补零输出 
		printf("\n");
	}
//-----------------------------------------------
	bignum operator + (bignum x) const 	//重载加号
	{
		bignum t=*this;
		if(x.l>t.l)t.l=x.l;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]+=x.n[i];
			if(t.n[i]>=M)
			{
				t.n[i+1]+=t.n[i]/M;
				t.n[i]%=M;
			}
		}
		return t;			//  注意:将t的值返回 
	} 
//------------------------------------------------
	bool operator < (bignum x) const  	//重载小于号 
	{
		bignum t=*this;
		if(t.l!=x.l)return t.l<x.l;
		for(int i=t.l-1;i>=0;i--)
		{
			if(t.n[i]!=x.n[i]) return t.n[i]<x.n[i];
		}
		return 0;
	}
	bignum operator -(bignum x) const	//重载减号 
	{
		bignum t=*this;
		if(t<x){printf("-");swap(t,x);}
		int jie =0;
		for(int i=0;i<t.l;i++)
		{
			t.n[i]-=x.n[i];
			while(t.n[i]<0)
			{
				t.n[i]+=M;
				jie++;		
			}
			t.n[i+1]-=jie;
			jie=0;
		}
		while(!t.n[t.l-1] && t.l>1)t.l--;  // 相减后有可能出现前面有0的情况,所以t.l--; 
		return t;
	}
//------------------------------------------------
	bignum operator *(bignum x) const //重载乘号 
	{
		bignum t=*this,tep;
		tep.l=t.l+x.l-1;
		for(int i=0;i<t.l;i++)
		for(int j=0;j<x.l;j++)
		{
			tep.n[i+j]+=t.n[i]*x.n[j];
			if(tep.n[i+j]>=M)
			{
				tep.n[i+j+1]+=tep.n[i+j]/M;
				tep.n[i+j]%=M;
			}
		}
		while(tep.n[tep.l])
		{
			tep.n[tep.l+1]+=tep.n[tep.l]/M;
			tep.n[tep.l++]%=M;
		}
		return tep;
	}
//-----------------------------------------
	void Add(int x){if(x||l)n[l++]=x;}  //除法 
	void Re(){reverse(n,n+l);}          //高精度除以高精度
	bignum operator /(const bignum &x)const
	{
		bignum t=*this,r,y;
		y.l=0,r.l=t.l;
		for(int i=t.l-1;i>=0;--i)
		{
			y.Add(t.n[i]);
			y.Re();
			while(!(y<x))y=y-x,r.n[i]++;
			while(!y.n[y.l-1] && y.l>=1)--y.l;
            y.Re();
		}
		while(!r.n[r.l-1] && r.l>1)--r.l;
		return r;
	}bignum operator /(const int &x)const        //高精度除以单精度
         {
             bignum t=*this,r;
             r.l=t.l;
  	    int tmp=0;
  	    for(int i=t.l-1;i>=0;--i)
   	    {
   		tmp+=t.n[i];
   		if(tmp>=x)
    		r.n[i]+=tmp/x,tmp%=x;
   		tmp*=M;
  	    }
  	    while(!r.n[r.l-1] && r.l>1)--r.l;
  	    return r;
         }
}a,b,c;

int main()
{
	a.init();		//读入字符串a和b 
	b.init();
	
	c=a+b;				
	c.print();

	c=a-b;
	c.print();
	
	c=a*b;
	c.print();
	
	c=a/b;
	c.print();	 
	return 0;
} 
			


最后剽窃一个功能更丰富的- - 


#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int M=10,P=1; 


struct BigNum
{
       int n[5000],l,Y;
       BigNum(){l=1,memset(n,0,sizeof(n));}
       //----------------------------------
       void init()
       {
            string s;
            cin>>s;
            int now=0,ct=0,c1=1;
            for(int i=s.length()-1;i>=0;i--)
            {
             n[now]+=(s[i]-'0')*c1;
             c1*=10;
             ct++;
             if(ct==P&&i!=0)
             {
              now++;
              c1=1;
              ct=0;
             }        
            }
            l=now+1;     
       }
       //-----------------------------------
       void print()
       {
            printf("%d",n[l-1]);
            for(int i=l-2;i>=0;i--)
            printf("%0*d",P,n[i]);
            printf("\n");
       }
       //------------------------------------
       BigNum operator +(BigNum x)const
       {
              BigNum t=*this;
              if(x.l>t.l)t.l=x.l;
              for(int i=0;i<t.l;i++)
              {
               t.n[i]+=x.n[i];
               if(t.n[i]>=M)
               {
                   t.n[i+1]+=t.n[i]/M;
                   t.n[i]%=M;             
               }        
              }
              while(t.n[t.l])
              {
                  t.n[t.l+1]+=t.n[t.l]/M;
                  t.n[t.l++]%=M;               
              }     
              return t;  
       }
       //--------------------------------------
       bool operator < (BigNum x) const
       {
           BigNum t=*this;
           if(t.l!=x.l)return t.l<x.l;
           for(int i=t.l-1;i>=0;i--)
           {
              if(t.n[i]!=x.n[i])return t.n[i]<x.n[i];        
           }
           return 0;       
       }
       BigNum operator -(BigNum x)const
       {
           BigNum t=*this;
           if(t<x){printf("-");swap(t,x);} 
           for(int i=0;i<t.l;i++)
           {
            t.n[i]-=x.n[i];
            if(t.n[i]<0)
            {
                t.n[i]+=M;
                --t.n[i+1];            
            }        
           } 
           while(!t.n[t.l-1]&&t.l>1)t.l--;
           return t;     
       }
       //--------------------------------------------
       BigNum operator * (BigNum x) const
       {
              BigNum c,t=*this;
              c.l=t.l+x.l-1;
              for(int i=0;i<t.l;i++)
              for(int j=0;j<x.l;j++)
              {
                  c.n[i+j]+=t.n[i]*x.n[j];
                  if(c.n[i+j]>=M)
                  {
                      c.n[i+j+1]+=c.n[i+j]/M;
                      c.n[i+j]%=M;               
                  }        
              }
              while(c.n[c.l])
              {
                   c.n[c.l+1]+=c.n[c.l]/M;
                   c.n[c.l++]%=M;               
              }       
              return c;
       }
       BigNum operator * (int x) const
       {
          BigNum t=*this,c;
          c.l=t.l;
          for(int i=0;i<t.l;i++)
          {
              c.n[i]+=t.n[i]*x;
              if(c.n[i]>=M)
              {
                   c.n[i+1]+=c.n[i]/M;
                   c.n[i]%=M;             
              }        
          }       
          while(c.n[c.l])
          {
                 c.n[c.l+1]+=c.n[c.l]/M;
                 c.n[c.l++]%=M;               
          }
          return c;
       }
       //--------------------------------------------
    void Add(int x){if(x||l)n[l++]=x;}
    void Re(){reverse(n,n+l);}
    BigNum operator /(const BigNum &x)const
    {
        BigNum t=*this,r,y;
        y.l=0,r.l=t.l;
        for(int i=t.l-1;i>=0;--i)
        {
            y.Add(t.n[i]);
            y.Re();
            while(!(y<x))y=y-x,r.n[i]++;
            while(!y.n[y.l-1] && y.l>1)--y.l;
            y.Re();
        }
        while(!r.n[r.l-1] && r.l>1)--r.l;
        return r;
    }
    BigNum operator /(const int &x)const
    {
        BigNum t=*this,r;
        r.l=t.l;
        int tmp=0;
        for(int i=t.l-1;i>=0;--i)
        {
            tmp+=t.n[i];
            if(tmp>=x)
                r.n[i]+=tmp/x,tmp%=x;
            tmp*=M;
        }
        while(!r.n[r.l-1] && r.l>1)--r.l;
        return r;
    }
       //---------------------------------------
       
}a,b,c;


int main()
{
    a.init();
    b.init();
    
    c=a+b;
    c.print();
    
    c=a-b;
    c.print();
    
    c=a*b;
    c.print();
    
    c=a/b;
    c.print();
    return 0;        
}


这是接收端#include "main.h" #include "adc.h" #include "usart.h" #include "rtc.h" #include "tim.h" #include "gpio.h" //#include "MY_adc.h" #include "math.h" #include "stdio.h" #define LED1_ON() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET) #define LED1_OFF() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET) /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "step.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ float ADC_Value = 0,ADC_Volt = 0,R = 0; uint16_t Lux = 0; uint8_t str_buff[64]; uint16_t ADC0_Get_Value() { HAL_ADC_Start(&hadc1); LED1_ON(); if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK) { ADC_Value = HAL_ADC_GetValue(&hadc1); ADC_Volt = ADC_Value /4096 * 3.3f; R = ADC_Volt / (3.3f - ADC_Volt) * 10000; Lux = 40000 * pow(R, -0.6021); if (Lux > 999) { Lux = 999; } return Lux; } } /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ uint8_t lvgl[2] = {0,0}; uint16_t LED_PWM; /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart == &huart3) { LED_PWM = (int)lvgl[1]*110; __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,LED_PWM); HAL_UART_Receive_IT(&huart3, lvgl, 2); // } } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_LPUART1_UART_Init(); MX_USART1_UART_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); MX_RTC_Init(); MX_TIM1_Init(); MX_TIM2_Init(); MX_TIM15_Init(); MX_ADC1_Init(); /* USER CODE BEGIN 2 */ Stepper_Init(); Stepper_Rotate(Forward, 2, 1); HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); HAL_UART_Receive_IT(&huart3, lvgl, 2); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 这是发送端#include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" #include "./SYSTEM/delay/delay.h" #include "./USMART/usmart.h" #include "./BSP/LED/led.h" #include "./BSP/LCD/lcd.h" #include "./BSP/KEY/key.h" #include "./BSP/TOUCH/touch.h" #include "./MALLOC/malloc.h" #include "./BSP/TIMER/btim.h" #include "lvgl.h" #include "lv_port_indev_template.h" #include "lv_port_disp_template.h" #include "stdlib.h" #include "time.h" #include "stm32f1xx_hal.h" #include <stdio.h> static int32_t slider_value = 0; //滑块数值--升降台高度 static int32_t arc_value = 0; //圆弧数值--LED亮度 static int32_t c=0; static int32_t b=0; unsigned int gaodu; //高度变量 uint8_t send[2] = {0,0}; //串口发送 static lv_obj_t *label; static lv_obj_t *label1; static lv_obj_t *label_s; static lv_obj_t *label_t; static lv_obj_t *label_t_1; //升降 static lv_obj_t *btn_s; static lv_obj_t *btn; static lv_obj_t *btn1; static lv_obj_t *btn2; static lv_obj_t *msgbox; static lv_obj_t *msgbox1; static lv_obj_t *msgbox2; static lv_obj_t *msgbox3; static lv_obj_t *title; static lv_obj_t *title1; static lv_obj_t *title2; static lv_obj_t *title3; static const char *btn5[]={"Counite",""}; static const char *btn6[]={"Counite",""}; static const char *btn7[]={"Counite",""}; static const char *btn8[]={"Counite",""}; LV_IMG_DECLARE (gaohaoguang); LV_IMG_DECLARE (weixia); LV_IMG_DECLARE (shengjiangtai); LV_IMG_DECLARE (daideng); //static lv_obj_t *led; //static lv_obj_t *switch2; //static lv_obj_t *spinner; //static lv_obj_t *list; //static lv_obj_t *checkbox; //static lv_obj_t *dd; //static lv_obj_t *roller; //static lv_obj_t *bar; //static lv_obj_t *spinbox; //static lv_point_t line_points[]={{150,50},{250,200},{50,200},{150,50}}; //static const char *map[]={"#ff0000 btn1#","\n","btn2","btn3",""}; //static const char *btns[]={"continue","close",""}; UART_HandleTypeDef huart1; void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { if(huart == &huart1) { send[0] = slider_value; send[1] = arc_value; HAL_UART_Transmit_IT(&huart1,send,2); } } int i,n,m,p; uint16_t Num; static void my_event_cb(lv_event_t * e) //回调函数 { lv_obj_t *a=lv_event_get_target(e); if(a==btn) { n=1; } if(a==btn1) {n=0; p=3;} if(p==3){ if(c==1){p=0;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} // lv_obj_clear_flag(msgbox, LV_OBJ_FLAG_HIDDEN); if(c==2){p=0;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} // lv_obj_clear_flag(msgbox1, LV_OBJ_FLAG_HIDDEN); if(c==3){p=0;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} // lv_obj_clear_flag(msgbox2, LV_OBJ_FLAG_HIDDEN); if(c==4){p=0;lv_label_set_text_fmt (label_s,"No");}} // lv_obj_clear_flag(msgbox3, LV_OBJ_FLAG_HIDDEN); } //滑块事件回调------------------------------------------------------------------------------------------- static void slider_event_cb(lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); if (code != LV_EVENT_VALUE_CHANGED) return; lv_obj_t *slider = lv_event_get_target(e); slider_value = lv_slider_get_value(slider); // 更新全局变量 lv_label_set_text_fmt(label_t, "high: %d", slider_value); } //圆弧事件回调------------------------------------------------------------------------------------------- static void arc_event_cb(lv_event_t *e) { lv_obj_t *target = lv_event_get_target(e); arc_value = lv_arc_get_value(target); } int main(void) { HAL_Init(); /* 初始化HAL库 */ sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */ delay_init(72); /* 延时初始化 */ usart_init(115200); /* 串口初始化为115200 */ usmart_dev.init(72); /* 初始化USMART */ led_init(); /* 初始化LED */ lcd_init(); /* 初始化LCD */ key_init(); /* 初始化按键 */ my_mem_init(SRAMIN); /* 初始化内部SRAM内存池 */ tp_dev.init(); /* 触摸屏初始化 */ btim_timx_int_init(10-1,7200-1); /* 初始化定时器 */ lv_init(); /* lvgl系统初始化 */ lv_port_disp_init(); /* lvgl显示接口初始化,放在lv_init()的后面 */ lv_port_indev_init(); /* lvgl输入接口初始化,放在lv_init()的后面 */ //串口------------------------------------------------------------------------------------------ HAL_UART_Transmit_IT(&huart1,send,2); //背景板------------------------------------------------------------------------------------------ // label_t = lv_label_create(lv_scr_act ()); //图片-------------------------------------------------------------------------------------------- lv_obj_t *img = lv_img_create(lv_scr_act()); lv_img_set_src (img,&gaohaoguang); lv_obj_set_pos (img,15,195); lv_obj_t *img1 = lv_img_create(lv_scr_act()); lv_img_set_src (img1,&weixia); lv_obj_set_pos (img1,315,171); lv_obj_t *img2 = lv_img_create(lv_scr_act()); lv_img_set_src (img2,&shengjiangtai); lv_obj_set_pos (img2,26,60); lv_obj_t *img3 = lv_img_create(lv_scr_act()); lv_img_set_src (img3,&daideng); lv_obj_set_pos (img3,197,160); //滑块-------------------------------------------------------------------------------------------- lv_obj_t *slider = lv_slider_create(lv_scr_act()); lv_obj_set_pos(slider,25,-85); lv_obj_set_size(slider,330,30); lv_slider_set_value(slider,0,LV_ANIM_OFF); lv_slider_set_range(slider,0,100); lv_obj_add_event_cb(slider,slider_event_cb,LV_EVENT_VALUE_CHANGED,NULL); // 设置轨道背景色 lv_obj_set_style_bg_color(slider, lv_color_hex(0x808080), LV_PART_MAIN); // 设置指示器颜色 lv_obj_set_style_bg_color(slider, lv_color_hex(0x0000FF), LV_PART_INDICATOR); // 设置旋钮颜色和尺寸 lv_obj_set_style_bg_color(slider, lv_color_hex(0x00ffff), LV_PART_KNOB); lv_obj_set_style_pad_all(slider, 8, LV_PART_KNOB); // 旋钮大小 lv_obj_set_align(slider,LV_ALIGN_CENTER); // 数值显示 label_t = lv_label_create(lv_scr_act()); lv_obj_set_align(label_t, LV_ALIGN_TOP_RIGHT); char text_buffer[20]; // 定义足够大的字符数组存储转换后的字符串 sprintf(text_buffer, "%d", slider_value); // 将整数转换为字符串 lv_label_set_text(label_t, text_buffer); // 传递字符串指针 lv_obj_set_style_text_font(label_t, &lv_font_montserrat_48, 0); // lv_obj_set_style_text_color(label_t_1, lv_color_hex(0x0fff0f), 0); //圆弧-------------------------------------------------------------------------------------------- lv_obj_t *arc = lv_arc_create(lv_scr_act()); /* 设置圆弧尺寸 */ lv_obj_set_size(arc, 174, 174); // 宽度和高度均为 200px /* 调整圆弧线条粗细 */ lv_obj_set_style_arc_width(arc, 20, LV_PART_MAIN); // 背景线条粗细 lv_obj_set_style_arc_width(arc, 20, LV_PART_INDICATOR); // 前景线条粗细 /* 设置位置和范围 */ lv_obj_set_pos(arc, 151, 110); // 调整位置(根据新尺寸可能需要重新定位) lv_arc_set_range(arc, 0, 100); // 值范围 0~100 /* 绑定事件 */ lv_obj_add_event_cb(arc, arc_event_cb, LV_EVENT_VALUE_CHANGED, NULL); // ///////////////////////////////////////////////////////////////////////////////////////////////////////// //拓展内容 1. 实体按键输入 while(1) { srand(Num); // send[0] = slider_value; // send[1] = arc_value; // HAL_UART_Transmit_IT(&huart1, send, 2); HAL_Delay(10); // 示例:10ms发送一次 // if(n==1){i=rand()%50+1;} // lv_label_set_text_fmt (label_t," %d ",i); tp_dev.scan(0); /* 触摸扫描 */ lv_task_handler(); Num+=7; if(i>=1&&i<=3){m=1;c=m;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} if(i>=4&&i<10||i>35&&i<40){m=2;c=m;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} if(i>=15&&i<=20||i>45&&i<=50){m=3;c=m;lv_label_set_text_fmt (label_s,"Prize: %d ",c);} if(i>=10&&i<15||i>=40&&i<=45||i>=26&&i<=35||i>20&&i<=25){m=4;c=m;lv_label_set_text_fmt (label_s,"No");} } }分析一下为什么我滑动圆环,LED的亮度没有随之变化
06-02
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值