普中科技的单片机开发实验仪—数码管 代码

 时间:2024-10-13 13:00:05

1、主函数#include 争犸禀淫"stm32f10x.h"#include "delay.h"#include "gpio.h&qu泠贾高框ot;#include "timer.h"void shuma_display(u32 value);void TIM3_IRQHandler(void);u32 SegData[8];u32 wei_table[]={0x00E00000,0x00C00020, 0x00A00040,0x00800060, 0x00600080,0x004000A0, 0x002000C0,0x000000E0, }; //PB5-7,数码管位码,8位数码管,138译码器控制选择,写入BSRR寄存器,用其他IO口该码需改变u32 duan_table[]={0x00C0003F,0x00F90006, 0x00A4005B,0x00B0004F, 0x00990066,0x0092006D, 0x0082007D,0x00F80007, 0x0080007F,0x0090006F, }; //PA0-7,数码管段码0-9,共阴,写入BSRR寄存器int main (){ delay_init(); GPIO_Configuration(); //通用IO端口配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms while (1) { shuma_display(76543210); }}

2、gpio.c#include "gpio.h"void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure; //启动GPIO模块时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB1Periph_TIM2 | RCC_APB2Periph_AFIO, ENABLE); /* GPIOA Configuration: */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //所有GPIO为同一类型端口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出的最大频率为50HZ GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA端口 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB端口}

3、timer.c#include "挢旗扦渌;timer.h"void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig( //使能或者失能指定的TIM中断 TIM3, //TIM2 TIM_IT_Update , ENABLE //使能 ); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设}

4、void TIM3_IRQHandler(void) //TIM3中断{static u8 cnt=8;if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //产生溢出中断{if( -- cnt ==0 | SegData[cnt-1]==0x00C0003F) cnt=8; //控制循环并判断第几位为0高位就不再显示0GPIOA->BSRR|=SegData[cnt-1]; //段数据GPIOB->BSRR|=wei_table[cnt-1]; //位数据TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除中断标志}}放在timer.c中,或者主函数中。

5、void shuma_display(u32 value) //显示8位数据,分离8次,即千万{u8 i=0;for(i=0;i<8;i++) { SegData[7-i] = duan_table[value%10]; //将值分离 value/=10; }}放在主函数中,或者新建c和h文件。

  • MATLAB有那些数据类型
  • Python如何判断两个元组是否相等
  • c语言怎么编写显示已输入账户的代码
  • switch case语句的用法
  • 如何用js实现网页状态栏显示当前时间
  • 热门搜索
    三月三手抄报图片大全 梦想起航手抄报 珍惜时间手抄报 绿色家园手抄报资料 有关于安全的手抄报 食品安全的手抄报 我爱读书手抄报花边 节约用水用电手抄报 安全消防手抄报 有关文明的手抄报