<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于STM32的多功能數(shù)字鐘(中文版)

          基于STM32的多功能數(shù)字鐘(中文版)

          作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          /**************************************************************************************
          程序功能:基于STM32的多功能數(shù)字鐘(中文版)
          **************************************************************************************
          1、時(shí)鐘的基準(zhǔn)用STM32F103RCT6自帶的RTC實(shí)現(xiàn)。
          2、這三個(gè)按鍵的功能分別為:"設(shè)置"、"加"、"減"。(WAKEUP KEY0 KEY1)
          三個(gè)按鍵作為這三個(gè)功能:
          鍵盤上的WAKEUP用作"設(shè)置",KEY0用作"加",KEY1用作"減"。
          設(shè)定時(shí)間、日期、星期時(shí),按下設(shè)定鍵,
          相應(yīng)的參數(shù)會(huì)閃動(dòng),即一亮一滅,提示正的修改的數(shù)據(jù),每按一下設(shè)置鍵,
          設(shè)定的項(xiàng)目就會(huì)變化,順序?yàn)椋?/div>
          秒--分--時(shí)--星期--日--月--年--鬧鈴分--鬧鈴時(shí)。
          順序設(shè)定完后,再按一下設(shè)定鍵,就退出設(shè)定狀態(tài),回到正顯示狀態(tài)。
          3、用DS18B20顯示溫度。精確到小數(shù)點(diǎn)后一位。如:33.5℃。
          4、增加用紅外遙控器的CH CH+ CH- 三個(gè)按鍵進(jìn)行時(shí)間設(shè)置,
          功能等同于鍵盤上的(WAKEUP KEY0 KEY1)"設(shè)置"、"加"、"減"。
          5、通過串行口設(shè)置時(shí)間日期。
          如串行口發(fā)送t12:30:00 設(shè)置時(shí)間;
          如串行口發(fā)送d2016-08-12 設(shè)置日期;
          6、通過觸摸屏進(jìn)行時(shí)間日期設(shè)置
          在觸摸屏上有 "設(shè)置"、"加"、"減"三個(gè)標(biāo)志,當(dāng)用觸筆去按時(shí),就會(huì)產(chǎn)生同開發(fā)板上的
          按鍵一樣的效果。
          觸摸按下去和彈起來時(shí),按鍵的顏色會(huì)發(fā)生變化。
          7、鬧鈴時(shí)間到,蜂鳴器發(fā)生“嘀嘀”聲
          8、超溫報(bào)警
          TFT屏界面如下:
          -----------------------------------------
          | --多功能數(shù)字鐘-- |
          | 作者:王廬山 16/08/18 |
          | 日期:2016年08月18日 |
          | 時(shí)間:17時(shí)12分 |
          | 星期:四 |
          | 溫度:34.5℃ |
          | ___ __ __ |
          | |設(shè)置| |加 | |減 | |
          | ---- --- --- |
          ------------------------------------------
          9、需要完速程序的朋友請QQ我。
          **************************************************************************************
          硬件:LED0----GPIOA.8 (LED運(yùn)行燈)
          KEY0----GPIOC.5 (對時(shí)間日期進(jìn)行設(shè)置)
          KEY1----GPIOA.15
          KEY_WAKEUP----GPIOA.0
          TIMER2定時(shí)器定時(shí)功能。(用于LED運(yùn)行燈)
          TIMER5定時(shí)器的定時(shí)和捕獲功能(紅外解析)
          TFT液晶屏2。8寸屏帶觸摸功能。(顯示界面與觸摸功能)
          TOUCH觸摸屏。 (觸摸按鍵
          DS18B20---PC4; (環(huán)境溫度)
          HS138紅外遙控---PA1;(實(shí)現(xiàn)紅外調(diào)時(shí))
          串行口USART1; (實(shí)現(xiàn)串口調(diào)時(shí)調(diào)時(shí))
          RTC實(shí)時(shí)時(shí)鐘 (時(shí)間基準(zhǔn))
          SD卡 (存放字庫,文件系統(tǒng)使用)
          EEPROM 24C02 (存放觸摸屏的相關(guān)信息)
          FLASH W25Q64 (存放字庫的相關(guān)信息及文件系統(tǒng)使用)
          軟件:FATFS(文件系統(tǒng))
          MALLOC(存儲(chǔ)管理)
          漢字字庫
          SPI總線協(xié)議
          IIC總線協(xié)議
          開發(fā)板:正點(diǎn)原子MINI開發(fā)板
          **************************************************************************************
          編程目的:讓大賽學(xué)生盡快學(xué)會(huì)STM32的綜合編程。
          本程序用到了STM32眾多的硬件資源,還用到了存儲(chǔ)管理和FATFS,
          只要學(xué)會(huì)了該程序的編程,可以這樣說,你的STM32已經(jīng)入門了。
          **************************************************************************************
          編程軟件:KEIL5
          **************************************************************************************
          常用的算法:
          按鍵采用狀態(tài)機(jī)實(shí)現(xiàn)按鍵掃描。在定時(shí)器中對按鍵進(jìn)行處理。
          紅外部分采用定時(shí)器捕獲功能實(shí)現(xiàn)。
          時(shí)間用STM32自帶的RTC實(shí)現(xiàn);
          **************************************************************************************
          時(shí)間:2016.8.18
          作者:王廬山
          工作室:湖北工業(yè)職業(yè)技術(shù)學(xué)院電子創(chuàng)新中心
          ***************************************************************************************/
          #include "stm32f10x_conf.h"
          #include "delay.h"
          #include "sys.h"
          #include "LED.h"
          #include "key.h"
          #include "timer2.h"
          #include "24cxx.h"
          #include "lcd.h"
          #include "touch.h"
          #include "usart.h"
          #include "rtc.h"
          #include "ds18b20.h"
          #include "remote.h"
          #include "malloc.h"
          #include "flash.h"
          #include "spi.h"
          #include "mmc_sd.h"
          #include "exfuns.h"
          #include "fattester.h"
          #include "ff.h"
          #include "fontupd.h"
          #include "diskio.h"
          #include "text.h"
          //時(shí)間結(jié)構(gòu)體
          typedef struct
          {
          vu8 s_hour;
          vu8 s_min;
          vu8 s_sec;
          //公歷日月年周
          vu16 s_year;
          vu8 s_month;
          vu8 s_date;
          vu8 s_week;
          vu8 s_al_min;
          vu8 s_al_sec;
          }Timer;
          Timer S_timer;
          unsigned char flag_20ms=0x0,flag_500ms=0,flag_250ms=0,flag_1s=0;//定時(shí)標(biāo)志
          unsigned char flag_key0=0,flag_key1=0,flag_key2=0,flag_tiao=0,key_remot=0;
          void Disp_Tiao_Shan(void);
          void Load_Drow_Dialog(void);
          int main(void)
          {
          unsigned char temp[12],sec_back=0xff,t=0,len=0;
          short temp5;
          delay_init();
          NVIC_Configuration();
          uart_init(9600);
          Led_Init();
          key_init();
          Timer2_config(71,2000); //定時(shí)兩毫秒
          mem_init();
          SPI_Flash_Init();
          SD_Initialize();
          exfuns_init();
          DS18B20_Init();
          Remote_Init();
          AT24CXX_Init();
          RTC_Init();
          LCD_Init();
          LCD_Clear(BLUE);
          TP_Init();
          POINT_COLOR=RED;
          BACK_COLOR=BLUE;
          if(!font_init())
          printf("字庫OK!、rn");
          else
          {
          if(!update_font(10,30,16))
          printf("字庫更新完畢!、rn");
          }
          Show_Str(10,30,220,24,"--多功能數(shù)字鐘--",24,0);
          Show_Str(30,70,230,24,"作者:王廬山 16/08/18",16,0);
          Show_Str(10,100,220,24,"日期: 年 月 日",24,0);
          Show_Str(10,140,220,24,"時(shí)間: 時(shí) 分 秒 ",24,0);
          Show_Str(55,260,150,24,"設(shè)置 加 減",24,0);
          calendar.al_hour=AT24CXX_ReadOneByte(0x0000);//從24C02中讀出鬧鈴時(shí)間
          calendar.al_min=AT24CXX_ReadOneByte(0x0001);
          // POINT_COLOR=YELLOW ;
          LCD_DrawRectangle(50,250,100,290);
          LCD_DrawRectangle(110,250,160,290);
          LCD_DrawRectangle(170,250,220,290);
          f_mount(fs[0],"0:",1);
          f_mount(fs[1],"1:",1);
          while(1)
          {
          if(tp_dev.sta&TP_PRES_DOWN)//有觸摸按下狀態(tài)。
          {//按下時(shí),方框的顏色要發(fā)生變化,這樣看效果才明顯示,
          //手松開后,又要恢復(fù)原畫的顏色。
          if((tp_dev.x[0]>50)&&(tp_dev.x[0]<100)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
          {LCD_Fill(51,251,99,289,YELLOW);Show_Str(55,260,48,24,"設(shè)置",24,0);}
          else if((tp_dev.x[0]>110)&&(tp_dev.x[0]<160)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
          {LCD_Fill(111,251,159,289,YELLOW);Show_Str(120,260,48,24,"加",24,0);}
          else if((tp_dev.x[0]>170)&&(tp_dev.x[0]<220)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))
          {LCD_Fill(171,251,219,289,YELLOW);Show_Str(180,260,48,24,"減",24,0);}
          }
          if((USART_RX_STA&0x8000))//收到了一幀串行口數(shù)據(jù),進(jìn)行解析。
          {
          switch(USART_RX_BUF[0])
          {
          case t:{//time是調(diào)時(shí)間
          S_timer.s_hour=(USART_RX_BUF[1]-0)*10+(USART_RX_BUF[2]-0);
          S_timer.s_min=(USART_RX_BUF[3]-0)*10+(USART_RX_BUF[4]-0);
          S_timer.s_sec=(USART_RX_BUF[5]-0)*10+(USART_RX_BUF[6]-0);
          USART_RX_STA=0;
          printf("set time:%s",USART_RX_BUF);
          calendar.sec=S_timer.s_sec;
          calendar.hour=S_timer.s_hour;
          calendar.min=S_timer.s_min;
          calendar.w_date=S_timer.s_date;
          calendar.w_month=S_timer.s_month;
          calendar.w_year=S_timer.s_year;
          calendar.week=S_timer.s_week;
          RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);
          break;
          }
          case d:{//date是調(diào)日期
          S_timer.s_year =(USART_RX_BUF[1]-0)*1000+(USART_RX_BUF[2]-0)*100+(USART_RX_BUF[3]-0)*10+(USART_RX_BUF[4]-0);
          S_timer.s_month=(USART_RX_BUF[5]-0)*10+(USART_RX_BUF[6]-0);
          S_timer.s_date=(USART_RX_BUF[7]-0)*10+(USART_RX_BUF[8]-0);
          USART_RX_STA=0;
          printf("set date:%s",USART_RX_BUF);
          calendar.sec=S_timer.s_sec;
          calendar.hour=S_timer.s_hour;
          calendar.min=S_timer.s_min;
          calendar.w_date=S_timer.s_date;
          calendar.w_month=S_timer.s_month;
          calendar.w_year=S_timer.s_year;
          calendar.week=S_timer.s_week;
          RTC_Set(calendar.w_year,calendar.w_month,calendar.w_date,calendar.hour,calendar.min,calendar.sec);
          break;
          }
          default :break;
          }
          }
          if(flag_tiao!=0)//用于調(diào)節(jié)時(shí)閃爍顯示
          {
          switch(flag_tiao)
          {
          case 1: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*14,140,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 2: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*10,140,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 3: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*6,140,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 4: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*6,180,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 5: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*16,100,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 6: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*12,100,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 7: {
          if(flag_250ms==1)
          {
          LCD_ShowString(10+12*6,100,48,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 8: {
          if(flag_250ms==1)
          {
          LCD_ShowString(30+12*8,180,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          case 9: {
          if(flag_250ms==1)
          {
          LCD_ShowString(30+12*4,180,24,24,24," ");
          break;
          }
          else goto kk2;
          }
          kk2:
          {
          sprintf(temp,"日期:%04d年%02d月%02d日",calendar.w_year,calendar.w_month,calendar.w_date);
          Show_Str(10,100,220,24,temp,24,0);
          sprintf(temp,"時(shí)間:%02d時(shí)%02d分%02d秒 ",calendar.hour,calendar.min,calendar.sec);
          Show_Str(10,140,220,24,temp,24,0);
          if(flag_tiao<=7)
          {sprintf(temp,"星期:%01d",calendar.week);
          Show_Str(10,180,100,24,temp,24,0); }
          else
          {
          sprintf(temp,"鬧鈴:%02d時(shí)%02d分 ",calendar.al_hour,calendar.al_min);
          Show_Str(10,180,220,24,temp,24,0); }
          break;
          }
          default :break ;
          }
          }
          else//正常顯示
          {
          if(sec_back!=calendar.sec)
          {
          sprintf(temp,"日期:%04d年%02d月%02d日",calendar.w_year,calendar.w_month,calendar.w_date);
          Show_Str(10,100,220,24,temp,24,0);
          sprintf(temp,"時(shí)間:%02d時(shí)%02d分%02d秒 ",calendar.hour,calendar.min,calendar.sec);
          Show_Str(10,140,220,24,temp,24,0);
          sprintf(temp,"星期:%01d ",calendar.week);
          Show_Str(10,180,220,24,temp,24,0);
          }
          }
          keyfunction();//按鍵掃描和功能解析(包括了開發(fā)板上的按鍵、紅外遙控按鍵、觸摸按鍵)
          if(flag_1s ==1)//每秒讀取一次溫度
          {
          flag_1s =0;
          //LCD_ShowString(30+5*12,180,210,24,24," ");
          temp5=DS18B20_Get_Temp();
          sprintf(temp,"溫度:%02d.%01d℃",temp5/10,temp5%10);
          Show_Str(10,220,210,24,temp,24,0);
          }
          }
          }
          /*
          函數(shù)功能:顯示畫圖框
          */
          void Load_Drow_Dialog(void)
          {
          LCD_Clear(RED);//清屏
          POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
          LCD_ShowString(lcddev.width-30,0,200,24,24,"RST");//顯示清屏區(qū)域
          }


          關(guān)鍵詞: STM32數(shù)字鐘中文

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();