Keil5代码模块化处理以LED闪烁为例

  1. 新建一个工程文件
  2. 新建文件夹
  3. 新建project工程文件

 

 

  1. 选择AT89C52单片机 点击ok
  2. 右击Source Group1 点击 Add New item
  3. 添加main文件
  4. 添加REGX52.H 并写主框架
  5. 和添加main,c文件一样的方法添加delay.c和delay.h。。。。。。.c文件是用来函数、变量的定义,.h可以用作外部调用的函数,变量的声明。
  6. 在delay.c中写延时函数

 

  1. 在delay.h中写#ifndef__DELAY_H__和#define __DELAY_H__ 后面加#endif 在文中只需要写delay.c中的定义的函数名即可
  2. 在主函数中写入点灯程序 一定要在上面引入延时函数
    ​​​​​​​
  3. 在keil5中编译生成.hex’文件  一点更要选中greate HEX这个选项,点击ok以后再点击第一步的编辑按钮 生成编译。
    ​​​​​​​
  4. 双击AT89C51板子  点击Program File文件选择上一步生成的.hex文件​​​​​​​
    ​​​​​​​
  5. 然后启动仿真 显示led闪烁

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是使用STM32和Keil5实现使用电位器控制LED呼吸闪烁频率的代码: ``` #include "stm32f10x.h" #define LED_PIN GPIO_Pin_8 #define LED_PORT GPIOA #define POT_ADC_CHANNEL ADC_Channel_0 uint16_t adc_value; float freq = 0.2; void LED_Init(void); void ADC_Init(void); float get_freq(void); int main(void) { LED_Init(); ADC_Init(); while(1) { freq = get_freq(); TIM_SetAutoreload(TIM2, (uint16_t)(50000 / freq) - 1); //设置TIM2的自动重载值,用于控制LED呼吸的频率 if(TIM_GetCounter(TIM2) < 25000 / freq) { LED_PORT->BSRR = LED_PIN; //LED亮 } else { LED_PORT->BRR = LED_PIN; //LED灭 } } } void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = LED_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LED_PORT, &GPIO_InitStructure); } void ADC_Init(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, POT_ADC_CHANNEL, 1, ADC_SampleTime_28Cycles5); ADC_Cmd(ADC1, ENABLE); } float get_freq(void) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); adc_value = ADC_GetConversionValue(ADC1); return (adc_value / 4096.0 * 19.8 + 0.2); } ``` 这段代码主要是通过ADC采集电位器的模拟信号,计算出频率,然后将频率设置为TIM2的自动重载值,用于控制LED呼吸的频率。其中,LED初始化函数LED_Init()用于初始化LED引脚,ADC初始化函数ADC_Init()用于初始化ADC模块,get_freq()函数用于计算频率。在主函数中,通过判断TIM2计数器的值来控制LED的亮灭。 希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值