STM32電子鐘萬年歷Proteus仿真_LCD1602液晶屏 (仿真+原理圖+PCB+源碼)
仿真:protues 8.9
程序編譯器:keil 5
編號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);//延時
}
}
?
審核編輯:劉清
電子發燒友App






評論