#include "smg.h"
u8 smgduan[12]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f,0x40,0x00};//0~F 数码管段选数据
void smg_init()
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO
/* 开启GPIO时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
/* 配置GPIO的模式和IO口 */
GPIO_InitStructure.GPIO_Pin=smg_duan; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化GPIO */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */
}
void smg_display(u16 shi,u16 fen,u16 miao) //数码管时钟显示
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[shi/10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfe));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[shi%10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfd));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
if(miao%2)
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[11]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfb));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[fen/10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xf7));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[fen%10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xef));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
if(miao%2)
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[11]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
}
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xdf));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[miao/10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xbf));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[miao%10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0x7f));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[11]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0x7f));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
}
void sfr_display(u16 ds) //数码管距离显示
{
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfe));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfd));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[0]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xfb));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[ds/100]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xf7));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(200);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[ds%100/10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xef));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[ds%10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xdf));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0xbf));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[10]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0x7f));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_Write(GPIOC,(u16)(smgduan[11]));
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_Write(GPIOC, (u16)(0x7f));
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_us(100);
}
|