STM32 TM1640芯片驅動程序


轉自 https://blog.csdn.net/cxw312864660/article/details/89374994

 

#ifndef __TM1640_H__
#define __TM1640_H__
#include "stm32f10x.h"  
 
#define   ADDR_START1640        0XC0  
  
#define     DSP1640_DIS     0  
#define     DSP1640_ENB     1  
  
/* 
控制顯示 
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f 分別對應 
1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16    
 
設置數據,0x40,0x44分別對應地址自動加一和固定地址模式      
*/  
  
#define         SET_DATA_ORDER          0X40  //數據命令設置 地址自動加1  
#define                SET_DISPLAY             0X8F  //顯示命令控制  脈沖寬度14/16  
#define         SET_DSP1640_DIS          0x80  //顯示關控制  
   
  
#define     VT_DLY1640           150//80//10//2000  
#define     VT_DLYNOP            10//80//10  
 
 
 
           
 
#define SCLK_GPIO_PORT      GPIOB                      
#define SCLK_GPIO_CLK         RCC_APB2Periph_GPIOB        
#define SCLK_GPIO_PIN        GPIO_Pin_7                
 
#define DIN_GPIO_PORT       GPIOB                          
#define DIN_GPIO_CLK         RCC_APB2Periph_GPIOB        
#define DIN_GPIO_PIN        GPIO_Pin_6    
 
 
#define TM1640SLK_LOW      GPIO_ResetBits( SCLK_GPIO_PORT, SCLK_GPIO_PIN )
#define TM1640SLK_HING     GPIO_SetBits( SCLK_GPIO_PORT, SCLK_GPIO_PIN )
#define TM1640DAT_LOW      GPIO_ResetBits( DIN_GPIO_PORT, DIN_GPIO_PIN )
#define TM1640DAT_HING     GPIO_SetBits( DIN_GPIO_PORT, DIN_GPIO_PIN )
 
 
void TM1640_GPIO_Config(void);
void Nop1640(u16 T_Dly);
void TM1640Start(void);
void TM1640Stop(void);
void TM1640WriteByte(u8 date);
void TM1640_Init(u8 InValue);
void TM1640_SendData(u8 Addr1640,u8 *a,u8 DataLong);
 
#endif
————————————————
版權聲明:本文為CSDN博主「cxw312864660」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cxw312864660/article/details/89374994

 

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
 
#include "TM1640.h"
 
/********  TM1640 GPIO 配置 *************************/
void TM1640_GPIO_Config(void)
{        
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd( SCLK_GPIO_CLK | DIN_GPIO_CLK, ENABLE);
            
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    
        GPIO_InitStructure.GPIO_Pin = SCLK_GPIO_PIN;
        GPIO_Init(SCLK_GPIO_PORT, &GPIO_InitStructure);       // 初始化 SCLK 引腳
    
        GPIO_InitStructure.GPIO_Pin = DIN_GPIO_PIN;
        GPIO_Init(DIN_GPIO_PORT, &GPIO_InitStructure);      // 初始化 DIN   引腳
 
             // 引腳初始狀態為高,便於產生下降沿
        GPIO_SetBits(SCLK_GPIO_PORT, SCLK_GPIO_PIN);     
        GPIO_SetBits(DIN_GPIO_PORT, DIN_GPIO_PIN);
}
  
//*************************************  
// 函數名稱:_Nopt  
// 函數功能:延時函數  
// 入口參數:延時時間  
// 出口參數:無  
//***************************************/  
void Nop1640(u16 T_Dly)  
{     
        while(T_Dly--);           
        return ;  
}  
//****************************************  
// 函數名稱:TM1640Start  
// 函數功能:TM1640起始信號  
// 入口參數:無  
// 出口參數:無  
//***************************************/  
void TM1640Start(void)  
{   
        TM1640DAT_HING;  
        Nop1640(VT_DLYNOP) ;  
        TM1640SLK_HING;  
        Nop1640(VT_DLY1640) ;  
        TM1640DAT_LOW;  
        Nop1640(VT_DLY1640) ;  
        TM1640SLK_LOW;  
        Nop1640(VT_DLY1640) ;  
}  
//*************************************  
// 函數名稱:TM1640Stop  
// 函數功能:TM1640結束信號  
// 入口參數:無  
// 出口參數:無  
//***************************************/  
void TM1640Stop(void)  
{  
        TM1640DAT_LOW;  
        Nop1640(VT_DLYNOP) ;  
        TM1640SLK_HING;  
        Nop1640(VT_DLY1640) ;  
        TM1640DAT_HING;  
        Nop1640(VT_DLY1640) ;  
        TM1640SLK_LOW;  
        Nop1640(VT_DLY1640) ;  
          
}  
//*************************************  
// 函數名稱:TM1640WriteByte  
// 函數功能:TM1640寫一字節數據  
// 入口參數:要寫的數據  
// 出口參數:無  
//***************************************/  
void TM1640WriteByte(u8 date)  
{  
        u8 i;  
        u8 Tmp;  
          
        Tmp=date;  
          
        TM1640DAT_LOW;  
        Nop1640(VT_DLYNOP) ;  
        TM1640SLK_LOW;  
          
        for(i=0;i<8;i++)  
        {  
                TM1640SLK_LOW;  
                Nop1640(VT_DLYNOP) ;  
                if(Tmp & 0x01)  
                {  
                        TM1640DAT_HING;  
                        Nop1640(VT_DLY1640) ;  
                }  
                else  
                {  
                        TM1640DAT_LOW;  
                        Nop1640(VT_DLY1640) ;  
                }  
                TM1640SLK_HING;  
                Tmp = Tmp>>1;  
        }  
          
        TM1640SLK_LOW;  
        Nop1640(VT_DLYNOP) ;  
        TM1640DAT_LOW;  
}  
//*************************************  
// 函數名稱:TM1640_Init  
// 函數功能:TM1640設備初始化  
// 入口參數:0 1 代表 顯示關 顯示開  
// 出口參數:無  
//***************************************/  
void TM1640_Init(u8 InValue)    
{  
        TM1640DAT_HING;  
        Nop1640(VT_DLYNOP) ;                 
        TM1640SLK_HING;  
          
        if(InValue == DSP1640_DIS) //顯示關  
        {  
                TM1640Start();//數據寫模式設置  
                TM1640WriteByte(SET_DSP1640_DIS);//顯示關控制   
                TM1640Stop();         
        }  
        else  
        {  
                TM1640Start();//數據寫模式設置  
                TM1640WriteByte(SET_DATA_ORDER);//數據命令設置 地址自動加1  
                TM1640Stop();  
                  
                TM1640Start(); //顯示亮度設置  
                TM1640WriteByte(SET_DISPLAY); //顯示命令控制  脈沖寬度14/16       
                TM1640Stop();  
        }  
}  
//*************************************  
// 函數名稱:TM1640_SendData  
// 函數功能:發送顯示緩存  
// 入口參數:1640要寫數據的起始地址  
//           顯示數據緩存的起始地址 數據長度  
// 出口參數:無  
//***************************************/  
void TM1640_SendData(u8 Addr1640,u8 *a,u8 DataLong)  
{  
        u8 i;    
          
        TM1640Start();  
        TM1640WriteByte(Addr1640); //設置起始地址  
          
        for(i=0;i<DataLong;i++)  
        {  
                TM1640WriteByte(a[i]);   
        }  
          
        TM1640Stop();   
}
————————————————
版權聲明:本文為CSDN博主「cxw312864660」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cxw312864660/article/details/89374994

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM