加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

嵌入式外設(shè)-數(shù)碼管顯示小數(shù)與整數(shù)(74HC595)驅(qū)動(dòng)代碼編寫

06/11 09:48
6983
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
    • 一、前言
    • 二、資料獲取
    • ?三、設(shè)備使用
    • 四、代碼編寫
    • ?五、參考
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

一、前言

### 數(shù)碼管
數(shù)碼管(Digital Display)是一種用來顯示數(shù)字和一些字符的電子元件。它通常由多個(gè)發(fā)光二極管(LED)組成,這些LED排列成一定的形狀,例如圓形、棒狀或條狀,通過不同的排列組合來表示不同的數(shù)字和符號(hào)。根據(jù)LED的排列方式,數(shù)碼管可以分為一位數(shù)碼管、兩位數(shù)碼管、四位數(shù)碼管等。

### 74HC595
74HC595是一款8位串行輸入、并行輸出的移位寄存器芯片。它內(nèi)部包含8個(gè)串入、串/并出移位寄存器和8位三態(tài)輸出鎖存器。其主要引腳包括:

- SER:串行數(shù)據(jù)輸入端
- SRCLK:移位寄存器時(shí)鐘輸入端
- RCLK:輸出寄存器時(shí)鐘輸入端
- OE:輸出使能控制端
- Q0~Q7:8位并行輸出端

74HC595的工作原理是:在SRCLK的上升沿時(shí),串行輸入數(shù)據(jù)(SER)移入寄存器;在RCLK的上升沿時(shí),寄存器的數(shù)據(jù)置入鎖存器。通過控制SER、SRCLK、RCLK三個(gè)引腳,可以實(shí)現(xiàn)對(duì)數(shù)碼管的控制。

### 74HC595數(shù)碼管驅(qū)動(dòng)電路
在使用74HC595驅(qū)動(dòng)數(shù)碼管時(shí),通常需要將數(shù)碼管的各個(gè)段(Segment)連接到74HC595的并行輸出端(Q0~Q7),同時(shí)將數(shù)碼管的位選(Common)引腳連接到74HC595的某個(gè)輸出端,用于控制數(shù)碼管的顯示。

二、資料獲取

關(guān)注微信公眾號(hào)--星之援工作室 發(fā)送關(guān)鍵字(74HC595

網(wǎng)上資料很多,但是大部分都不是特別全面,我這里是在他們的基礎(chǔ)上優(yōu)化和改進(jìn)了一下
可以判斷多位顯示以及小數(shù)點(diǎn)顯示等

????

?三、設(shè)備使用

接線

接線方式如下,可根據(jù)個(gè)人喜好進(jìn)行引腳的切換

?演示

這里我采用的兩位數(shù)碼管進(jìn)行顯示

這是沒有小數(shù)點(diǎn)的顯示 效果

這是顯示小數(shù)點(diǎn)的顯示 效果,小數(shù)點(diǎn)我設(shè)置在第二位的

四、代碼編寫

main.c

主程序可更改顯示的數(shù)據(jù)


/*接線 
VCC------------>供電
DIO------------>PB9
SCLK------------>PB8 
LOAD------------>PB7 
GND------------>接地

可自動(dòng)判斷顯示的位數(shù) 
可設(shè)置小數(shù)點(diǎn)顯示的位置,也可以不顯示
*/
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "HC595.h"

int main(void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
	// LED 端口初始化 
	LED_GPIO_Config();
	// 串口初始化
	uart_init(115200);
	//數(shù)碼管初始化
	HC595_Init();
	printf("init okn");
	
	while ( 1 )
	{
		HC595_Send_Data(0,66);
	}
}

HC595.h

可更改配置的IO口

#ifndef __HC595_H
#define	__HC595_H
#include "stm32f10x.h"

/* 定義IIC連接的GPIO端口, 用戶只需要修改下面的代碼即可改變控制的LED引腳 */
#define HC595_DIO_GPIO_PORT    	GPIOB			              /* GPIO端口 */
#define HC595_DIO_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口時(shí)鐘 */
#define HC595_DIO_GPIO_PIN		    GPIO_Pin_9

#define HC595_CLK_GPIO_PORT    	GPIOB		                /* GPIO端口 */
#define HC595_CLK_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口時(shí)鐘 */
#define HC595_CLK_GPIO_PIN			  GPIO_Pin_8

#define HC595_LOA_GPIO_PORT    	GPIOB			              /* GPIO端口 */
#define HC595_LOA_GPIO_CLK 	    RCC_APB2Periph_GPIOB		/* GPIO端口時(shí)鐘 */
#define HC595_LOA_GPIO_PIN		    GPIO_Pin_7

#define HC595_DIO_OUT PBout(9)
#define HC595_SCK_OUT PBout(8)
#define HC595_LOA_OUT PBout(7)

// 端口初始化
void HC595_Init( void );
// 串入
void HC595_Send_Byte(unsigned char byte);
// 并出 
// X 表示小數(shù)點(diǎn)顯示的位置 Y表示顯示的數(shù)據(jù)
void HC595_Send_Data( u8 x, u16 y);

#endif /* __HC595_H */

HC595.c

#include "HC595.h"
#include "delay.h"
 
unsigned char  LED_table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0x00};//0 1 2 3 4 5 6 7 8 9 A B C D F  //  共陽數(shù)碼管

//端口初始化
void HC595_Init( void )
{
 
	GPIO_InitTypeDef  GPIO_InitStructure;

	RCC_APB2PeriphClockCmd( HC595_CLK_GPIO_CLK | HC595_DIO_GPIO_CLK | HC595_LOA_GPIO_CLK, ENABLE );

	GPIO_InitStructure.GPIO_Pin = HC595_CLK_GPIO_PIN | HC595_DIO_GPIO_PIN|HC595_LOA_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( HC595_CLK_GPIO_PORT, &GPIO_InitStructure );
	
	HC595_DIO_OUT = 0;
	HC595_SCK_OUT = 0;
	HC595_LOA_OUT = 0;
}
//串入
void HC595_Send_Byte(unsigned char byte)
{
	uint8_t i;
	for(i=0;i<8;i++)  
	{
		HC595_SCK_OUT = 0;
		delay_ms(10);
		if(0x80&byte)
			HC595_DIO_OUT = 1;
		else
			HC595_DIO_OUT = 0;
		byte = byte <<1 ;
		delay_ms(10);
		HC595_SCK_OUT =1;
		delay_ms(10);
	}
	HC595_DIO_OUT = 0;
	HC595_SCK_OUT = 0;	

}
// 并出 
// X 表示小數(shù)點(diǎn)顯示的位置 Y表示顯示的數(shù)據(jù)
void HC595_Send_Data(u8 x, u16 y)
{
	static unsigned int thousand_bit, hundred_bit, ten_bit, single_bit;
	
	thousand_bit = y / 1000;
	hundred_bit = (y % 1000) / 100;
	ten_bit =y % 1000 % 100 / 10;
	single_bit = y % 10;
	// 自動(dòng)反饋位數(shù) , 選擇小數(shù)點(diǎn)

	switch(x){
		case 0: {
			if(y>9){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
			}else if(y>99){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]);
			}else if(y>999){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]);
				HC595_Send_Byte(LED_table[thousand_bit]);
			}else{
				HC595_Send_Byte(LED_table[single_bit]);
			}
		}break;
		case 1: {
			if(y>9){
				HC595_Send_Byte(LED_table[single_bit]+0x80);
				HC595_Send_Byte(LED_table[ten_bit]);
			}else if(y>99){
				HC595_Send_Byte(LED_table[single_bit]+0x80);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]);
			}else if(y>999){
				HC595_Send_Byte(LED_table[single_bit]+0x80);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]);
				HC595_Send_Byte(LED_table[thousand_bit]);
			}else{
				HC595_Send_Byte(LED_table[single_bit]+0x80);
			}
		}break;
		case 2: {
			if(y>9){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]+0x80);
			}else if(y>99){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]+0x80);
				HC595_Send_Byte(LED_table[hundred_bit]);
			}else if(y>999){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]+0x80);
				HC595_Send_Byte(LED_table[hundred_bit]);
				HC595_Send_Byte(LED_table[thousand_bit]);
			}else{
				HC595_Send_Byte(LED_table[single_bit]);
			}
		}break;
		case 3: {
			if(y>9){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
			}else if(y>99){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]+0x80);
			}else if(y>999){
				HC595_Send_Byte(LED_table[single_bit]);
				HC595_Send_Byte(LED_table[ten_bit]);
				HC595_Send_Byte(LED_table[hundred_bit]+0x80);
				HC595_Send_Byte(LED_table[thousand_bit]);
			}else{
				HC595_Send_Byte(LED_table[single_bit]);
			}
		}
	}
	HC595_LOA_OUT = 1;
	delay_ms(10);
	HC595_LOA_OUT = 0;
}




?五、參考

STM32學(xué)習(xí)記錄——74HC595四位數(shù)碼管顯示icon-default.png?t=N7T8https://blog.csdn.net/stm_white/article/details/116039956?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171651582716800211575717%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171651582716800211575717&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-116039956-null-null.142%5Ev100%5Epc_search_result_base7&utm_term=stm332%2074hc595%E6%95%B0%E7%A0%81%E7%AE%A1%E6%98%BE%E7%A4%BA&spm=1018.2226.3001.4187

【STM32學(xué)習(xí)】(14)兩個(gè)74HC595控制四個(gè)數(shù)碼管顯示icon-default.png?t=N7T8https://blog.csdn.net/XiaoCaiDaYong/article/details/105584177?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171651960616800211557784%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171651960616800211557784&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-7-105584177-null-null.nonecase&utm_term=stm332%2074hc595%E6%95%B0%E7%A0%81%E7%AE%A1%E6%98%BE%E7%A4%BA&spm=1018.2226.3001.4450


聯(lián)系方式 微信號(hào):13648103287

  • 聯(lián)系方式.docx

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
MCP23017-E/SS 1 Microchip Technology Inc 16 I/O, PIA-GENERAL PURPOSE, PDSO28, 5.30 MM, PLASTIC, SSOP-28

ECAD模型

下載ECAD模型
$1.69 查看
FT232RQ-TRAY 1 FTDI Chip USB Bus Controller, CMOS, 5 X 5 MM, GREEN, QFN-32

ECAD模型

下載ECAD模型
$4.5 查看
MKL25Z128VLH4 1 Freescale Semiconductor RISC MICROCONTROLLER

ECAD模型

下載ECAD模型
$6.94 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

方案定制,程序設(shè)計(jì)方案、單片機(jī)程序設(shè)計(jì)與講解、APP定制開發(fā)。本公眾號(hào)致力于向讀者傳遞關(guān)于程序設(shè)計(jì)和開發(fā)的相關(guān)知識(shí),并分享一些關(guān)于軟件開發(fā)的最佳實(shí)踐。如果您有什么問題或建議,請(qǐng)隨時(shí)聯(lián)系我們。我們將竭誠為您服務(wù)