標(biāo)題: 基于stm32單片機(jī)的數(shù)字時(shí)鐘可鬧鈴程序 [打印本頁(yè)]
作者: 看雪success 時(shí)間: 2022-5-14 11:49
標(biāo)題: 基于stm32單片機(jī)的數(shù)字時(shí)鐘可鬧鈴程序
1.1 設(shè)計(jì)目的和意義
單片機(jī)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系統(tǒng)。采用單片機(jī)可以完成很多功能,現(xiàn)在很多電子產(chǎn)品都要用到單片機(jī)。
因?yàn)閱纹瑱C(jī)這門課是一門實(shí)踐性很強(qiáng)的,單純學(xué)習(xí)課本不能掌握這門知識(shí),經(jīng)過設(shè)計(jì),我們的硬件設(shè)計(jì)能力和編程能力都能得到提升。
本次實(shí)驗(yàn)采用的是基于stm32單片機(jī)設(shè)計(jì)的數(shù)字時(shí)鐘,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更長(zhǎng)的使用壽命,相比于數(shù)字邏輯電路,線路連接大大簡(jiǎn)化,采用程序設(shè)計(jì)方法使得用戶使用時(shí)更加的靈活和簡(jiǎn)便。
1.2 設(shè)計(jì)任務(wù)和要求
1、任務(wù)
設(shè)計(jì)一個(gè)基于STM32的數(shù)字電子時(shí)鐘,能實(shí)現(xiàn)計(jì)時(shí)和時(shí)間的顯示等功能。
2、要求
(1)用STM32設(shè)計(jì)數(shù)字電子時(shí)鐘,需要顯示時(shí),分,秒。
(2)能通過按鍵調(diào)整時(shí)間。
(3)在上述基礎(chǔ)上可以任意發(fā)揮。
- #include "stm32f10x.h"
- #include "Key.h"
- #include "Led.h"
- #include "delay.h"
- #include "smg.h"
- #include "timer.h"
- #include "beep.h"
- int sec,min,hour;//時(shí)鐘
- u8 h,m,s;//鬧鐘
- u8 setflag;//時(shí)間設(shè)置
- u8 a = 0;
- u16 count;
- u8 countflag;//鬧鐘設(shè)置值
- u8 flag;//響鈴設(shè)置
- // void delay_ms(u32 ms)
- //{
- // u32 i;
- // while(ms--)
- // {
- //
- // for(i=350;i>0;i--);
- // }
- //}
- int main()
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- Timer3_Init(9999,799);
- Timer2_Init(9999,799);//proteus里面的晶振頻率是8M;
- LED_Init();
- Key_Init();
- delay_init();
- BEEP_Init();
- Smg_Init();
- hour = 7;
- min = 59;
- sec = 52;
- h = 0;
- m = 0;
- s = 0;
- GPIO_ResetBits(GPIOB,GPIO_Pin_1);//cs
- GPIO_SetBits(GPIOB,GPIO_Pin_2);// 鬧鈴指示燈不亮LED0
- GPIO_SetBits(GPIOB,GPIO_Pin_3);//未進(jìn)入鬧鐘模式
- //GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_SET);
- while(1)
- { GPIO_ResetBits(GPIOB,GPIO_Pin_1);
-
- //實(shí)時(shí)時(shí)間顯示
- Smg_DisPlay();
- Display_Data(hour,min,sec);
- //時(shí)間設(shè)置
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//K0按下
- {
- delay_ms(3); //消抖
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
- setflag = 1; //進(jìn)入調(diào)時(shí)模式
- TIM_Cmd(TIM3,DISABLE); //TI3失能
- }
- }
- while(setflag)
- {
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1按下,h++
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
- hour++;
- if(hour == 24)
- hour = 0;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2按下,m++
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
- min++;
- if(min == 60)
- min = 0;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)//k7按下,h--
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)));
- hour--;
- if(hour == -1)
- hour = 23;
- }
- }
-
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)//k8按下,m--
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)));
- min--;
- if(min == -1)
- min = 59;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//k0再次按下
- {
- //退出調(diào)時(shí)模式
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
- setflag = 0;
- TIM_Cmd(TIM3,ENABLE);//TI3使能
- break;
- }
- }
- Smg_DisPlay();
- Display_Data(hour,min,sec);
- }
-
- //鬧鐘設(shè)置
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2按下
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
- countflag = 1; //進(jìn)入設(shè)置鬧鐘模式
- if(a == 0)
- {
- a = 1;
- TIM_Cmd(TIM2,DISABLE);
- }
- else
- {
- a = 0;
- countflag = 0;//退出定時(shí)模式
- TIM_Cmd(TIM2,ENABLE);//開啟定時(shí)器停止定時(shí)
- count = 0;
- }
- }
- }
- while(countflag)//進(jìn)入鬧鐘模式
- { GPIO_ResetBits(GPIOB,GPIO_Pin_3);//藍(lán)燈亮
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1,m++
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
- m++;
- if(m == 60)
- m = 0;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//k0,h++
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
- h++;
- if(h == 24)
- h = 0;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)//k7按下,h--
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)));
- hour--;
- if(hour == -1)
- hour = 23;
- }
- }
-
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)//k8按下,m--
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)));
- min--;
- if(min == -1)
- min = 59;
- }
- }
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2再次按下
- {
- //退出設(shè)置鬧鐘模式 進(jìn)入時(shí)鐘運(yùn)行模式
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
- countflag = 0;
- TIM_Cmd(TIM2,ENABLE);//開啟定時(shí)器2鬧鐘定時(shí),即開啟了count++,用于判斷后面的
- flag = 1;
- break;
- }
- }
-
- Smg_DisPlay();
- Display_Data(h,m,s);
- }
- while(flag)//開始計(jì)數(shù)
- {
- Smg_DisPlay();
- Display_Data(hour,min,sec);
- if(count == CountTime(h,m))/////////////////////////////......................
- { GPIO_SetBits(GPIOB,GPIO_Pin_4);//開始響
- GPIO_ResetBits(GPIOB,GPIO_Pin_2);//亮紅燈
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1按下退出鬧鈴
- {
- delay_ms(3);
- if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
- {
- while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
- GPIO_SetBits(GPIOB,GPIO_Pin_2);//滅 紅燈
- GPIO_ResetBits(GPIOB,GPIO_Pin_4);//不響
- TIM_Cmd(TIM2,DISABLE);
- flag = 0;
- break;//退出
- }}}}}}
復(fù)制代碼 Keil代碼下載:
程序.7z
(313.05 KB, 下載次數(shù): 125)
2022-5-14 19:21 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: 看雪success 時(shí)間: 2022-5-14 11:51
Proteus仿真圖只能用8.11版本打開
作者: Hiroys 時(shí)間: 2022-10-14 16:31
Proteus仿真圖只能用8.11版本打開
作者: 吳作和 時(shí)間: 2022-10-23 09:42
這是庫(kù)函數(shù)版本,有寄存器版本嗎
作者: 3278078863 時(shí)間: 2022-11-28 11:43
有STM32CubeIDE_1.8.0用MP157A芯片寫的程序不
作者: 1519603107 時(shí)間: 2023-4-19 11:00
請(qǐng)問芯片用的是哪個(gè)
作者: liyunfei20000 時(shí)間: 2023-7-14 08:21
請(qǐng)教下CountTime(h,m)這個(gè)函數(shù)怎么能學(xué)習(xí)一下
作者: liyunfei20000 時(shí)間: 2023-7-14 08:22
請(qǐng)教一下 這個(gè)CountTime(h,m)怎么能學(xué)習(xí)一下
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |