STM32学习笔记(九)

40.超级终端显示日历程序

超级终端显示日历程序

*********************************************************************************************/
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "buzzer.h"
#include "usart.h"
#include "rtc.h"

int main (void){//主程序
	u8 bya;
	RCC_Configuration(); //系统时钟初始化
	RTC_Config(); //实时时钟初始化
	LED_Init();//LED初始化
	KEY_Init();//按键初始化
	BUZZER_Init();//蜂鸣器初始化
	USART1_Init(115200); //串口初始化,参数中写波特率
	USART1_RX_STA=0xC000; //初始值设为有回车的状态,即显示一次欢迎词
	while(1){

		if(USART1_RX_STA&0xC000){ 
		//如果标志位是0xC000表示收到数据串完成,可以处理。(判断变量最高两位是否为1,如果是1,只有按下回车键才会有这样的效果,如果按下则进行下面的语句)
			if((USART1_RX_STA&0x3FFF)==0){ //单独的回车键再显示一次欢迎词
				if(RTC_Get()==0){ //读出时间值,同时判断返回值是不是0,非0时读取的值是错误的。
					printf(" 洋桃开发板STM32实时时钟测试程序   \r\n");
					printf(" 现在实时时间:%d-%d-%d %d:%d%d:%d%d ",ryear,rmon,rday,rhour,rmin/10,rmin%10,rsec/10,rsec%10);//显示日期时间
					if(rweek==0)printf("星期日   \r\n");//rweek值为0时表示星期日
					if(rweek==1)printf("星期一   \r\n");
					if(rweek==2)printf("星期二   \r\n");
					if(rweek==3)printf("星期三   \r\n");
					if(rweek==4)printf("星期四   \r\n");
					if(rweek==5)printf("星期五   \r\n");
					if(rweek==6)printf("星期六   \r\n");
					printf(" 单按回车键更新时间。输入字母C初始化时钟 \r\n");
					printf(" 请输入设置时间,格式20170806120000,按回车键确定! \r\n");
				}else{
					printf("读取失败!\r\n");
				}
			}else if((USART1_RX_STA&0x3FFF)==1){ //判断数据是不是2个
				if(USART1_RX_BUF[0]=='c' || USART1_RX_BUF[0]=='C'){
					RTC_First_Config(); //键盘输入c或C,初始化时钟
					BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//配置完成后,向后备寄存器中写特殊字符0xA5A5
					printf("初始化成功!      \r\n");//显示初始化成功
				}else{
					printf("指令错误!          \r\n"); //显示指令错误!
				} 
			}else if((USART1_RX_STA&0x3FFF)==14){ 
			//判断数据是不是14个
				//将超级终端发过来的数据换算并写入RTC
				ryear = (USART1_RX_BUF[0]-0x30)*1000+(USART1_RX_BUF[1]-0x30)*100+(USART1_RX_BUF[2]-0x30)*10+USART1_RX_BUF[3]-0x30;
				rmon = (USART1_RX_BUF[4]-0x30)*10+USART1_RX_BUF[5]-0x30;//串口发来的是字符,减0x30后才能得到十进制0~9的数据(*.*看ASCAL码表)
				rday = (USART1_RX_BUF[6]-0x30)*10+USART1_RX_BUF[7]-0x30;
				rhour = (USART1_RX_BUF[8]-0x30)*10+USART1_RX_BUF[9]-0x30;
				rmin = (USART1_RX_BUF[10]-0x30)*10+USART1_RX_BUF[11]-0x30;
				rsec = (USART1_RX_BUF[12]-0x30)*10+USART1_RX_BUF[13]-0x30;
				bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec); //将数据写入RTC计算器的程序
				if(bya==0)printf("写入成功!      \r\n");//显示写入成功 
				else printf("写入失败!       \r\n"); //显示写入失败
			}else{ //如果以上都不是,即是错误的指令。
				printf("指令错误!          \r\n"); //如果不是以上正确的操作,显示指令错误!
			}
			USART1_RX_STA=0; //将串口数据标志位清0
		}
	}
}

41.RCC设置程序

复位和时钟设置功能,设置单片机时钟输入源以及CPU和各种内部总线的时钟频率。
在这里插入图片描述

42.触摸按键的原理与驱动

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值