#include"main.h"
#include"delay.h"
uint16_t lay[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管0~9的显示
uint16_t sec=0;
uint32_t n,fas_us,Delay_ms,fas_ms,reload,m;
int main(void)
{
GPIO_InitTypeDef GPIO_Def;
SystemInit();
delay_init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_Def.GPIO_Pin=0xff;
GPIO_Def.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Def.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_Def);
GPIO_Def.GPIO_Pin=0xff;
GPIO_Def.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Def.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&GPIO_Def); //GPIOA和GPIOB的初始化
GPIO_ResetBits(GPIOA,0XFF);
GPIO_ResetBits(GPIOB,0XFF); //GPIOA GPIOB 引脚清零
while(1)
{
GPIO_Write(GPIOA,lay[sec/10]);
GPIO_Write(GPIOB,lay[sec%10]); //GPIOA GPIOB中写入数值,GPIOA显示秒表十位数字,GPIOB显示个位数字
delay_ms(100);
sec++;
if(sec==60)sec=0;
}
return 0;
}
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fas_us=SystemCoreClock/8000000; //为系统时钟的1/8
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启systick
fas_ms=(u16)fas_us*1000;
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=nms*fas_ms; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0X01; //ENABLE SYSTICK
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16))); //等待时间到达,标志位为1时,跳出循环
SysTick->CTRL=0x00; //DISABLE SYSTICK
SysTick->VAL=0x00; //清空计数器
}
程序如上,大神看看有错吗,还有图中的sec 是秒吗,怎么觉得显示为1.000000时觉得过了好长时间呢
|