控制/MCU
STM32电子钟万年历Proteus仿真_LCD1602液晶屏 (仿真+原理图+PCB+源码)
仿真:protues 8.9
程序编译器:keil 5
编程语言:C语言
编号C0003
题目要求:
1.具有显示年、月、日、时、分、秒功能;
2.能计算并显示星期;
3.能手动调整时间,设置闹钟;
4.具有闹钟功能,时间到声光报警(蜂鸣器嘟嘟嘟,LED灯闪烁)。
讲解视频:
仿真图(提供源文件):
原理图(提供源文件):
PCB(提供源文件):
程序(提供源文件源码):
以下为部分程序:
int main(void) { bool i = 0; /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config();//系统时钟初始化 delay_init(10);//初始化延时函数 TIM3_Init(2400-1, 72-1);// 10ms 定时器初始化 MX_RTC_Init(); //STM32内部RTC初始化 Key_Init();//按键初始化 Beep_Init();//声光报警初始化 LCD_Init();//LCD1602初始化 sAlrm_g.Alm_Hour = 0;//闹钟时间 时 sAlrm_g.Alm_Min = 0;//闹钟时间 分 sAlrm_g.Alm_Sec = 10;//闹钟时间 秒 while(1) { switch(set_mode)//设置模式 { case 0: HAL_RTC_GetDate(&hrtc, &sDate_g, RTC_FORMAT_BIN);//得到RTC的年月日 HAL_RTC_GetTime(&hrtc, &sTime_g, RTC_FORMAT_BIN); //得到RTC的时分秒 Conv_Disp_Data(0);//参数0 得到全部显示数据 LCD_write_string(0, 0, (char*)temp_line_one);//LCD1602第一行显示 LCD_write_string(0, 1, (char*)temp_line_two);//LCD1602第二行显示 break; case 1://设置年份 Conv_Disp_Data(i*1);//i是1 屏蔽掉年份显示。i是0,显示年份。通过对i的取反实现年份闪缩 i = !i;//i取反 LCD_write_string(0, 0, (char*)temp_line_one);//LCD1602第一行显示 break; case 2://设置月份 Conv_Disp_Data(i*2); i = !i; LCD_write_string(0, 0, (char*)temp_line_one); break; case 3://设置日份 Conv_Disp_Data(i*3); i = !i; LCD_write_string(0, 0, (char*)temp_line_one); break; case 4://设置时间 Conv_Disp_Data(i*4); i = !i; LCD_write_string(0, 0, (char*)temp_line_one); break; case 5://设置分钟 Conv_Disp_Data(i*5); i = !i; LCD_write_string(0, 0, (char*)temp_line_one); break; case 6://设置秒 Conv_Disp_Data(i*6); i = !i; LCD_write_string(0, 0, (char*)temp_line_one); break; case 7://设置闹钟时钟 Conv_Disp_Data(i*7); i = !i; LCD_write_string(0, 1, (char*)temp_line_two); break; case 8://设置闹钟分钟 Conv_Disp_Data(i*8); i = !i; LCD_write_string(0, 1, (char*)temp_line_two); break; case 9://设置闹钟秒钟 Conv_Disp_Data(i*9); i = !i; LCD_write_string(0, 1, (char*)temp_line_two); break; default: break; } if( (sTime_g.Hours == sAlrm_g.Alm_Hour) && (sTime_g.Minutes == sAlrm_g.Alm_Min) && (sTime_g.Seconds == sAlrm_g.Alm_Sec) )//判断闹钟时间 { for(uint8_t j = 0; j < 10; j++)//执行十次 { LED2_TOG();//LED2翻转,蜂鸣器嘟嘟嘟报警 HAL_Delay(300); } } HAL_Delay(100);//延时 } }
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !