前幾日,女朋友生日,問她想要啥禮物時,她提到說想要那種輝光管的自制時鐘,然后上網一查,發現輝光管驅動電壓挺高,而且管子還貴,于是折合了一下,用YS13-3熒光管代替輝光管來做時鐘,廢話不多說,下面介紹一下我的設計流程,
YS13-3
- 設計思路與元器件選擇
- 原理圖設計
- 程式設計
- 74HC595發送函式
- YS13-3顯示函式
- 效果展示
設計思路與元器件選擇
這里我采用的主控芯片是stm32f103C8T6,原因有幾個,首先開發較快,用過stm32cubemx的都知道,開發效率上比傳統標準庫要快,其次便宜,而且好焊接,再然后是如何點亮熒光管的問題了,當初查找資料可是費了不少功夫,最后簡單總接一下,YS13-3需要三個不同電壓,1.2V,24V與GND.總的來說,就是引腳1接地,引腳9接1.2V,引腳6接24V,這三個是不變的,剩下的引腳,那個接24V,其對應的管就會亮,那如何找到引腳1呢?方法就是正視管子,內部左下角連接出去的就是引腳1,然后從底部看,1引腳順時針尋下去就是2,3,4…等等,
然后就是驅動的芯片,這里我選擇了74HC595和ULN2003來驅動數碼管,此外為了有合適的電壓,采用了AMS1117降壓至3.3V與1.2V,然后用集成的XL6009升壓模塊升壓至24V,然后還外接了一個無線串口通訊模塊與PC機通訊,
原理圖設計
YS-13驅動電路


主控電路

升降壓電路
其他電路

程式設計
74HC595發送函式
void HC595_sendsata(uint8_t data) // (8bit)
{
uint8_t i;
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET); // SHCP=0
for(i=0;i<=7;i++)
{
if(data&0x01)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);//DS=1
}
else
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // DS=0
}
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15,GPIO_PIN_SET);//SHCP=1
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15,GPIO_PIN_RESET);//SHCP=0
data=data>>1;
}
}
YS13-3顯示函式
uint8_t time[4]={0,5,2,0};//存放每個輝光管要顯示的數字
uint8_t mabiao[10]={0xa0,0xbe,0x44,0x0c,0x1a,0x09,0x01,0x3c,0x00,0x08}; //碼表
void YS13_display() // YS13顯示4個數字
{
uint8_t i;
for(i=0;i<4;i++)
{
HC595_sendsata(mabiao[time[3-i]]);
}
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET); // STCP=1
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET); // STCP=0
}
}
74HC595主要通訊方式為當SHCP上升沿時,讀取DS口的資料,且移位鎖存,,但是此時Q0–Q7對外電平其實仍然是不變的,只有在STCP高電平時候,才會將內部移位暫存器的值一次性對外輸出,例如,連續8次SHCP上升沿時,DS都是1,但是你此時Q0–Q7輸出仍然是原來狀態,只有將STCP置1,Q0–Q7才會輸出1,
效果展示

最后附錄上程式和PCB檔案,希望對有些小伙伴有所幫助
鏈接:https://pan.baidu.com/s/1YUuVa5GkLel64a2aL8fPOw
提取碼:wczd
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241414.html
標籤:其他
下一篇:樹莓派4B 暫存器基地址查詢
