剛學STM32,原來粗略懂一些51,在網上買了很多模塊,現在想用STM32驅動起來。原來只有51的驅動DEMO,但在網上找了很多74HC595的驅動好像都不太好用,這次我就參考了他們的代碼。自己修改了一個。效果還不錯。因為經驗不足,有一些地方可以改進的,希望大家提出。以下是部份代碼
IMG_20180706_232632.jpg (3.62 MB, 下載次數: 50)
下載附件
2018-7-7 00:04 上傳
- /****************************************Copyright (c)**************************************************
- **
- ** 項目名稱: 74HC595驅動電路
- ** 文件名稱: 74HC595.c
- ** 模塊功能: 驅動程序
- **
- **------------------------------------------------------------------------------------------------------
- ** 創 建 者: 李*
- ** E-mail : lidezhong@163.com
- ** QQ : 13151999
- ** Mobile : 15870966330
- ** 創建時間: 2018-07-02
- ** 版 本: v1.0.0
- ** 描 述: 基礎程序
- **
- ********************************************************************************************************/
- #include "74HC595.h"
- //以下為74HC595_N376RIX2_DIP顯示位表
- //unsigned char wei[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
- //以下為優信2X8數碼管顯示位表
- unsigned char wei[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- /********************************************************************************************************
- ** 函數名稱: void HC595Init(void)
- ** 功能描述: 初始化74HC595
- ** 入口參數: void
- ** 創 建 者: 李德忠
- ** 創建時間: 2014-07-3 0:10
- ** 版 本: v1.0.0
- ********************************************************************************************************/
- void HC595Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(HC595_CLK_GPIO_CLK | HC595_DATA_GPIO_CLK | HC595_CS_GPIO_CLK, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = HC595_CLK_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(HC595_CLK_GPIO, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = HC595_DATA_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(HC595_DATA_GPIO, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = HC595_CS_PIN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(HC595_CS_GPIO, &GPIO_InitStructure);
-
- HC595_CLK_H();
- HC595_DATA_H();
- HC595_CS_H();
-
- }
- void HC595Send(u8 data)
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- HC595_CLK_L();
- if((data & 0x80)== 0x80)
- {
- HC595_DATA_H(); //串行數據輸出
- }
- else
- {
- HC595_DATA_L();
- }
- data<<=1;
- HC595_CLK_H(); //移位輸入時鐘,上升沿輸入
- HC595_CLK_L();
- }
- }
- /********************************************************************************************************
- ** 函數名稱: bit DispNum(uchar * N)
- ** 功能描述: 刷新優信74HC595 8X8顯示數字
- ** 入口參數: *N: 顯示的字符數組
- ** 出口參數: void
- ** 創 建 者: 李德忠
- ** 創建時間: 2018-07-05 22:38
- ** 版 本: v1.0.0
- ** -----------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- void DispNum(unsigned char * N)
- {
- unsigned char i,Nnow[8];
- for(i=0;i<8;i++)
- {
- switch(*(N+i))
- {
- //以下為74HC595_N376RIX2_DIP顯示碼表
- // case '0': Nnow[i] = 0x3F; break;
- // case '1': Nnow[i] = 0x06; break;
- // case '2': Nnow[i] = 0x5B; break;
- // case '3': Nnow[i] = 0x4F; break;
- // case '4': Nnow[i] = 0x66; break;
- // case '5': Nnow[i] = 0x6D; break;
- // case '6': Nnow[i] = 0x7D; break;
- // case '7': Nnow[i] = 0x07; break;
- // case '8': Nnow[i] = 0x7F; break;
- // case '9': Nnow[i] = 0x6F; break;
- // case 'a': Nnow[i] = 0x77; break;
- // case 'f': Nnow[i] = 0x71; break;
- // case 'c': Nnow[i] = 0x39; break;
- // case 'h': Nnow[i] = 0x76; break;
- // case '-': Nnow[i] = 0x40; break;
- // case ' ': Nnow[i] = 0x00; break;
- // default: Nnow[i] = 0xFF;
-
- //以下為優信8位數碼管顯示碼表
- case '0': Nnow[i] = 0xC0; break;
- case '1': Nnow[i] = 0xF9; break;
- case '2': Nnow[i] = 0xA4; break;
- case '3': Nnow[i] = 0xB0; break;
- case '4': Nnow[i] = 0x99; break;
- case '5': Nnow[i] = 0x92; break;
- case '6': Nnow[i] = 0x82; break;
- case '7': Nnow[i] = 0xF8; break;
- case '8': Nnow[i] = 0x80; break;
- case '9': Nnow[i] = 0x90; break;
- case 'a': Nnow[i] = 0x8C; break;
- case 'b': Nnow[i] = 0xBF; break;
- case 'c': Nnow[i] = 0xC6; break;
- case 'd': Nnow[i] = 0xA1; break;
- case 'e': Nnow[i] = 0x86; break;
- case 'f': Nnow[i] = 0xFF; break;
- case '-': Nnow[i] = 0xbf; break;
- case ' ': Nnow[i] = 0x00; break;
- default: Nnow[i] = 0xFF;
- }
- /*74HC595_N376RIX2_DIP驅動順序*/
- // HC595Send(0x00); //先傳段表
- // HC595Send(Nnow[i]);
- // HC595Send(wei[i]); //位表
-
- /*優信8位LED數碼管驅動順序*/
- HC595Send(wei[i]); //位表
- HC595Send(Nnow[i]);
- HC595_CS_L();
- HC595_CS_H();
- HC595_CS_L();
- }
-
- }
-
復制代碼
全部資料51hei下載地址:
ALIENTEK MINISTM32_74HC595.rar
(286.38 KB, 下載次數: 19)
2018-7-7 01:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|