sujianli 发表于 2008-5-22 03:13:07

STM32入门例程,驱动8位数码管显示“12345678”源程序

STM32,通过595串行,驱动8位数码管显示“12345678”源程序
在Mini-STM32学习板上上调试通过
(Mini-STM32学习板介绍:http://www.u-easytech.com/chinese/product.asp?id=96)
STM32技术探讨QQ:583508038

源程序ourdev_289742.rar(文件大小:589K) (原文件名:八位数码管12345678.rar)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_289743.JPG
效果照片 (原文件名:595mn.JPG)

http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_289744.JPG
mini板 (原文件名:mn-stm32.JPG)

sujianli 发表于 2008-5-24 17:10:10

/*--------------------------------------
//GPIO define
//Design by :Tan/yicheng
//pctanyicheng@163.com
//www.u-easytech.com
//u-easytech@163.com
//重庆优易特电子
// COPYRIGHT:重庆优易特电子
//http://www.u-easytech.com/chinese/

//FUNCTION:用595完成八位数码管显示
--------------------------------------------------------------------------       */

#include <stm32f10x_lib.h>            /* STM32F10x Library Definitions      */
#include "UET_GPIO.h"
//unsigned charseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff};       
unsigned charseg[]={
                        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                        0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x78,0x5c,0x54,
                        0x40,0x81,0x88,0x3e,0x70,0x00
                                                } ;
                                                //0,1,2,3,4,5,6,7,8,9,
                                //A,b,C,d,E,F,P,t,o,n,
                                 //-,~,_,U,r,SP,
                                               
//unsigned charDAT[]={0x7f,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};             //位选择
unsigned char BitSelect_Code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   //因为ULN2803驱动反相,所以位码要用共阳极的位码
                                                                        //COM1 COM2 COM3 COM4        COM5 COM6 COM7 COM8
                                                                                                                                               // B0   B1B2   B3    B4   B5   B6   B7
unsignedcharDisp_buffer[]={0,1,2,3,4,5,6,7};                         //段缓冲区


unsignedchar        Bit_NO=0           ;                        //          选择第Bit_NO位数码管
unsignedchar        Buffer_NO=0;                                             //   缓冲区的第Buffer_NO

u32 LED_DATA=01234567;


#define SER(x)                 GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_7)          | (x ? GPIO_Pin_7 : 0)
#define SCK(x)                GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_5)          | (x ? GPIO_Pin_5 : 0)
#define RCK(x)                GPIOA->ODR=(GPIOA->ODR&~GPIO_Pin_6)          | (x ? GPIO_Pin_6 : 0)


/*******************************************************************************
* Function Name:void WR_595(unsigned char segdata)
* Description    : 595串行输入
* Input          : 段码
* Output         : None
* Return         : None
*******************************************************************************/
void WR_595(unsigned char segdata) //输入一字节数码管数据进595
{
unsigned char i,temp;
temp=segdata;
for(i=0;i<8;i++)         //循环移入8位数据,
{               
SCK(0);
if(temp&0x80)                  // 取数码的最高位
   SER(1);
   else
   SER(0);
temp=temp<<1;
SCK(1);       //上升沿把一位数据移入595
}
}

/*******************************************************************************
* Function Name: void OUT_595(void)
* Description    : 595锁存输出
* Input          : 段码
* Output         : None
* Return         : None
*******************************************************************************/
void OUT_595(void)          //上升沿将数据送到输出锁存器
{unsigned i;
                  
        RCK(0);
for(i=0;i<10;i++)        ;
        RCK(1);
        RCK(0);
}

/*******************************************************************************
* Function Name: void LED_Brush(u32 LED_DATA)
* Description    : 数码管缓冲数据刷新
* Input          : u32 LED_DATA
* Output         : None
* Return         : None
*******************************************************************************/

void LED_Brush(u32 LED_DATA)
{
   
Disp_buffer=LED_DATA/1000%10;
Disp_buffer=LED_DATA/100%10;                      
Disp_buffer=LED_DATA/10%10;
Disp_buffer=LED_DATA%10;
Disp_buffer=LED_DATA/10000000;
Disp_buffer=LED_DATA/1000000%10;                      
Disp_buffer=LED_DATA/100000%10;
Disp_buffer=LED_DATA/10000%10;
}
/*******************************************************************************
* Function Name: void Display(void)
* Description    : 显示
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/

void Display(void)
{
   LED_Brush(12345678);//调用显示函数
   WR_595(BitSelect_Code);                        // 位码
   WR_595(seg]);        //段码
       OUT_595();       
       Bit_NO++;
       Buffer_NO++;
       if( Buffer_NO>7) Buffer_NO=0;
       if(Bit_NO>7)Bit_NO=0;       


}

bluelucky 发表于 2008-8-11 13:47:28

以下蓝色文字由版主:bluelucky 于:2008-08-11,13:47:28 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:ARM技术论坛
即将移去的分区:Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font>

020411 发表于 2008-8-30 14:39:27

谢谢

ddllxxrr 发表于 2008-9-22 12:34:44

支持一下

jewen_he 发表于 2011-5-5 09:05:17

顶dd

HYLG 发表于 2011-5-5 09:52:25

应该有5根线呀,数据,时钟,锁存,电源,地
4根线也可以吗?

HYLG 发表于 2011-5-5 09:58:07

对不起,看错了。是5根线。

zbsharp 发表于 2011-11-6 09:50:38

mark

龙道行 发表于 2012-10-10 10:39:06

mark{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}{:lol:}

gbwaikp2011 发表于 2012-10-13 19:00:28

顶起!!!!!!!

四方车队 发表于 2012-10-15 08:41:22

顶呱呱!!!!!

jj123paopao 发表于 2012-12-10 16:37:03

学习了~~

18618434885 发表于 2013-11-1 02:03:06

正在学习595驱动数据管呢,谢谢楼主……
页: [1]
查看完整版本: STM32入门例程,驱动8位数码管显示“12345678”源程序