关于595驱动4寸数码管的程序stm32f103

#include "B_led.h"
#include "delay.h"

#define RCLK PBout(10)            //STR  //sbit HC595Rclk =P1^6;
#define SCLK PBout(11)          //CLK    //sbit HC595Clk =P1^7;
#define DIO  PAout(9)        //sbit HC595In =P1^5;    //DATA





uint8_t  LED_NU[10] = { 0xFA,0x30,0xD9,0x79,0x33,0x6B,0xEB,0x38,0xFB,0x7B};//字模数组 
//			    { 0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};//字模数组  7寸以上的方形的驱动板
//                             0   1    2     3    4    5    6   7    8     9    
//数码管  G  F  DP  A   B  C  D  E
//74HC595 Q0 Q1 Q2 Q3  Q4  Q5 Q6 Q7
//                             fd 

//  E D  C  B  A  DP F  G
// Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

void LED4_Display (void);			// LED显示
void LED_OUT(u8 X);				// LED单字节串行移位函数

uint8_t LED[8];	//用于LED的8位显示缓存
//sbit DIO = P1^0;				//串行数据输入
//sbit RCLK  = P1^1;				//时钟脉冲信号——上升沿有效
//sbit SCLK = P1^2;				//打入信号————上升沿有效

//-----------------------------------------------------------------------------


 
 
void B_led_Init(void) //IO初始化  PA0    
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;
 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB ,ENABLE);//使能PORTA,PORTE时钟
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
}	
	
	


void LED_Display (uint8_t DE)
{
	uint8_t i;
	i=LED_NU[DE];	
	
	LED_OUT(0x8b);
	LED_OUT(i);   //0xfb
	

	RCLK = 1;
	delay_us(2);
	RCLK = 0;
	//delay_us(2);
	

}

void LED_OUT(uint8_t X)
{
	u8 i;
	
	for(i=0;i<=7;i++)
	{
		if (X&0x80) 
		{
			DIO=1;//delay_us(1);//DIO=1;
		} 
		else 
		{
			DIO=0;//delay_us(1);//DIO=0;
		}
             X<<=1;
		
		SCLK = 1;
		delay_us(2);
		SCLK = 0;
		
	}
}







上面是.c文件

#ifndef __B_LED_H
#define __B_LED_H			  	 
#include "sys.h"
#include "stdlib.h"	
#include "stm32f10x.h"
#include "delay.h"

void LED_Display (uint8_t DE);
void LED_OUT(uint8_t X);
void B_led_Init(void);
void LedPlay(void);

#endif 

上面是.h文件

下面是51的程序

/*3位显示模块测试程序,测试显示模块从0-9循环显示*/

#include

#define uint unsigned int
uint n;

//三个管脚定义
sbit HC595Clk =P1^7;   //CLK
sbit HC595Rclk =P1^6;  //STR
sbit HC595In =P1^5;    //DATA


unsigned char  LED_NU[10] = { 0xFA,0x30,0xD9,0x79,0x33,0x6B,0xEB,0x38,0xFB,0x7B};//字模数组 
//			    { 0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};//字模数组  7寸以上的方形的驱动板
//                             0   1    2     3    4    5    6   7    8     9    
//数码管  G  F  DP  A   B  C  D  E
//74HC595 Q0 Q1 Q2 Q3  Q4  Q5 Q6 Q7    
unsigned char LEDR[3] ;  			
unsigned char LED[3] ; 
//unsigned char LEDR[8] ;  			
//unsigned char LED[8] ; 


void delay(uint z)   //延时函数
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}


void LedPlay ( void )  //显示函数
{
      unsigned char i ;
      unsigned char j ;
      
      LEDR[0] = LED[0] ; 
      LEDR[1] = LED[1] ;
      LEDR[2] = LED[2] ; 
    
     //for( j = 8 ; j > 0 ; j-- )  
     for( j = 3 ; j > 0 ; j-- )  
      {
      
        for( i = 0 ; i < 8 ; i++ )
          {
             
              HC595In = LEDR[j-1]&0X80  ; 
              HC595Clk = 1 ;
    		  delay(1);
    		  HC595Clk = 0;
    		  delay(1);
              LEDR[j-1] = LEDR[j-1] << 1  ;
    			
          }
      }  
      delay(1);
      HC595Rclk = 1 ; 
      delay(1);
      HC595Rclk = 0 ;
      delay(1);
}




 main()  //主程序
 { 
	unsigned char i;	 

		
    HC595Clk = 1 ; 	  //数码显示屏初始化
    HC595Rclk =1 ;
    HC595In = 1 ;  
			
   while(1)
   {  
	//for (i=0; i<8; i++)
	for (i=0; i<3; i++)
	{
	    LED[i] = LED_NU[n];		//提取显示数字的字模
        }
       n++;
       if (n==10)
           n=0;
  
	LedPlay () ;		//显示函数
        delay(4000);
 
	}
}




关于595驱动4寸数码管的程序stm32f103_第1张图片

上面是电路图 注意两个电源的电压  一个为4寸数码管供电一个为595供电  还有一个2803

一起组成这个驱动电路

 

效果还是不错的 需要看图的私信.

你可能感兴趣的:(数码管,595,stm32,2803)