【STM32项目设计】STM32F411健康助手--三脚--波轮开关--外部中断输入(3)

news2024/11/24 10:52:45

硬件设计

软件设计

key.c 波轮按键默认为低电平,需要配置为下拉输入,如果浮空的话电压会在1.8v上下波动,单片机检测会出现异常。波动时为高电平,设置为高电平触发。

key0是一个普通按键,忽略即可,key1~3为波轮开关的三个按键。

#include "key.h"

 /**
  * @brief  配置嵌套向量中断控制器NVIC
  * @param  无
  * @retval 无
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 配置NVIC为优先级组1 */
	/* 提示 NVIC_PriorityGroupConfig() 在整个工程只需要调用一次来配置优先级分组*/
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
  /* 配置中断源:按键1 */
  NVIC_InitStructure.NVIC_IRQChannel = KEY0_INT_EXTI_IRQ;
  /* 配置抢占优先级:1 */
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 配置子优先级:1 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断通道 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* 配置中断源:按键2,其他使用上面相关配置 */  
  NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;
  NVIC_Init(&NVIC_InitStructure);
  NVIC_InitStructure.NVIC_IRQChannel = KEY3_INT_EXTI_IRQ;
  NVIC_Init(&NVIC_InitStructure);
}

 /**
  * @brief  配置 PA0 为线中断口,并设置中断优先级
  * @param  无
  * @retval 无
  */
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; 
EXTI_InitTypeDef EXTI_InitStructure;
  
	/*开启按键GPIO口的时钟*/
  RCC_AHB1PeriphClockCmd(KEY0_INT_GPIO_CLK|KEY1_INT_GPIO_CLK|KEY1_INT_GPIO_CLK|KEY3_INT_GPIO_CLK ,ENABLE);
  
  /* 使能 SYSCFG 时钟 ,使用GPIO外部中断时必须使能SYSCFG时钟*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  
  /* 配置 NVIC */
  NVIC_Configuration();
  
/* 选择按键0的引脚 */ 
  GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;
  /* 设置引脚为输入模式 */ 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	    		
  /* 设置引脚不上拉也不下拉 */
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  /* 使用上面的结构体初始化按键 */
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); 

	/* 连接 EXTI 中断源 到key0引脚 */
  SYSCFG_EXTILineConfig(KEY0_INT_EXTI_PORTSOURCE,KEY0_INT_EXTI_PINSOURCE);

  /* 选择 EXTI 中断源 */
  EXTI_InitStructure.EXTI_Line = KEY0_INT_EXTI_LINE;
  /* 中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  /* 上升沿触发 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
  /* 使能中断/事件线 */
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  
  	/* 选择按键1的引脚 */ 
  GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
  /* 设置引脚为输入模式 */ 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	    		
  /* 设置引脚不上拉也不下拉 */
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  /* 使用上面的结构体初始化按键 */
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); 

	/* 连接 EXTI 中断源 到key1引脚 */
  SYSCFG_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE,KEY1_INT_EXTI_PINSOURCE);

  /* 选择 EXTI 中断源 */
  EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;
  /* 中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  /* 上升沿触发 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  /* 使能中断/事件线 */
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  
  	/* 选择按键2的引脚 */ 
  GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
  /* 设置引脚为输入模式 */ 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	    		
  /* 设置引脚不上拉也不下拉 */
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  /* 使用上面的结构体初始化按键 */
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); 

	/* 连接 EXTI 中断源 到key1引脚 */
  SYSCFG_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE,KEY2_INT_EXTI_PINSOURCE);

  /* 选择 EXTI 中断源 */
  EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;
  /* 中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  /* 上升沿触发 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  /* 使能中断/事件线 */
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  
  
  	/* 选择按键3的引脚 */ 
  GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;
  /* 设置引脚为输入模式 */ 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	    		
  /* 设置引脚不上拉也不下拉 */
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  /* 使用上面的结构体初始化按键 */
  GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure); 

	/* 连接 EXTI 中断源 到key3引脚 */
  SYSCFG_EXTILineConfig(KEY3_INT_EXTI_PORTSOURCE,KEY3_INT_EXTI_PINSOURCE);

  /* 选择 EXTI 中断源 */
  EXTI_InitStructure.EXTI_Line = KEY3_INT_EXTI_LINE;
  /* 中断模式 */
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  /* 上升沿触发 */
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  /* 使能中断/事件线 */
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
/*********************************************END OF FILE**********************/




 key.h

#ifndef __KEY_H
#define __KEY_H

#include "main.h"

#define KEY0_INT_GPIO_PORT                GPIOA
#define KEY0_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOA
#define KEY0_INT_GPIO_PIN                 GPIO_Pin_7
#define KEY0_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOA
#define KEY0_INT_EXTI_PINSOURCE           EXTI_PinSource7
#define KEY0_INT_EXTI_LINE                EXTI_Line7
#define KEY0_INT_EXTI_IRQ                 EXTI9_5_IRQn
#define KEY0_IRQHandler                   EXTI9_5_IRQHandler

#define KEY1_INT_GPIO_PORT                GPIOB
#define KEY1_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOB
#define KEY1_INT_GPIO_PIN                 GPIO_Pin_0
#define KEY1_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOB
#define KEY1_INT_EXTI_PINSOURCE           EXTI_PinSource0
#define KEY1_INT_EXTI_LINE                EXTI_Line0
#define KEY1_INT_EXTI_IRQ                 EXTI0_IRQn
#define KEY1_IRQHandler                   EXTI0_IRQHandler

#define KEY2_INT_GPIO_PORT                GPIOB
#define KEY2_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOB
#define KEY2_INT_GPIO_PIN                 GPIO_Pin_1
#define KEY2_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOB
#define KEY2_INT_EXTI_PINSOURCE           EXTI_PinSource1
#define KEY2_INT_EXTI_LINE                EXTI_Line1
#define KEY2_INT_EXTI_IRQ                 EXTI1_IRQn
#define KEY2_IRQHandler                   EXTI1_IRQHandler

#define KEY3_INT_GPIO_PORT                GPIOB
#define KEY3_INT_GPIO_CLK                 RCC_AHB1Periph_GPIOB
#define KEY3_INT_GPIO_PIN                 GPIO_Pin_2
#define KEY3_INT_EXTI_PORTSOURCE          EXTI_PortSourceGPIOB
#define KEY3_INT_EXTI_PINSOURCE           EXTI_PinSource2
#define KEY3_INT_EXTI_LINE                EXTI_Line2
#define KEY3_INT_EXTI_IRQ                 EXTI2_IRQn
#define KEY3_IRQHandler                   EXTI2_IRQHandler

void EXTI_Key_Config(void);


#endif

 it.c

/**
  ******************************************************************************
  * @file    Project/STM32F4xx_StdPeriph_Templates/stm32f4xx_it.c 
  * @author  MCD Application Team
  * @version V1.4.0
  * @date    04-August-2014
  * @brief   Main Interrupt Service Routines.
  *          This file provides template for all exceptions handler and 
  *          peripherals interrupt service routine.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
  *
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  * You may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  *        http://www.st.com/software_license_agreement_liberty_v2
  *
  * Unless required by applicable law or agreed to in writing, software 
  * distributed under the License is distributed on an "AS IS" BASIS, 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_it.h"
#include "main.h"

/** @addtogroup Template_Project
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/******************************************************************************/
/*            Cortex-M4 Processor Exceptions Handlers                         */
/******************************************************************************/

/**
  * @brief  This function handles NMI exception.
  * @param  None
  * @retval None
  */
void NMI_Handler(void)
{
}

/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Memory Manage exception.
  * @param  None
  * @retval None
  */
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Bus Fault exception.
  * @param  None
  * @retval None
  */
void BusFault_Handler(void)
{
  /* Go to infinite loop when Bus Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Usage Fault exception.
  * @param  None
  * @retval None
  */
void UsageFault_Handler(void)
{
  /* Go to infinite loop when Usage Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles SVCall exception.
  * @param  None
  * @retval None
  */
void SVC_Handler(void)
{
}

/**
  * @brief  This function handles Debug Monitor exception.
  * @param  None
  * @retval None
  */
void DebugMon_Handler(void)
{
}

/**
  * @brief  This function handles PendSVC exception.
  * @param  None
  * @retval None
  */
void PendSV_Handler(void)
{
}

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
  //TimingDelay_Decrement();
}

void KEY0_IRQHandler(void)
{
	char buf[20];
  //确保是否产生了EXTI Line中断
	if(EXTI_GetITStatus(KEY0_INT_EXTI_LINE) != RESET) 
	{
		memset(buf, 0, sizeof(buf));
		sprintf(buf, "key = %d", 0);
		Gui_DrawFont_GBK16(20,30,BLUE,GRAY0, buf);
		//清除中断标志位
		EXTI_ClearITPendingBit(KEY0_INT_EXTI_LINE);     
	}  
}

void KEY1_IRQHandler(void)
{
	char buf[20];
  //确保是否产生了EXTI Line中断
	if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) 
	{
		memset(buf, 0, sizeof(buf));
		sprintf(buf, "key = %d", 1);
		Gui_DrawFont_GBK16(20,30,BLUE,GRAY0, buf);
		
		//清除中断标志位
		EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);     
	}  
}


void KEY2_IRQHandler(void)
{
	char buf[20];
  //确保是否产生了EXTI Line中断
	if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) 
	{
		memset(buf, 0, sizeof(buf));
		sprintf(buf, "key = %d", 2);
		Gui_DrawFont_GBK16(20,30,BLUE,GRAY0, buf);
		//清除中断标志位
		EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);     
	}  
}


void KEY3_IRQHandler(void)
{
	char buf[20];
  //确保是否产生了EXTI Line中断
	if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE) != RESET) 
	{
		memset(buf, 0, sizeof(buf));
		sprintf(buf, "key = %d", 3);
		Gui_DrawFont_GBK16(20,30,BLUE,GRAY0, buf);
		//清除中断标志位
		EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE);     
	}  
}


/******************************************************************************/
/*                 STM32F4xx Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f4xx.s).                                               */
/******************************************************************************/

/**
  * @brief  This function handles PPP interrupt request.
  * @param  None
  * @retval None
  */
/*void PPP_IRQHandler(void)
{
}*/

/**
  * @}
  */ 


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批量剪辑+批量发布的短视频矩阵系统,你真的需要吗?

矩阵的概念&#xff0c;可以简单理解成一种放大和复制的策略。就像你经营一家某宝店铺&#xff0c;如果每天能赚100元&#xff0c;那么通过开设更多的店铺&#xff0c;比如50家&#xff0c;你的日收入就能达到5000元。这就是所谓的“矩阵店铺”&#xff0c;它的核心在于通过增加…

uniapp使用uni-popup做底部弹出选项(vue3)

效果图 页面代码 <!-- 发票筛选弹出框 --><uni-popup ref"popupRef" type"bottom" border-radius"10px 10px 0 0" background-color"#fff"><h4 style"text-align: center;margin-bottom: 20px;">发票筛…

微服务配置管理

小编目前大一&#xff0c;刚开始着手学习微服务的相关知识&#xff0c;小编会把它们整理成知识点发布出来。我认为同为初学者&#xff0c;我把我对知识点的理解以这种代码加观点的方式分享出来不仅加深了我的理解&#xff0c;或许在某个时候对你也有所帮助&#xff0c;同时也欢…

计算机毕业设计选题推荐-企业人事管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Mysql(一) - 数据库操作, 表操作, CRUD

目录 一.数据库操作 1.增加数据库 2.展示数据库 3.删除数据库 4.选定数据库 二.表操作 1.增加选定数据库中的表 2.展示选定数据库中的表 3.删除选定数据库中表 4.查看选定表的字段信息 三.增加和查找 1.增加 2.查找 a.where的使用 b.分页查询 四.更新和删除 1.…

Spring及Springboot事件机制详解

程序设计的所有原则和方法论都是追求一件事——简单——功能简单、依赖简单、修改简单、理解简单。因为只有简单才好用&#xff0c;简单才好维护。因此&#xff0c;不应该以评论艺术品的眼光来评价程序设计是否优秀&#xff0c;程序设计的艺术不在于有多复杂多深沉&#xff0c;…

中资优配:“迪王”,拔得头筹!

Wind数据闪现&#xff0c;现在已有逾越190家上市公司入围券商9月“金股”组合。从举荐频次看&#xff0c;“迪王”比亚迪拔得头筹&#xff0c;阳光电源、我国移动等标的获券商密布举荐&#xff0c;医药生物等工作含“金”量高。 展望9月商场&#xff0c;券商判别&#xff0c;其…

真实:关于源代码防泄漏工作一些经验分享

互联网的飞速发展&#xff0c;各行各业都在往数字化转型&#xff0c;很多传统的业务数据都需要逐渐录入到电脑中&#xff0c;不仅节省了空间&#xff0c;还节约了成本。而这些数据都需要通过各类型的应用程序&#xff0c;进行分类&#xff0c;统计&#xff0c;展示&#xff0c;…

远程桌面连接出现身份验证错误解决方法

远程桌面身份验证错误的原因是什么&#xff1f; 在尝试远程连接到其他设备时&#xff0c;您可能会遇到身份验证错误&#xff0c;通常会弹出提示“出现身份验证错误&#xff0c;要求的函数不受支持”。这种身份验证错误通常是因为您输入的凭据与受控设备上设置的安全帐户信息不…

B端系统门门清之:CRM-客户管理系统,客户是一切的源头。

公司最宝贵的是什么&#xff0c;有人说是人才、有人说品牌、还有人说是技术&#xff0c;错&#xff0c;大错特错了&#xff0c;最宝贵的永远是客户&#xff0c;没有了客户&#xff0c;人才、品牌、技术都无从谈起。 今天分享最常见的B端系统CRM&#xff0c;那么是什么是CRM呢&…

大模型技术开发与应用

大模型技术开发与应用 LLM背景知识介绍: 大语言模型是一种人工智能模型,旨在理解和生成人类语言.大语言模型可以处理多种自然语言任务,如文本分类,问答,翻译,对话等等. 通常,大语言模型(LLM)是指包含数千亿(或更多)参数的语言模型(目前定义参数数量超过10B的模型为大语言模…

UI自动化测试 —— web端元素获取元素等待实践!

前言 Web UI自动化测试是一种软件测试方法&#xff0c;通过模拟用户行为&#xff0c;自动执行Web界面的各种操作&#xff0c;并验证操作结果是否符合预期&#xff0c;从而提高测试效率和准确性。 目的&#xff1a; 确保Web应用程序的界面在不同环境(如不同浏览器、操作系统)下…

注册登陆(最新版)

整体概述 本项目中&#xff0c;使用数据库连接池实现服务器访问数据库的功能&#xff0c;使用POST请求完成注册和登录的校验工作。 本文内容 本篇将介绍同步实现注册登录功能&#xff0c;具体的涉及到流程图&#xff0c;载入数据库表&#xff0c;提取用户名和密码&#xff0…

AquaCrop模型数据制备、优化方法、敏感性与气候变化影响分析及源码解析

AquaCrop是由世界粮食及农业组织&#xff08;FAO&#xff09;开发的一个先进模型&#xff0c;旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理&#xff0c;特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

PySide6复杂C/S系统开发

PySide6复杂C/S系统开发 目录 0.了解 1.前提 2.实际代码&#xff08;继承QGraphicsview修改&#xff09; 0.了解 之前写了一篇“PySimpleGUI复杂C/S系统开发”博客&#xff08;由于pysimplegui更改了协议&#xff0c;因此不再推荐&#xff0c;用了pyside6后yyds&#xff09…

Transiting from CUDA to HIP (二)

一、Identifying Architecture Features 1. HIP_ARCH Defines 在 CUDA 编程中&#xff0c;__CUDA_ARCH__ 是一个预定义的宏&#xff0c;用于指示当前编译的代码所针对的 NVIDIA GPU 的计算能力&#xff08;Compute Capability&#xff09;。开发者可以使用这个宏来编写条件代…

Xinstall助力App推广:全方位支持,精准数据分析,你值得拥有

在如今的移动互联网时代&#xff0c;App推广已成为每个应用开发者必须面对的重要课题。然而&#xff0c;推广过程中往往伴随着诸多痛点&#xff0c;如数据混乱、投放盲目、决策滞后以及作弊困扰等。这些问题不仅影响了推广效果&#xff0c;还可能导致资源的浪费和投入产出不均衡…

数据安全认证来了解一下

随着数据安全法及个人信息保护法的实施&#xff0c;数据安全相关岗位在安全行业变得极为热门。 根据数据安全法第二十条&#xff0c;国家鼓励教育、科研机构和企业等开展数据开发利用技术和数据安全相关的教育和培训&#xff0c;采用多种途径培育专业人才&#xff0c;促进人才…

【Linux】使用Linux实现小程序 - 进度条

目录 一、缓冲区二、回车换行的概念三、进度条的设计3.1 版本1&#xff08;没有配合场景&#xff09;3.2 版本2&#xff08;配合场景&#xff09;3.3 版本3&#xff08;美化进度条&#xff09; 结尾 一、缓冲区 C/C语言&#xff0c;会针对标准输出&#xff0c;给我们提供默认的…

c++----杨辉三角(补充)

大家好。今天我给大家带来的是&#xff0c;我们以前讨论过的知识点。杨辉三角。我相信大家在c的学习中已经清楚的了解和认识到了杨辉三角的实现逻辑和实现方法了。但是应该大多局限于在c中吧。我们都知道我们c与c其实在一些地方是可以相互成就的。那么我们在c中的经典题目杨辉三…