在线时间1258 小时
UID3174487
注册时间2015-10-31
NXP金币2015
TA的每日心情 | 开心 2025-5-29 08:54 |
---|
签到天数: 2992 天 连续签到: 8 天 [LV.Master]伴坛终老
金牌会员
 
- 积分
- 12035
- 最后登录
- 2025-5-29
|
本帖最后由 limale 于 2017-4-1 16:12 编辑
今天事儿不是很多,我们来继续搞搞LPC54114这块板卡,在熟悉了官方的demo程序之后,把暂时用不到的功能进行了屏蔽,只留下了串口和GPIO口的驱动。刚好前几天朋友送了两块他做的4位数码管使用HC595驱动的,这个数码管真是非常的大准备后续做个时钟。
每位是单独用一片HC595驱动然后级联起来用的。
使用3个GPIO口就可以驱动了(DS、RCK、SCK),时序也非常的简单。
- void HC595Init(void)
- {
- GPIO->DIR[0] = 1U << HC595_DS | 1U << HC595_RCK | 1U << HC595_SCK | 1U << 22;
- GPIO->B[0][HC595_DS] = 0;
- GPIO->B[0][HC595_RCK] = 0;
- GPIO->B[0][HC595_SCK] = 0;
- IOCON_PinMuxSet(IOCON, 0, HC595_DS, LED_GPIO_CFG);
- IOCON_PinMuxSet(IOCON, 0, HC595_RCK, LED_GPIO_CFG);
- IOCON_PinMuxSet(IOCON, 0, HC595_SCK, LED_GPIO_CFG);
- }
- void HC595SendData_four(uint8_t data1, uint8_t data2, uint8_t data3, uint8_t data4 )
- {
- uint8_t i, j, k, l, temp0, temp1, temp2, temp3;
- temp0 = data1;
- temp1 = data2;
- temp2 = data3;
- temp3 = data4;
- for (i = 0; i < 8; i++)
- {
- if (temp0 & 0x80)
- {
- HC595_DS_SET;
- }
- else
- {
- HC595_DS_RESET;
- }
- temp0 <<= 1;
- HC595_SH_CP_SET;
- HC595_SH_CP_RESET;
- }
- for (j = 0; j < 8; j++)
- {
- if (temp1 & 0x80)
- {
- HC595_DS_SET;
- }
- else
- {
- HC595_DS_RESET;
- }
- temp1 <<= 1;
- HC595_SH_CP_SET;
- HC595_SH_CP_RESET;
- }
- for (k = 0; k < 8; k++)
- {
- if (temp2 & 0x80)
- {
- HC595_DS_SET;
- }
- else
- {
- HC595_DS_RESET;
- }
- temp2 <<= 1;
- HC595_SH_CP_SET;
- HC595_SH_CP_RESET;
- }
- for (l = 0; l < 8; l++)
- {
- if (temp3 & 0x80)
- {
- HC595_DS_SET;
- }
- else
- {
- HC595_DS_RESET;
- }
- temp3 <<= 1;
- HC595_SH_CP_SET;
- HC595_SH_CP_RESET;
- }
- HC595_ST_CP_SET;
- HC595_ST_CP_RESET;
- }
复制代码
开机显示CDEF,然后从0000开始累加,因为只是一个demo所以就没做复杂的显示。
用HC595驱动数码管显示效果确实挺好的,一点儿闪烁感都没有。
工程:
lpc54114.rar
(8.72 MB, 下载次数: 109)
|
|