1、利用SysTick定时器编写倒计时程序,如初始设置为2分30秒,每秒在屏幕上输出一次时间,倒计时为0后,红灯亮,停止屏幕输出,并关闭SysTick定时器的中断。
2、利用RTC显示日期(年月日、时分秒),每秒更新。并设置某个时间的闹钟。闹钟时间到时,屏幕上显示有你的姓名的文字,并点亮绿灯。
3、利用PWM脉宽调制,交替显示红灯的5个短闪和5个长闪。
4、GEC39定义为输出引脚,GEC10定义为输入引脚,用杜邦线将两个引脚相连,验证捕捉实验程序Incapture-Outcmp-20211110,观察输出的时间间隔。
四、程序源码
实验1:
使用systick定时器编写倒计时程序:、
根据要求:
Z执行源代码:
//includes.h
//(用户增加)
G_VAR_PREFIX vuint8_t cTime[3];
G_VAR_PREFIX vuint8_t ctime;
G_VAR_PREFIX vuint8_t ltime;
G_VAR_PREFIX vuint8_t gtime;
//isr.c
void SysTick_Handler()
{
//printf("***\n");
static uint8_t SysTickCount = 0;//初始化为技术0
SysTickCount++; //Tick单元执行递增操作
wdog_feed(); //对看门狗进行投喂操作
if (SysTickCount >= 100)
{
SysTickCount = 0;
gtime = gTime[0]*3600 + gTime[1]*60 + gTime[2];
ltime = ctime - gtime;
cTime[0] = ltime / 3600;
cTime[1] = (ltime - cTime[0] * 3600)/60;
cTime[2] = ltime- cTime[0] * 3600 - cTime[1] * 60;
SecAdd1(gTime);
}
}
//main.c
ctime = 61; //总倒计时
ltime = 0;
cTime[0] = 0; //时
cTime[1] = 0; //分
cTime[2] = 0; //秒
gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF); //初始化红灯
for(;;) //for(;;)(开头)
{
if (gTime[2] == mSec) continue;
mSec=gTime[2];
if(ltime != 0){
printf("%d:%d:%d\n",cTime[0],cTime[1],cTime[2]);//打印时间
}else{
printf("32106100129梁毅轩,红灯亮");
gpio_set(LIGHT_RED,LIGHT_ON);
for(;;) { }
}
}
二:利用RTC显示日期(年月日、时分秒),每秒更新。并设置某个时间的闹钟。闹钟时间到时,屏幕上显示有你的姓名的文字,并点亮绿灯。
根据要求:
代码为:
//isr.c
void RTC_Alarm_IRQHandler(void)
{
if(RTC_Alarm_Get_Int(A)) //闹钟A的中断标志位
{
gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF);
RTC_Alarm_Clear(A); //清闹钟A的中断标志位
printf("闹钟A已经执行!\n");
gpio_set(LIGHT_GREEN,LIGHT_ON);//点亮绿灯
printf("32106100129梁毅轩\n");//打印我的学号以及姓名
}
if(RTC_Alarm_Get_Int(B)) //闹钟A的中断标志位
{
RTC_Alarm_Clear(B); //清闹钟A的中断标志位
printf("闹钟B\n");
}
}
//main.c
uart_init(UART_User,115200);
RTC_Init(); //RTC初始化
RTC_Set_Time(16,51,0); //设置时间为16:50:0
RTC_Set_Date(24,6,1,6); //设置日期
//(1.6)使能模块中断
RTC_PeriodWKUP_Enable_Int(); //使能唤醒中断
uart_enable_re_int(UART_User);
RTC_Alarm_Enable_Int(0);
RTC_Set_Alarm(0,6,16,52,0);
三:利用PWM脉宽调制,交替显示红灯的5个短闪和5个长闪。
uint8_t flag = 1;
if ((mFlag==1)&&(Flag==1))//设定标志位
{
// 高电平亮
Flag=0;
m_K++;
//小灯反转
gpio_reverse(LIGHT_RED);
if(flag==1){
Delay_ms(1000);
printf("第%d次长闪\n",i);
flag=0;
continue;
}
flag=1;
printf("第%d次短闪\n",i);
}
四:GEC39定义为输出引脚,GEC10定义为输入引脚,用杜邦线将两个引脚相连,验证捕捉实验程序Incapture-Outcmp-20211110,观察输出的时间间隔。
直接通过连线观察时间间隔
五、运行结果
用适当的文字、截图、图片等描述实验的结果。
实验内容一:
编写计时程序,在倒计时结束点亮红灯
倒计时结束,输出
二:
设置闹钟:
并且打印出来:
三:
四:
通过观察,时间间隔越来越短
实验图片:
- 倒计时结束点亮红灯:
二:闹钟执行点亮绿灯: