YS13-3熒光管時鐘設計

漁澤發表於2020-12-26

前幾日,女朋友生日,問她想要啥禮物時,她提到說想要那種輝光管的自制時鐘,然後上網一查,發現輝光管驅動電壓挺高,而且管子還貴,於是摺合了一下,用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

相關文章