標(biāo)題:
STM32 RTC時(shí)鐘秒表程序
[打印本頁(yè)]
作者:
某偶像練習(xí)生
時(shí)間:
2019-5-2 17:47
標(biāo)題:
STM32 RTC時(shí)鐘秒表程序
參考制作的秒表時(shí)鐘
單片機(jī)源程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "exti.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "usmart.h"
#include "rtc.h"
#include "timer.h"
#include "touch.h"
#include "myiic.h"
#include "24cxx.h"
#include "tsensor.h"
#include "adc.h"
u16 jia;
u16 jian;
u32 tiao=0;
u16 min;
u16 sec;
u16 msec;
u32 jishu;
u8 flag=1;
u32 dao;
u32 dao1;
u32 dao2;
u8 daoshi;
u16 daofen;
u16 daomiao;
u8 daoshi1;
u16 daofen1;
u16 daomiao1;
int main(void)
{
u8 t;
u16 adcx;
float temp;//溫度
float temperate;
NVIC_Configuration();
delay_init(); //延時(shí)函數(shù)初始化
uart_init(9600); //串口初始化為9600
LED_Init(); //初始化與LED連接的硬件接口
LCD_Init(); //初始化LCD
KEY_Init();
EXTIX_Init();
Adc_Init();
T_Adc_Init();
tp_dev.init();
TIM3_Int_Init(100,7199);//10Khz的計(jì)數(shù)頻率,計(jì)數(shù)到5000為500ms
usmart_dev.init(72); //初始化USMART
POINT_COLOR=RED;//設(shè)置字體為紅色
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
LCD_ShowString(60,130,200,16,16,"RTC ERROR! ");
delay_ms(800);
LCD_ShowString(60,130,200,16,16,"RTC Trying...");
}
//顯示時(shí)間
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
LCD_ShowString(60,130,200,16,16," - - ");
LCD_ShowString(60,162,200,16,16," : : ");
LCD_ShowNum(84,162,calendar.min,2,16);
LCD_ShowString(60,216,200,16,16,"change");
LCD_ShowString(60,260,200,16,16,"start");
LCD_ShowString(160,260,200,16,16,"end");
LCD_DrawRectangle(55,216,115,242);
LCD_DrawRectangle(55,260,105,276);
LCD_DrawRectangle(150,260,195,276);
LCD_ShowString(60,30,200,16,16,"TEMP_VAL:");
LCD_ShowString(60,50,200,16,16,"TEMP_VOL:0.000V");
LCD_ShowString(60,70,200,16,16,"TEMPERATE:00.00C");
dao1=dao;
while(1)
{
u32 now;
static u8 k=0;
static u8 c;
extern u32 temp2;//時(shí)間
//溫度顯示
adcx=T_Get_Adc_Average(ADC_CH_TEMP,10);
LCD_ShowxNum(132,30,adcx,4,16,0);//顯示ADC的值
temp=(float)adcx*(3.3/4096);
temperate=temp;//保存溫度傳感器的電壓值
adcx=temp;
LCD_ShowxNum(132,50,adcx,1,16,0); //顯示電壓值整數(shù)部分
temp-=(u8)temp; //減掉整數(shù)部分
LCD_ShowxNum(148,50,temp*1000,3,16,0X80); //顯示電壓小數(shù)部分
temperate=(1.43-temperate)/0.0043+25; //計(jì)算出當(dāng)前溫度值
LCD_ShowxNum(140,70,(u8)temperate,2,16,0); //顯示溫度整數(shù)部分
temperate-=(u8)temperate;
LCD_ShowxNum(164,70,temperate*100,2,16,0X80);//顯示溫度小數(shù)部分
//日期顯示
if(t!=calendar.sec)
{
t=calendar.sec;
LCD_ShowNum(60,130,calendar.w_year,4,16);
LCD_ShowNum(100,130,calendar.w_month,2,16);
LCD_ShowNum(124,130,calendar.w_date,2,16);
switch(calendar.week)
{
case 0:
LCD_ShowString(60,148,200,16,16,"Sunday ");
break;
case 1:
LCD_ShowString(60,148,200,16,16,"Monday ");
break;
case 2:
LCD_ShowString(60,148,200,16,16,"Tuesday ");
break;
case 3:
LCD_ShowString(60,148,200,16,16,"Wednesday");
break;
case 4:
LCD_ShowString(60,148,200,16,16,"Thursday ");
break;
case 5:
LCD_ShowString(60,148,200,16,16,"Friday ");
break;
case 6:
LCD_ShowString(60,148,200,16,16,"Saturday ");
break;
}
}
//秒表顯示
if (c==3)
{
LCD_ShowNum(60,162,min,2,16);
LCD_ShowNum(84,162,sec,2,16);
LCD_ShowNum(108,162,msec,2,16);
}
//倒計(jì)時(shí)顯示
if (c==4)
{
LCD_ShowNum(60,162,daoshi,2,16);
LCD_ShowNum(84,162,daofen,2,16);
LCD_ShowNum(108,162,daomiao,2,16);
daoshi=dao/3600;
daofen=dao/60%60;
daomiao=dao%60;
if (now>0)
{
dao2=(temp-now);
dao=dao1-dao2;
if (dao==0)
{
c=0;
LED0=!LED0;
LED1=!LED1;
}
}
}
if (c!=3&&c!=4)
{
LCD_ShowNum(60,162,calendar.hour,2,16);
LCD_ShowNum(84,162,calendar.min,2,16);
LCD_ShowNum(108,162,calendar.sec,2,16);
if (calendar.min==0&&calendar.sec==0)
{
LED0=!LED0;
LED1=!LED1;
}
}
delay_ms(10);
tp_dev.scan(0);
if(tp_dev.sta&TP_PRES_DOWN) //觸摸屏被按下
{
if((115>tp_dev.x[0]&&tp_dev.x[0]>55)&&(242>tp_dev.y[0]&&tp_dev.y[0]>216))
{
k=1+k;
LED0=!LED0;
if (k==5)
{
k=0;
}
switch(k )
{
case 0:
LCD_ShowString(60,188,260,16,16,"time ");
jia = 0;
jian = 0;
c=0;
break;
case 1:
LCD_ShowString(60,188,260,16,16,"min ");
jia = 60;
jian = 60;
break;
case 2:
LCD_ShowString(60,188,260,16,16,"hour ");
jia = 3600;
jian = 3600;
break;
case 3:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); //時(shí)鐘失能
LCD_ShowString(60,188,260,16,16,"count ");
jishu=0;
min=0;
sec=0;
msec=0;
jia = 0;
jian = 0;
c=3;
break;
case 4:
LCD_ShowString(60,188,260,16,16,"count down");
dao=0;
daoshi=0;
daofen=0;
daomiao=0;
c=4;
break;
}
}
if(c==3&&(105>tp_dev.x[0]&&tp_dev.x[0]>55)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260))
{
flag+=1;
LED0=!LED0;
}
if (flag>1)
{
flag=0;
}
if (flag==1)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); //時(shí)鐘失能
}
if (flag==0)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時(shí)鐘使能
}
if (c==4&&(105>tp_dev.x[0]&&tp_dev.x[0]>55)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260)&&(dao!=0))
{
LED0=!LED0;
now=temp2;
}
if(c!=3&&c!=4&&(105>tp_dev.x[0]&&tp_dev.x[0]>55)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260))
{
LED0=!LED0;
tiao+=jia;
}
if(c==3&&(195>tp_dev.x[0]&&tp_dev.x[0]>150)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260))
{
LED0=!LED0;
jishu=0;
min=0;
sec=0;
msec=0;
flag=1;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE); //時(shí)鐘失能
}
if (c==4&&(195>tp_dev.x[0]&&tp_dev.x[0]>150)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260))
{
LED0=!LED0;
dao=60+dao1;
dao1=dao;
}
if (c!=3&&c!=4&&(195>tp_dev.x[0]&&tp_dev.x[0]>150)&&(286>tp_dev.y[0]&&tp_dev.y[0]>260))
{
LED0=!LED0;
tiao-=jian;
}
delay_ms(100);
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
RTC時(shí)鐘秒表.7z
(280.75 KB, 下載次數(shù): 37)
2019-5-8 02:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
R.是桃子啊
時(shí)間:
2020-5-15 17:56
這個(gè)沒有電路圖嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1