linux 动态扫描 数码管,STM32数码管动态扫描

买了STM32 MINI板没有带屏的,做其他实验无法显示数据,今天没事弄了个8位数码管显示数据的程序,直接调用shuma_display()这个函数就行了,方便以后用啊,是控制BSRR寄存器实现的,断码用PA0-7口,位码用PB5-7口控制38译码器选择8位数码管,没有用到锁存器,是IO口直接驱动的,3.3V看着还行,能显示很清楚,现把主要代码粘上来,各位大虾请指点有没有更好的方法

/*************************shuma.c*********/

#include "stm32f10x.h"

#include "shuma.h"

#include "delay.h"

u32 str[8];

u32 wei_table[]={0x00E00000,0x00C00020,

0x00A00040,0x00800060,

0x00600080,0x004000A0,

0x002000C0,0x000000E0,

};     //PB5-7,数码管位码,8位数码管,138译码器控制选择,写入BSRR寄存器,用其他IO口该码需改变

u32 duan_table[]={0x00C0003F,0x00F90006,

0x00A4005B,0x00B0004F,

0x00990066,0x0092006D,

0x0082007D,0x00F80007,

0x0080007F,0x0090006F,

};   //PA0-7,数码管段码0-9,共阴,写入BSRR寄存器

void shuma_init()   //数码管IO管脚初始化,断码为PA0-7,位码为PB5-7,位码为3个IO口,通过38译码器控制8位数码管

{

RCC->APB2ENR|=1<<2;  //使能GPIOA时钟

RCC->APB2ENR|=1<<3;  //使能GPIOB时钟

GPIOA->CRL&=0x00000000;

GPIOA->CRL|=0x33333333; //设置PA0-7为推挽输出

GPIOB->CRL&=0x000FFFFF;

GPIOB->CRL|=0x33300000; //设置PB5-7为推挽输出

//   GPIOA->ODR|=0xFF; //设置PA0-7输出高,上拉

//   GPIOB->ODR|=0xE0; //设置PB5-7输出高,上拉

}

void shuma_display(u32 value)    //显示8位数据,分离8次,即千万

{

u8 i;

str[0]=duan_table[value/10000000];            //千万位

str[1]=duan_table[(value%10000000)/1000000];          //百万位

str[2]=duan_table[((value%10000000)%1000000)/100000];        //十万位

str[3]=duan_table[(((value%10000000)%1000000)%100000)/10000];      //万位

str[4]=duan_table[((((value%10000000)%1000000)%100000)%10000)/1000];    //千位

str[5]=duan_table[(((((value%10000000)%1000000)%100000)%10000)%1000)/100];      //百位

str[6]=duan_table[((((((value%10000000)%1000000)%100000)%10000)%1000)%100)/10]; //十位

str[7]=duan_table[((((((value%10000000)%1000000)%100000)%10000)%1000)%100)%10]; //个位

for(i=0;i<8;i++)      //循环8次,动态扫描

{

GPIOA->BSRR|=str;

GPIOB->BSRR|=wei_table;

delay_ms(2);

}

}

/***********************************************/

/*******************main.c****************************/

#include "stm32f10x.h"

#include "delay.h"

#include "sys.h"

#include "shuma.h"

int main(void)

{

SystemInit();   //初始化系统时钟72MHZ

delay_init(72);   //初始化延时函数

NVIC_Configuration();  //设置中断分组

shuma_init();

while(1)

{

shuma_display(76543210);

}

}

/*********************************/

none.gif

78bb7694db2cb88e218231eb3d539ed7_578.jpg (0 Bytes, 下载次数: 2)

2010-12-14 22:54 上传

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值