《嵌入式技术及应用(STM32CubeMX版) 代码 Task11HC595_LED.c.docx》由会员分享,可在线阅读,更多相关《嵌入式技术及应用(STM32CubeMX版) 代码 Task11HC595_LED.c.docx(3页珍藏版)》请在第一文库网上搜索。
1、123456789101112131415161718/*文件名:HC595_1ED.c功能:用HC595扩展8位数码扫描显示程序# */inc1udemain.h/*端口定义# */# defineSDI_GPIO_PortGPIOA数据线SDI所在端口# defineSCP_GPIO_PortGPIOA时钟线SCP所在端口# define1CP_GPIO_PortGPIOA锁存线1CP所在端口# defineSDI_PinGPIO_PIN_1数据线SDI所在引脚# defineSCP_PinGPIO_PIN_4时钟线SCP所在弓I脚# define1CP_PinGPIO_PIN_5锁存线1
2、CP所在引脚端口操作定义#defineHC595_SDI_SET()HA1_GPI0_WritePin(SD1GPIC1POrt,SDI_Pin,GPI0_P1N_SET)数据线置119#defineHC595_SDI_C1R()HA1_GPIO_WritePin(SD1GPIC1POrt,SDI_Pin,GPI0_P1N_RESET)数据线清02021#defineHC595_SCP_SET()HA1_GPIO_WritePin(SCP_GPIO_Port,SCP_Pin,GP1O_PIN_SET)时钟线置122#defineHC595_SCP_C1R()HA1_GPIO_WritePin(
3、SCP_GPIO_Port,SCP_Pin,GP1O_PIN_RESET)/时钟线)肖02324#defineHC595_1CP_SET()HA1_GPIO_WritePin(1CP_GPIO_Port,1CP_Pin,GP1O_PIN_SET)锁存线置125#defineHC595_1CP_C1R()HA1_GPIO_WritePin(1CP_GPIO_Port,1CP_Pin,GPIe1PIN_RESET)锁存线清02627constuint8_tComTab=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;共阳极数码管位选码2829constuint8_t
4、SegTab=OXCO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90;/*共阳极数码管显示笔型码*/30313233343536/*voidWriteHc595(uint8_tdat)功能:向HC595写入一个字节的数据参数:dat:待写入的字节数据返回值:无*/3738394041424344454647484950515253545556575859606162636465666768697071727374757677787980voidWriteHc595(uint8_tdat)uint8_tij;for(i=0;i8;i+)if(dat&0
5、x80)/高位为1,发送1HC595_SDI_SET();)e1se/高位为0,发送0HC595_SDI_C1R();产生时钟上升沿,数据写入移位寄存器延时,对应时钟高电平期产生时钟下降沿左移位,准备发送下一位数)HC595_SCP_SET();for(j=0;j30;j+);HC595_SCP_C1R();dat=1;/*木*voidDisDat(uint8_tdatzuint8-tn)功能:控制某位数码管显示1个数参数:dat:待显示的数n:所控制的数码管的编号返回值:无*/显示数据函数DisDat()uint8_ti;WriteHc595(ComTabn);WriteHc595(SegT
6、abdat);HC595_1CP_SET();for(i=0;i30;i+);HC595_1CP_C1R();voidDisDat(uint8_tdatjuint8-tn)发送位选数据发送段选数据产生锁存时钟上升沿,2片595输出延时,对应时钟高电平期产生锁存时钟下降沿时钟复位*voidDisp1ay(uint8_tqw,uint8_tbw,uint8_tswzuint8-tgw)功能:控制4位数码管扫描显示参数:qw:所要显示的千位数bw:所要显示的百位数sw:所要显示的十位数gw:所要显示的个位数返回值:无*木*voidDisp1ay(uint8_tqw,uint8_tbw,uint8_tsw,uint8_tgw)(staticuint8_twcnt=0;switch(wcnt)(case0:DisDat(qwzO);break;DisDat(bwz1);break;DisDat(swz2);break;DisDat(gwz3);break;)went+;81828384858687888990919293949596979899100101102103104went%=4;