⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timeplay.c

📁 STM32不完全手册 例程源码 29个
💻 C
字号:
#include "timeplay.h"
#include "gui.h"			   
#include "lcd.h"			 
#include "delay.h"
#include "text.h"
#include "touch.h"
#include "rtc.h" 
#include "ds18b20.h"
#include "adc.h"
#include "bigascii.h"  	  
#include "usart.h"	 
#include "led.h"	  
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//综合实验 驱动代码		 					    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2011/1/26
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//********************************************************************************
//V1.1 
//修改LCD_ShowBigChar为画点方式实现
//////////////////////////////////////////////////////////////////////////////////	 

	
//在指定位置显示一个大字符
//30*60大小的
//num:0~9
//:/./C这三个字符
void LCD_ShowBigChar(u8 x,u16 y,u8 num)
{
    u8 n,t;
	u8 temp;
	u8 t1,deadline;
	u16 colortemp=POINT_COLOR; 
	u8 x0=x;     
 	if(num==':')t1=150;
	else if(num=='.')t1=165;
	else if(num=='C')t1=180;
	else t1=15*num;
	deadline=t1+15;
 	for(;t1<deadline;t1++)
	{	 
		for(n=0;n<16;n++)
		{
			temp=BIG_ASCII[t1][n];
			for(t=0;t<8;t++)
			{
		        if(temp&0x80)POINT_COLOR=colortemp;
				else POINT_COLOR=BACK_COLOR;
				LCD_DrawPoint(x,y);	   
				temp<<=1;
				x++;
				if(((n%4)==3)&&t==5)
				{
					x=x0;
					y++;  
					break;
				}
			}
		}
	} 	  
	POINT_COLOR=colortemp;	    	   	 	  
}   
//显示一个数字
//x,y:起点坐标
//num:数值(0~9);
void LCD_ShowBigNum(u8 x,u16 y,u8 num)
{   
    LCD_ShowBigChar(x,y,(num/10)%10); 
    LCD_ShowBigChar(x+30,y,num%10);        							     
} 	


const u8 *week_table[7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
//根据当前的日期,更新日历表.
void Date_Refresh(void) 
{
 	u8 weekn;   //周寄存
	//从阳历,得到阴历日期	   	    
	POINT_COLOR=GREEN;		  					  
	//显示阳历年月日
	POINT_COLOR=BRED;  
	LCD_Show2Num(5,193,(timer.w_year/100)%100,2,16,0);//显示年  20/19  
	LCD_Show2Num(21,193,timer.w_year%100,2,16,0);     //显示年  
	LCD_ShowString(37,193,"-"); //"-"
	LCD_Show2Num(45,193,timer.w_month,2,16,0);        //显示月
	LCD_ShowString(61,193,"-"); //"-"
	LCD_Show2Num(69,193,timer.w_date,2,16,0);         //显示日	  
	//显示周几?
	POINT_COLOR=RED;
    weekn=RTC_Get_Week(timer.w_year,timer.w_month,timer.w_date);//得到星期	   
	Show_Str(21,218,(u8 *)week_table[weekn],16,0x01); //显示周几?	
													 
}
//时间显示模式
void Time_Viewer(void)
{
	u8 key;	    
	u8 second;
	short temperate=0;//温度值		   
	u8 t=0;
	u8 tempdate;
	u8 TEMP_SEN_TYPE=0;//默认使用DS18B20	  
	while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
	RTC->CRH|=0X01;  		  //允许秒中断
	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成   
	LCD_Clear(BLACK);//清黑屏    	  
	second=timer.sec;//得到此刻的秒钟
	POINT_COLOR=GBLUE;
	Show_Str(48,60,"正在加载,请稍候...",16,0x01); //显示进入信息	    
	if(DS18B20_Init())
	{
		Show_Str(48,76,"未检测到DS18B20!",16,0x01);  
		delay_ms(500);
		Show_Str(48,92,"启用内部温度传感器...",16,0x01);  
		Adc_Init();//初始化内部温度传感器	  
		TEMP_SEN_TYPE=1; 
	}   	    
	delay_ms(1100);//等待1.1s 
	BACK_COLOR= BLACK;
	LCD_Clear(BLACK);//清黑屏 
	Date_Refresh();  //加载日历
	tempdate=timer.w_date;//天数暂存器

	Pen_Point.Key_Sta=Key_Up;         //释放显示期间的触发	   	  
	while(1)
	{	
		key=AI_Read_TP(50);//适合滑动检测	    
		if(key)
		{
			if((Pen_Point.Key_Reg&0x03)==1)//第一次是滑动按下
			{
				t=KEY_Move_Check();//检查滑动按下
				if(t==MOVE_LEFT)break;//退出时钟模式 	  
			}else Pen_Point.Key_Reg=0; 											    
		}	   	 
		if(second!=timer.sec) //秒钟改变了
		{ 	
			LED0=!LED0;//闪灯
			second=timer.sec;		
			//显示大体的时钟
			POINT_COLOR=GBLUE;
			LCD_ShowBigNum(0,100,timer.hour);//显示时
			LCD_ShowBigChar(60,100,':'); //"/"
			LCD_ShowBigNum(90,100,timer.min);//显示分
			LCD_ShowBigChar(150,100,':'); //"/"
			LCD_ShowBigNum(180,100,timer.sec);//显示秒	 					   
			
			if(t%6==0)//等待五秒钟
			{		 
				if(TEMP_SEN_TYPE)temperate=Get_Temp();//得到内部温度
				else temperate=DS18B20_Get_Temp();//得到18b20温度
				if(temperate<0)//温度为负数的时候,红色显示
				{
					POINT_COLOR=RED;
					temperate=-temperate;//改为正温度
				}
				else POINT_COLOR=BRRED;		   //正常为棕红色字体显示
				LCD_ShowBigNum(90,184,temperate/10);//XX
				LCD_ShowBigChar(150,184,'.'); //"."
				LCD_ShowBigChar(180,184,temperate%10);//显示小数
				LCD_ShowBigChar(210,184,'C'); //"/"
				if(t>0)t=0;			 
			}  
			if(timer.w_date!=tempdate)
			{
				Date_Refresh();//天数变化了,更新日历.  
				tempdate=timer.w_date;//修改tempdate,防止重复进入
			}
			t++;  
		}			 			 
	};
	while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
	RTC->CRH&=~(0X01);  	  //关闭秒中断
	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
	LCD_Clear(WHITE);//清黑屏    
	POINT_COLOR=BLUE;
	BACK_COLOR=WHITE ;	
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -