辉光钟!成品+代码

来源:互联网 发布:js计算运行时间 编辑:程序博客网 时间:2024/04/28 19:17

辉光钟
差不多做出来的成品效果,打样太贵(懒得画pcb)怎么办,直接洞洞板+杜邦线!,理一理线还是能看的。
既然是成品展示了,那就直接上代码咯
完整工程下载
部分代码:

  while (1)  {  /* USER CODE END WHILE */  /* USER CODE BEGIN 3 *///  USER_Reicieve();    HAL_Delay(10);    HAL_RTC_GetTime(&hrtc,&stime,RTC_FORMAT_BIN);    HAL_RTC_GetDate(&hrtc,&sdate,RTC_FORMAT_BIN);    if(sec_tmp != stime.Seconds)    {        PrintToNixie();        sec_tmp = stime.Seconds;        OLED_8x16Str(23,0,"20");        y1=(sdate.Year/10%10)+32+16;        y2=(sdate.Year%10)+32+16;        OLED_8x16Str(39,0,&y1);        OLED_8x16Str(47,0,&y2); //printf years to oled        OLED_8x16Str(46-4-8+20,0,"-");        m[0]=sdate.Month/16%16+32+16;        m[1]=sdate.Month%16+32+16;        OLED_8x16Str(62,0,&m[0]); //Êä³öÔÂ·Ý        OLED_8x16Str(78,0,"-");        d[0]=sdate.Date/10%10+32+16;        d[1]=sdate.Date%10+32+16;        OLED_8x16Str(88,0,&d[0]); //Êä³öÈÕÆÚ        h[0]=stime.Hours/10%10+32+16;        h[1]=stime.Hours%10+32+16;        OLED_8x16Str(15+16,5,&h[0]); //Êä³öʱ        OLED_8x16Str(46,5,":");        min[0]=stime.Minutes/10%10+32+16;        min[1]=stime.Minutes%10+32+16;        OLED_8x16Str(54,5,&min[0]); //Êä³ö·Ö        OLED_8x16Str(70,5,":");        s[0]=stime.Seconds/10%10+32+16;        s[1]=stime.Seconds%10+32+16;        OLED_8x16Str(78,5,&s[0]); //Êä³öÃë    }  }  /* USER CODE END 3 */
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len){  /* USER CODE BEGIN 6 */    unsigned int i;  USBD_CDC_SetRxBuffer(&hUsbDeviceFS,UserRxBufferFS);  USBD_CDC_ReceivePacket(&hUsbDeviceFS);    uint8_t Datebuffer[6];    uint8_t Timebuffer[4];    for(i=0;i<7;i++)    {        Datebuffer[i]=UserRxBufferFS[2+i]-48;        Timebuffer[i]=UserRxBufferFS[8+i]-48;    }    sdate.Year=Datebuffer[0]*10+Datebuffer[1];    sdate.Month=Datebuffer[2]*16+Datebuffer[3];    sdate.Date=Datebuffer[4]*10+Datebuffer[5];    stime.Hours=Timebuffer[0]*10+Timebuffer[1];    stime.Minutes=Timebuffer[2]*10+Timebuffer[3];    stime.Seconds=0;    HAL_RTC_SetDate(&hrtc,&sdate,RTC_FORMAT_BIN);    HAL_RTC_SetTime(&hrtc,&stime,RTC_FORMAT_BIN);//  CDC_Transmit_FS(Datebuffer,6);//  CDC_Transmit_FS(Timebuffer,6);  return (USBD_OK);  /* USER CODE END 6 */ 

emmmm,其实我的编程风格不是特别好,不值得学习,一直拖延最后赶工出来的工程,其实这工程上个操作系统就一下会变得简洁很多,主要的核心部分并不复杂,只是写辉光管显示的时候,很需要耐心,因为要手动吧二进制译成BCD码从IO口输出。
希望大家指教吧。

原创粉丝点击