实验目的: 弄清楚数码管原理, 掌握两位数及三位数码管的显示即动态扫描.
代码:
#include "stm32f10x.h"
int main()
{
u32 i,m,k,j;
u32 a[10] = {0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//共阳极数码管编码表0-9
GPIO_InitTypeDef GPIO_InitStructure; //结构体初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //配置GPIOA 的引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置50m速度
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽式输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //打开GPIOA的引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50m的速度
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_All; //配置引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽式输出
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化
//GPIO_SetBits(GPIOA,GPIO_Pin_All);
//GPIO_ResetBits(GPIOA,GPIO_Pin_0);
//GPIO_Write(GPIOB,a[0]);
GPIO_SetBits(GPIOB,GPIO_Pin_All); //置1 GPIOB
while(1)
{
for(m=0;m<10;m++) //十位数循环
for(i=0;i<10;i++) //个位数循环
for(k=0;k<1000;k++) //循环以便辅助显示
{
for(j=0;j<1000;j++) // 循环显示
{
GPIO_Write(GPIOA,a[m]); //写、关,开
GPIO_SetBits(GPIOB,GPIO_Pin_1);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
for(j=0;j<5000;j++);} //延迟
for(j=0;j<1000;j++) //循环显示
{
GPIO_ResetBits(GPIOB,GPIO_Pin_1); // 写、关、开
GPIO_Write(GPIOA,a[i]);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
for(j=0;j<5000;j++); //延迟
}
GPIO_SetBits(GPIOB,GPIO_Pin_1); //关闭
}
}
}