关于AD中,原理图封装库加上下划线的说明

本文介绍了如何在AD(Allegro Design)中为原理图库创建自定义字体,特别是如何为字母添加下划线,以表示低电平触发。通过进入字体编辑器,勾选特定选项并设置下划线,可以成功实现字母下划线的效果,这对于电路设计中的符号标注非常重要。
摘要由CSDN通过智能技术生成

AD中画原理图封装,常常要用到上下划线来表示低电平触发,今天画库时遇到一个问题。

如下:

看图可知加上划线只需在每个字母后面加上一个"\";

即可实现字母加上划线的功能;

那么加下划线需点击自定义字体,如下图:

两个都勾选上;点击TIME NEW ROMAN

点进去后可看到这个界面:

把下划线勾上,现在就可以看到字母有下划线了;

题目:https://upfile.live/zh-cn/files/a106b700

例程:https://upfile.live/zh-cn/files/3d0f9fbf

模板:https://upfile.live/zh-cn/files/8b1000ae

模板


#include "stdarg.h"
#include <string.h>
#include "usart.h"
#include "stdio.h"


typedef enum {FALSE = 0,TRUE = 1} bool;//布尔类型定义


/*
map函数
val 输入值
in_min 输入最小值
in_max 输入最大值
out_min 输出最小值
out_max 输出最大值
返回值 映射后的值
*/
int Map(int val,int in_min,int in_max,int out_min,int out_max)
{
	return (int)(val-in_min)*(out_max-out_min)/(in_max-in_min)+out_min;
}


/*
任何GPIO初始化为输出
*/
void any_gpio_init(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin_X)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	if(GPIOx==GPIOA){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);}
	if(GPIOx==GPIOB){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);}
	if(GPIOx==GPIOC){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);}
	if(GPIOx==GPIOD){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);}
	if(GPIOx==GPIOE){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);}
	if(GPIOx==GPIOF){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);}
	if(GPIOx==GPIOG){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);}
	if(GPIOx==GPIOH){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);}
	if(GPIOx==GPIOI){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);}
	if(GPIOx==GPIOJ){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOJ,ENABLE);}
	if(GPIOx==GPIOK){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOK,ENABLE);}
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_X;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOx,&GPIO_InitStructure);
	GPIO_ResetBits(GPIOx,GPIO_Pin_X);
}


/*
直流电机函数
mode 0停止 1正传 2反转
speed 速度
*/
void dc_motor_run(int mode,int speed)
{
	switch(mode)
	{
		case 0:PBout(9)=0;PBout(15)=0;
			break;
		case 1:PBout(9)=1;PBout(15)=0;
			break;
		case 2:PBout(9)=0;PBout(15)=1;
			break;
	}
	TIM_SetCompare1(TIM12,speed);
}

/*
单个数码管和一排数码管初始化
*/
void smg_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_InitStructure);

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOG,&GPIO_InitStructure);
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOG,&GPIO_InitStructure);
	
}

/*
单个数码管显示数字
num 输入数字(0-F)
*/
void show_smg(int num)//使用PE的后8位来初始化引脚(共阳极)
{	//显示0-F
	uint16_t maduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
	GPIO_Write(GPIOE,maduan[num]<<8);
}

/*
显示一排数码管的单个码段
x 第几个(0-3)
num 数字(0-F)
*/
void show_few_smg(int x,int num)
{
	uint16_t maduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
	switch(x)
	{
		case 0:PGout(8)=1;PGout(9)=0;PGout(10)=0;PGout(11)=0;
			break;
		case 1:PGout(8)=0;PGout(9)=1;PGout(10)=0;PGout(11)=0;
			break;
		case 2:PGout(8)=0;PGout(9)=0;PGout(10)=1;PGout(11)=0;
			break;
		case 3:PGout(8)=0;PGout(9)=0;PGout(10)=0;PGout(11)=1;
			break;
	}
	GPIO_Write(GPIOF,maduan[num]<<8);
	delay_ms(5);
	GPIO_Write(GPIOF,0xff00);
}


/*
显示一排数的所有数
在这里显示你想要显示的数
默认显示111键值
*/
void show_all_num()
{
	show_few_smg(0,1);
	show_few_smg(1,1);
	show_few_smg(2,1);
	show_few_smg(3,1);
}


/*
矩阵按键扫描
返回值键值1-16
返回0表示没有按键触发
*/
uint16_t key_scanf()
{
	uint16_t rec=0,i;
	for(i=0;i<4;i++)
	{
		if(PGin(i)&&PGin(4)){while(PGin(i)&&PGin(4)){}rec=1+(i*4);}
		if(PGin(i)&&PGin(5)){while(PGin(i)&&PGin(5)){}rec=2+(i*4);}
		if(PGin(i)&&PGin(6)){while(PGin(i)&&PGin(6)){}rec=3+(i*4);}
		if(PGin(i)&&PGin(7)){while(PGin(i)&&PGin(7)){}rec=4+(i*4);}
	}
	return rec;
}


/*
adc初始化
初始化了4路adc
pa0-pa3
*/
void init_adc1(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	ADC_CommonInitTypeDef ADC_CommonInitStructure;
	ADC_InitTypeDef ADC_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);// 使能ADC1时钟
	
	//初始化ADC1通道0-3 IO口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;  //模式为模拟输入
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //不带上下拉
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);   //ADC1复位
	RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);    //复位结束
	
	//初始化CCR通用控制寄存器配置
	ADC_CommonInitStructure.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled; //DMA失能
	ADC_CommonInitStructure.ADC_Mode=ADC_Mode_Independent;  //独立模式
	ADC_CommonInitStructure.ADC_Prescaler=ADC_Prescaler_Div4;  //预分频值设置
	ADC_CommonInitStructure.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间延迟5个时钟
	ADC_CommonInit(&ADC_CommonInitStructure);
	
	//初始化ADC1相关参数
	ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;  //关闭连续转换
	ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;  //右对齐
	ADC_InitStructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None; //禁止触发检测,使用软件触发
	ADC_InitStructure.ADC_NbrOfConversion=1;  //1个转换在规则序列中
	ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;  //12位模式
	ADC_InitStructure.ADC_ScanConvMode=DISABLE; //非扫描模式
	ADC_Init(ADC1,&ADC_InitStructure); //ADC初始化
	
	ADC_Cmd(ADC1,ENABLE);   //开启AD转换器
}
/*
获取ADC值
ch:通道值 0~16
返回值:转换结果(0-4096)对应电压0v-3.3v
*/
u16 Get_Adc(u8 ch)
{
	ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles);//设置ADC规则组通道,一个序列,采样时间480
	ADC_SoftwareStartConv(ADC1);//使能指定的ADC1的软件转换启动功能
	while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//读取状态寄存器的状态位EOC,等待转换结束
	return ADC_GetConversionValue(ADC1);//返回最近一次的ADC1规则组的转换结果
}
/*
获取通道ch的转换值,取times次,然后平均
ch:通道编号  times:获取次数
返回值:通道ch的times次转换结果平均值
*/
u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=+Get_Adc(ch); //取times次通道值进行求和
		delay_ms(5);
	}
	return temp_val/times; //返回平均值
}

/*
获取stm32内部温度
*/
uint16_t adc_get_intemp()
{
	double real_temp,value,temp_av;
	value=Get_Adc_Average(16,10);//采集16通道,采集10次取平均值
	temp_av=value*(3.3/4096);//换算成电压
	real_temp=(temp_av-0.76)/0.0025+25;//固定温度换算公式
	real_temp*=100;
	return (uint16_t)real_temp;
}


/*
dac输出模拟电压初始化
stm32f4就两个dac输出口
一个PA4一个PA5
*/
void dac_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	DAC_InitTypeDef  DAC_InitStructure;

	//使能端口和DAC时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

	//初始化端口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN; //模拟输入模式
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;//管脚设置
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化端口结构体

	//初始化DAC,设置DAC工作模式
	DAC_InitStructure.DAC_Trigger = DAC_Trigger_None ; //不使用触发功能
	DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; // 不使用波形发生器
	DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; //不使用波形发生器所以可以随意设置
	DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;  //不使用输出缓存
	DAC_Init(DAC_Channel_1,&DAC_InitStructure); //通道一初始化DAC
	DAC_Init(DAC_Channel_2,&DAC_InitStructure); //通道一初始化DAC
	
	DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
	DAC_SetChannel2Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
	
	DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC通道1
	DAC_Cmd(DAC_Channel_2, ENABLE);  //使能DAC通道1

}

void seg_set_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);  	   
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); 	//使能PORTF时钟	
	
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_TIM4);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_TIM4);
	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;           
	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_UP;        //上拉
	GPIO_Init(GPIOD,&GPIO_InitStructure);              //初始化PF9
	  
	TIM_TimeBaseStructure.TIM_Prescaler=8399;  //定时器分频
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
	TIM_TimeBaseStructure.TIM_Period=199;   //自动重装载值
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器4
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	
	TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1
	TIM_OC2Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC2
	TIM_OC3Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC3
	TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC4
	
	

	TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
	
	
	TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
	TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);

	
 
  TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 
	
	TIM_Cmd(TIM4, ENABLE);  //使能TIM14
}

void seg_set(uint16_t avge1,uint16_t avge2,uint16_t avge3,uint16_t avge4)
{
	uint16_t a1_out,a2_out,a3_out,a4_out;
	a1_out=Map(avge1,0,180,5,25);
	a2_out=Map(avge2,0,180,5,25);
	a3_out=Map(avge3,0,180,5,25);
	a4_out=Map(avge4,0,180,5,25);
	TIM_SetCompare1(TIM4,a1_out);
	TIM_SetCompare2(TIM4,a2_out);
	TIM_SetCompare3(TIM4,a3_out);
	TIM_SetCompare4(TIM4,a4_out);
}

/*
串口正点原子的usart.c里面都写好了
直接printf就可以串口打印任意字符了
*/

/*
整形转字符串
*/
void int_to_str(int num,uint8_t *str) 
{
    sprintf(str, "%d", num);  // 使用sprintf函数将整数格式化为字符串
}


/* 
y:行      
str:字符串
如果有占位符就需要像printf那样在后面添加变量参数
例如:
lcd1602_print(0   , "hel %d world",  56);
lcd1602_print(1,"good %d xxx",78);
*/
void lcd1602_print(u8 y, u8 *str,...)
{
	u8 cc = 0;
	u8 *p = str;
	u8 temp[] = "";
	va_list args;
  va_start(args, str);
  LCD1602_Set_Cursor(0, y);  
  while (*p) 
	{
		if (*p == '%' && *(p + 1) == 'd') 
		{
      int i = va_arg(args, int);
			sprintf((char*)temp,"%d",i);
			cc =0;
			while(temp[cc] != '\0')
			{
				LCD1602_Write_Dat(temp[cc]);
				cc++;
			}
      p++;
    }
		else 
		{
			LCD1602_Write_Dat(*p);
    }
    p++;
  }
  va_end(args);
}


void SysTick_Init(void) 
{
    // SystemCoreClock 是系统时钟频率,假设为 168 MHz
    if (SysTick_Config(SystemCoreClock / 1000))
		{
        // 捕获错误
        while (1);
    }
}



void init_all_device()
{
	//初始化GPIO
	//any_gpio_init(GPIOA,GPIO_Pin_0);
	
	//初始化延时函数
	delay_init(168);
	
	//初始化步进电机/直流电机
	Moto_Init();		//pb2-pb5
	DCmotor_Init();	//pb15,pb9/pwm1 pb14 pwm2 pb15
	//TFT初始化/lcd1602初始化
	//TFT_Init();			//pe4-pe5//pg11//pf0-pf15
	LCD1602_Init();	//pd3//pc7//pc0//pe0-7
	//声音模块
	Audio_Init();		//pc0//pd3-pd4
	//按键模块初始化
	KEY_Init();			//pa6-pa11 *********************单按键扫描和串口一冲突
	//KeyArray_Init();//pg0-pg7
	//点阵屏初始化
	DotMatrix8_Init();//pe0-pe7//pf0-pf7
	//单位数码管初始化
	smg_init();//pe8-pe15//pf8-pf15//pg8-pg11
	//adc初始化
	init_adc1();//pa0-pa3
	//dac初始化
	dac_init(); //pa4-pa5
	//串口1初始化//pa9-pa10
	uart_init(115200);//初始化波特率为115200
	//PWM初始化
	TIM4_PWM_Init(100-1,840-1);//1ms周期1khz
	//舵机初始化//PD12-PD15
	seg_set_init();
	//蜂鸣器初始化
	buzzer_Init();//pb0
	//led初始化
	LED_Init();//pb1-4;
	//系统滴答定时器初始化1ms进一次中断
	SysTick_Init();
	
}


/*
所有函数使用从此复制

//步进电机函数
void Motorcw(int speed);    //步进正转  
void Motorccw(int speed);   //步进反转
void Motorcw_angle(int angle,int speed);//步进正转转动角度
void Motorccw_angle(int angle,int speed); //步进电机反转角度
void MotorStop(void);  //步进电机停止函数

//直流电机驱动
void dc_motor_run(int mode,int speed)//0电机停止 1电机正转 2电机反转 speed 速度

//lcd1602模块
void LCD1602_Show_Str(u8 x, u8 y, char *str);//设置x和y轴 str设置值
void LCD1602_ClearScreen(void); //清屏

//TFT
void TFT320_Clear(uint16_t color);//清屏
void TFT_DisplayChars(uint16_t x, uint16_t y, uint8_t Font, char* p);//设置x轴和y轴颜色和字符

//声音模块
void Audio_Start(const char *str);

//矩阵按键
uint16_t key_scanf();//扫描矩阵按键

//舵机控制 1-4个舵机的角度范围0-180
void seg_set(uint16_t avge1,uint16_t avge2,uint16_t avge3,uint16_t avge4)

//adc采集
u16 Get_Adc(u8 ch);//采集adc1通道值
u16 Get_Adc_Average(u8 ch,u8 times);//采集通道值多次取平均值

//dac输出
DAC_SetChannel1Data(DAC_Align_12b_R,4096);//通道一和通道二
DAC_SetChannel2Data(DAC_Align_12b_R,2048);

//数码管相关函数
void show_smg(int num); //单个数码管显示数字

void show_few_smg(int x,int num);//一组数码管显示值
void show_all_num();//一组数码管刷新函数


//系统滴答定时器中断回调函数,要在main使用需将it里面的注释掉

void SysTick_Handler(void)
{
	
}


//主函数中放这个刷新函数,代码中只对1602的缓存区进行处理
LCD1602_Show_Str(0,0,lcd1602_buf1);
LCD1602_Show_Str(0,1,lcd1602_buf2);

//1602刷新函数,直接写刷新字符串,例如:lcd1602_flash(0,0,"input passworld");
void lcd1602_flash(uint16_t x,uint16_t y,uint8_t *dat)
{
	if(y){memcpy(lcd1602_buf2,dat+x,strlen(dat));}
	else{memcpy(lcd1602_buf1,dat+x,strlen(dat));}
}

//y:行      
//str:字符串
//如果有占位符就需要像printf那样在后面添加变量参数
//例如:
//lcd1602_print(0   , "hel %d world",  56);
//lcd1602_print(1,"good %d xxx",78);

void lcd1602_print(u8 y, u8 *str,...)


//串口接收
USART_RX_BUF[]   //接收数组

	 /\
	/  \
	 ||
	 ||
	 ||
	 
串口接收数组
如果是做接收判断需要修改usart.h文件中USART_REC_LEN的宏定义
用多少个改多少个不然接收的数据会往后推
实例:
if(USART_RX_BUF[0]==0xCC&&USART_RX_BUF[2]==0xEE)//这里宏定义改成了3,只判断帧头和帧尾正确了进入下面
{
	if(USART_RX_BUF[1]==0x01){PBout(1)=1;}//中间数据帧为01点亮led
	else{PBout(1)=0;}											//不为0x01熄灭led
}


//布尔类型的使用
要么直接使用ture或者false
用0和1的话的类型转换如下

bool motor_flat=(bool)0;




//取消警告显示
打开魔术棒
选择c/c++选项

在靠中右的地方有一个warnings
选择 no warnings 就会屏蔽所有警告

*/

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103AD是一款由STMicroelectronics(意法半导体)生产的基于ARM Cortex-M3内核的32位微控制器。原理图是开发常用的一种工具,用于展示电路连接和功能实现的关系。封装库是指提供了封装元件以及其相应电气特性和引脚定义的软件库。 在使用STM32F103AD开发电路时,我们可以使用原理图封装库来简化设计流程。封装库包含了STM32F103AD微控制器的所有引脚定义以及对应的电气特性,可以直接在软件调用这些定义,而不必手动编写代码。这样可以减少设计时间和可能的错误。 原理图封装库有助于更好地理解和协调电路连接。通过封装库的元件符号和引脚定义,我们可以直观地了解电路各个元件之间的关系,并进行正确的连接。此外,封装库还可以提供元件的尺寸和排列信息,方便进行PCB(印刷电路板)布局设计和元件焊接。 对于STM32F103AD来说,它的原理图封装库可以帮助我们快速实现与微控制器各个引脚之间的连接,包括外部器件、传感器、显示器等。我们只需在原理图选择相应的元件符号并将其连接到适当的引脚上,然后通过封装库来快速生成代码,实现所需的功能。 总之,原理图封装库对于STM32F103AD的开发非常有用。它大大简化了电路连接的设计流程,提高了开发效率,同时也减少了可能的错误。通过使用封装库,我们可以更好地理解和协调电路连接,快速实现所需功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值