×
单片机 > 单片机程序设计 > 详情

stm32控制共阳数码管以及共阴数码管

发布时间:2020-08-27 发布时间:
|

共阳数码管


#include "stm32f10x.h"  

u8table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};//共阳数码管0 1 2 3 4 5 6 7 8的编码  

void delayms(u16 time)//延时函数 延时1ms  

{  

         u16i=0;  

         while(time--)  

         {  

                   i=12000;  

                   while(i--);  

   

         }  

}  

void Init()  

{  

         GPIO_InitTypeDefGPIO_InitStructure;  //定义一个管脚初始化的结构体  

         //开启PA口时钟  

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  

         //配置PAO的模式  

         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;  

         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;  

         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  

         GPIO_Init(GPIOA,&GPIO_InitStructure);  

}  

int main(void)  

{  

         Init();  

         while(1)  

         {  

                            inti;  

                            for(i=0;i<9;i++)  

                            {  

                                      GPIO_Write(GPIOA,table[i]);          

                                      delayms(200);  

                            }  

                             

         }  

}  




共阴数码管


#include"stm32f10x.h"  

u8table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};//共阴数码管对应的编码  

voiddelayms(u16 time)  

{  

         u16 i=0;  

         while(time--)  

         {  

                   i=12000;  

                   while(i--);  

   

         }  

}  

voidInitStm32()  

{  

         GPIO_InitTypeDefGPIO_InitStructure;  //定义一个管脚初始化的结构体  

         //开启PA口时钟  

         GPIO_InitTypeDef DuanAndWeiMa;  

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);  

         //配置PAO的模式  

         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;  

         DuanAndWeiMa.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;             //为什么要用一杠      0是段码,1是位码  

         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;  

         DuanAndWeiMa.GPIO_Mode=GPIO_Mode_Out_PP;  

         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  

         DuanAndWeiMa.GPIO_Speed=GPIO_Speed_50MHz;  

         GPIO_Init(GPIOA,&GPIO_InitStructure);  

         GPIO_Init(GPIOB,&DuanAndWeiMa);  

}  

intmain(void)  

{  

         InitStm32();  

         while(1)  

         {  

                   GPIO_SetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_Write(GPIOA,0xfe);                                               //问题是:第8个数码管控制不了,一直显示的是8  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_SetBits(GPIOB,GPIO_Pin_0);  

                   GPIO_Write(GPIOA,table[0]);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);  

                   delayms(2);  

   

                   GPIO_SetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_Write(GPIOA,0xfd);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_SetBits(GPIOB,GPIO_Pin_0);  

                   GPIO_Write(GPIOA,table[1]);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);  

                   delayms(2);  

   

                   GPIO_SetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_Write(GPIOA,0xfb);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_SetBits(GPIOB,GPIO_Pin_0);  

                   GPIO_Write(GPIOA,table[2]);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);  

                   delayms(2);  

   

                   GPIO_SetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_Write(GPIOA,0xf7);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_1);  

                   GPIO_SetBits(GPIOB,GPIO_Pin_0);  

                   GPIO_Write(GPIOA,table[2]);  

                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);  

                   delayms(2);  

         }  

}  


关于ODR和IDR的用法:  


ODR类似于51的P0口:GPIO_A_ODR=0xff;和GPIO_Write(GPIOA,0xff);有一样的效果  


IDR的用法: u8    value; value=GPIOA->IDR;  


 

 


模式如果为输入,GPIO_Speed可以不赋值  


 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向