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

发布者:TechGuru123最新更新时间:2018-05-07 来源: eefocus关键字:stm32  共阳数码管  共阴数码管 手机看文章 扫描二维码
随时随地手机看文章

共阳数码管


#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  共阳数码管  共阴数码管 引用地址:stm32控制共阳数码管以及共阴数码管

上一篇:C51单片机是怎么存储程序和数据的
下一篇:51单片机2个外部中断的应用

推荐阅读最新更新时间:2024-03-16 16:01

STM32互补PWM输出使能控制
STM32的高级定时器TIM1可以产生互补的PWM,并且可以通过相关寄存器的设置使能或关闭PWM的输出。在编写BLDC的驱动程序时,本人利用TIM1的channel1,2,3三个通道生成了三路互补的PWM波形,定时器驱动程序如下: void TIM1_Init(u16 arr, u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRIni
[单片机]
STM32按键长短按:超强移植性,回调函数按键处理机制
1.1 实验简介 按键长按与按键短按在很多产品中都需要应用到,在我们生活中,例如:手机开关机用到的就是按键长按,手机设置音量用的是按键的短按。在本实验平台的综合实验中,也需要用到按键的长短按,所以,我们很有必要学习如何实现按键的程序设计。 设计按键长短按的思路其实很简单,就是计数原理。假设,定时器定时10ms中断一次,在中断函数中,判断按键是否按下,如果按下,然后统计按键按下的时间长度是多少个10ms,如果按下了100个10ms,则表明长按了1秒;如果按下了300个10ms,表示按下了3秒。 1.2 硬件设计 1) KEY2连接到PA8,稳定按下是低电平,稳定松开是高电平。 2) KEY3连接到PB10,稳定按下
[单片机]
STM32重定向printf到串口
首先改写fputc()和fgetc()函数 //重定向c库printf函数到串口 int fputc(int ch, FILE *f) { //发送一个字节 USART_SendData(DEBUG_USART, (uint8_t)ch); //等待发送完成 while(USART_GetFlagStatus(DEBUG_USART,USART_FLAG_TXE) == RESET); return ch; } //重定向c库scanf函数到串口,重定向后可以使用scanf,getchar等函数 int fgetc(FILE *f) { //等待串口输入数据 while(USART_GetFla
[单片机]
<font color='red'>STM32</font>重定向printf到串口
STM32启动代码分析
启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析。启动代码作用一般是:1)堆和栈的初始化;2)向量表定义;3)地址重映射及中断向量表的转移;4)设置系统时钟频率;5)中断寄存器的初始化;6)进入C应用程序。 (1)按启动代码的次序,先看堆和栈的初始化: Stack_Size EQU 0x00000200 ;定义Stack_Size为0x00000200 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定义栈,可初始为0,8字节对齐 Stack_Mem
[单片机]
STM32IO口8位操作移位的方式
当我们采用并口传输数据的时候都会用如下的方法进行数据传输 #define DATAOUT(x) GPIOB- ODR=x; STM32IO口都是16位的,所以当调用DATAOUT的时候就直接对GPIOB的16个IO口总体进行操作。但是我们如果只是选择高8位或者低8位的时候就需要进行移位操作,到底该怎么移位呢现在我们来看如下代码。 如果我们选择的是0-7位IO口那么传输数据的时候代码如下 void LCD_DrawPoint_16Bit(u16 color) { #if LCD_USE8BIT_MODEL==1 LCD_CS_CLR; LCD_RD_SET; LCD_RS_SET;//дµØÖ· DATAOUT(color 8
[单片机]
STM32 的位带操作
位操作就是可以单独的对一个比特位进行读和写,这个在51单片机中非常常见。51单片机中通过关键字sbit来实现位定义,STM32中则是通过访问位带别名区的地址来实现对某一位的操作。 例如51单片机中可以实现以下操作 #define LED_ON 0 sbit LED = P2^0; LED = LED_ON; 而现在STM32的位段、位带别名区就为了实现这样的功能。STM32针对SRM和外设区开辟了两个内存空间(位带区),分别是SRAM和外社区的最低1MB的空间。这两个1MB的内存空间除了可以像正常的 RAM 一样操作外,他们还有自己的位带别名区,位带别名区就是把1MB位带区的每一个位膨胀成一个32位的字,当通过访问位带
[单片机]
<font color='red'>STM32</font> 的位带操作
openmv舵机云台 自动追踪色块 STM32源程序
之前做的舵机云台自动瞄色块的装置 现在已经拆掉了,所以没有图片 就是类似19年国赛电磁的发挥部分要求 单片机源程序如下: #include control.h u8 key = 0; u8 mode = 0; u8 sign = 0; u16 mode_r = 0; u16 mode_p = 0; void TIM1_UP_IRQHandler(void) //TIM1中断 { if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(T
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved