热度 21
2013-12-24 14:58
2904 次阅读|
0 个评论
//使用STM32F103作为MCU,74HC595驱动8段数码管的程序 #define HC595_OE_H() GPIO_SetBits(GPIOB, GPIO_Pin_12) #define HC595_OE_L() GPIO_ResetBits(GPIOB, GPIO_Pin_12) #define HC595_RCK_H() GPIO_SetBits(GPIOB, GPIO_Pin_13) #define HC595_RCK_L() GPIO_ResetBits(GPIOB, GPIO_Pin_13) #define HC595_SCK_H() GPIO_SetBits(GPIOB, GPIO_Pin_14) #define HC595_SCK_L() GPIO_ResetBits(GPIOB, GPIO_Pin_14) #define HC595_DAT_H() GPIO_SetBits(GPIOB, GPIO_Pin_15) #define HC595_DAT_L() GPIO_ResetBits(GPIOB, GPIO_Pin_15) void HC595_init(void) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); HC595_start(); } void HC595_start(void) { HC595_OE_L(); } void HC595_stop(void) { HC595_OE_H(); } void HC595_shift_byte(uint8_t byte) { uint8_t i = 0; for (i = 0; i 8; i++) { if (byte 0x80) HC595_DAT_L(); else HC595_DAT_H(); HC595_SCK_L(); HC595_SCK_H(); byte = byte 1; } HC595_RCK_L(); HC595_RCK_H(); } //每执行HC595_shift_byte一次,串联起来的8段数码管就会将自己的显示往左边推移一位; //HC595_shift_byte的入口参数byte的二进制,刚好对应8段数码管的段位; //是不是很森破呢~