YS13-3荧光管时钟设计

前几日,女朋友生日,问她想要啥礼物时,她提到说想要那种辉光管的自制时钟,然后上网一查,发现辉光管驱动电压挺高,而且管子还贵,于是折合了一下,用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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章