久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6094|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

基于stm32單片機的數(shù)字時鐘可鬧鈴程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1023077 發(fā)表于 2022-5-14 11:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.1    設(shè)計目的和意義
單片機是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機系統(tǒng)。采用單片機可以完成很多功能,現(xiàn)在很多電子產(chǎn)品都要用到單片機。
因為單片機這門課是一門實踐性很強的,單純學(xué)習(xí)課本不能掌握這門知識,經(jīng)過設(shè)計,我們的硬件設(shè)計能力和編程能力都能得到提升。
本次實驗采用的是基于stm32單片機設(shè)計的數(shù)字時鐘,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,相比于數(shù)字邏輯電路,線路連接大大簡化,采用程序設(shè)計方法使得用戶使用時更加的靈活和簡便。

1.2 設(shè)計任務(wù)和要求            
1、任務(wù)
設(shè)計一個基于STM32的數(shù)字電子時鐘,能實現(xiàn)計時和時間的顯示等功能。
2、要求
(1)用STM32設(shè)計數(shù)字電子時鐘,需要顯示時,分,秒。
(2)能通過按鍵調(diào)整時間。
(3)在上述基礎(chǔ)上可以任意發(fā)揮。

附錄Ⅲ 部分程序清單
MAIN.C:
  1. #include "stm32f10x.h"
  2. #include "Key.h"
  3. #include "Led.h"
  4. #include "delay.h"
  5. #include "smg.h"
  6. #include "timer.h"
  7. #include "beep.h"

  8. int  sec,min,hour;//時鐘
  9. u8 h,m,s;//鬧鐘
  10. u8 setflag;//時間設(shè)置
  11. u8 a = 0;
  12. u16 count;
  13. u8 countflag;//鬧鐘設(shè)置值
  14. u8 flag;//響鈴設(shè)置

  15. // void delay_ms(u32 ms)               
  16. //{
  17. //        u32 i;
  18. //        while(ms--)
  19. //        {
  20. //       
  21. //        for(i=350;i>0;i--);
  22. //        }
  23. //}
  24. int main()
  25. {
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  27.         Timer3_Init(9999,799);
  28.         Timer2_Init(9999,799);//proteus里面的晶振頻率是8M;
  29.         LED_Init();
  30.         Key_Init();
  31.         delay_init();
  32.         BEEP_Init();
  33.         Smg_Init();
  34.         hour = 7;
  35.         min = 59;
  36.         sec = 52;       
  37.         h = 0;
  38.         m = 0;
  39.         s = 0;
  40.         GPIO_ResetBits(GPIOB,GPIO_Pin_1);//cs
  41.                 GPIO_SetBits(GPIOB,GPIO_Pin_2);// 鬧鈴指示燈不亮LED0
  42.         GPIO_SetBits(GPIOB,GPIO_Pin_3);//未進入鬧鐘模式
  43.         //GPIO_WriteBit(GPIOB,GPIO_Pin_1,Bit_SET);
  44.         while(1)
  45.         {                GPIO_ResetBits(GPIOB,GPIO_Pin_1);
  46.                
  47.                 //實時時間顯示
  48.                 Smg_DisPlay();
  49.                 Display_Data(hour,min,sec);

  50.                 //時間設(shè)置
  51.                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//K0按下
  52.                 {
  53.                         delay_ms(3);                                     //消抖
  54.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
  55.                         {
  56.                                 while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
  57.                                 setflag = 1;               //進入調(diào)時模式
  58.                                 TIM_Cmd(TIM3,DISABLE);     //TI3失能
  59.                         }
  60.                 }
  61.                 while(setflag)
  62.                 {
  63.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1按下,h++
  64.                         {
  65.                                 delay_ms(3);
  66.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
  67.                                 {
  68.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
  69.                                         hour++;
  70.                                         if(hour == 24)
  71.                                                 hour = 0;
  72.                                 }
  73.                         }
  74.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2按下,m++
  75.                         {
  76.                                 delay_ms(3);
  77.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
  78.                                 {
  79.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
  80.                                         min++;
  81.                                         if(min == 60)
  82.                                                 min = 0;
  83.                                 }
  84.                         }
  85.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)//k7按下,h--
  86.                         {
  87.                                 delay_ms(3);
  88.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)
  89.                                 {
  90.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)));
  91.                                         hour--;
  92.                                         if(hour == -1)
  93.                                                 hour = 23;
  94.                                 }
  95.                         }
  96.                        
  97.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)//k8按下,m--
  98.                         {
  99.                                 delay_ms(3);
  100.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)
  101.                                 {
  102.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)));
  103.                                         min--;
  104.                                         if(min == -1)
  105.                                                 min = 59;
  106.                                 }
  107.                         }
  108.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//k0再次按下
  109.                         {
  110.                                 //退出調(diào)時模式
  111.                                 delay_ms(3);
  112.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)
  113.                                 {
  114.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
  115.                                         setflag = 0;
  116.                                         TIM_Cmd(TIM3,ENABLE);//TI3使能
  117.                                         break;
  118.                                 }
  119.                         }
  120.                         Smg_DisPlay();
  121.                         Display_Data(hour,min,sec);
  122.                 }
  123.        
  124.                 //鬧鐘設(shè)置
  125.                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2按下
  126.                 {
  127.                         delay_ms(3);
  128.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
  129.                         {
  130.                                 while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
  131.                                 countflag = 1;                           //進入設(shè)置鬧鐘模式
  132.                                 if(a == 0)
  133.                                 {
  134.                                         a = 1;
  135.                                         TIM_Cmd(TIM2,DISABLE);
  136.                                 }
  137.                                 else
  138.                                 {
  139.                                         a = 0;
  140.                                         countflag = 0;//退出定時模式
  141.                                         TIM_Cmd(TIM2,ENABLE);//開啟定時器停止定時
  142.                                         count = 0;
  143.                                 }
  144.                         }
  145.                 }
  146.                 while(countflag)//進入鬧鐘模式
  147.                 {    GPIO_ResetBits(GPIOB,GPIO_Pin_3);//藍燈亮
  148.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1,m++
  149.                         {
  150.                                 delay_ms(3);
  151.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
  152.                                 {
  153.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
  154.                                         m++;
  155.                                         if(m == 60)
  156.                                                 m = 0;
  157.                                 }
  158.                         }
  159.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0)//k0,h++
  160.                         {
  161.                                 delay_ms(3);
  162.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
  163.                                 {
  164.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)));
  165.                                         h++;
  166.                                         if(h == 24)
  167.                                                 h = 0;
  168.                                 }
  169.                         }
  170.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)//k7按下,h--
  171.                         {
  172.                                 delay_ms(3);
  173.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) == 0)
  174.                                 {
  175.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)));
  176.                                         hour--;
  177.                                         if(hour == -1)
  178.                                                 hour = 23;
  179.                                 }
  180.                         }
  181.                        
  182.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)//k8按下,m--
  183.                         {
  184.                                 delay_ms(3);
  185.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 0)
  186.                                 {
  187.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)));
  188.                                         min--;
  189.                                         if(min == -1)
  190.                                                 min = 59;
  191.                                 }
  192.                         }
  193.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)//k2再次按下
  194.                   {
  195.                                 //退出設(shè)置鬧鐘模式 進入時鐘運行模式
  196.                                 delay_ms(3);
  197.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0)
  198.                                 {
  199.                                         while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)));
  200.                                         countflag = 0;
  201.                                         TIM_Cmd(TIM2,ENABLE);//開啟定時器2鬧鐘定時,即開啟了count++,用于判斷后面的
  202.                                         flag = 1;
  203.                                         break;
  204.                                 }
  205.                   }
  206.                        
  207.                         Smg_DisPlay();
  208.                         Display_Data(h,m,s);
  209.                 }
  210.                                 while(flag)//開始計數(shù)
  211.                 {
  212.                         Smg_DisPlay();
  213.                         Display_Data(hour,min,sec);               
  214.                         if(count == CountTime(h,m))/////////////////////////////......................
  215.                         {   GPIO_SetBits(GPIOB,GPIO_Pin_4);//開始響
  216.                                 GPIO_ResetBits(GPIOB,GPIO_Pin_2);//亮紅燈
  217.                                 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)//k1按下退出鬧鈴
  218.                                 {
  219.                                         delay_ms(3);
  220.                                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0)
  221.                                         {
  222.                                                 while(!(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)));
  223.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_2);//滅 紅燈
  224.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_4);//不響
  225.                                                 TIM_Cmd(TIM2,DISABLE);
  226.                                                 flag = 0;
  227.                                                 break;//退出
  228. }}}}}}
復(fù)制代碼
Keil代碼下載: 程序.7z (313.05 KB, 下載次數(shù): 125)

評分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1023077 發(fā)表于 2022-5-14 11:51 | 只看該作者
Proteus仿真圖只能用8.11版本打開
回復(fù)

使用道具 舉報

板凳
ID:1047685 發(fā)表于 2022-10-14 16:31 | 只看該作者
Proteus仿真圖只能用8.11版本打開
回復(fù)

使用道具 舉報

地板
ID:608154 發(fā)表于 2022-10-23 09:42 來自手機 | 只看該作者
這是庫函數(shù)版本,有寄存器版本嗎
回復(fù)

使用道具 舉報

5#
ID:1054345 發(fā)表于 2022-11-28 11:43 | 只看該作者
有STM32CubeIDE_1.8.0用MP157A芯片寫的程序不
回復(fù)

使用道具 舉報

6#
ID:1072425 發(fā)表于 2023-4-19 11:00 來自手機 | 只看該作者
請問芯片用的是哪個
回復(fù)

使用道具 舉報

7#
ID:736661 發(fā)表于 2023-7-14 08:21 | 只看該作者
請教下CountTime(h,m)這個函數(shù)怎么能學(xué)習(xí)一下
回復(fù)

使用道具 舉報

8#
ID:736661 發(fā)表于 2023-7-14 08:22 | 只看該作者
請教一下 這個CountTime(h,m)怎么能學(xué)習(xí)一下
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区av | 日韩欧美视频 | 操一草| 国产精品国产精品国产专区不蜜 | 中文字幕在线一区 | 日韩国产高清在线观看 | 亚洲v日韩v综合v精品v | 亚洲永久字幕 | 亚洲精品视频在线 | 色网在线观看 | 91九色在线观看 | 久久蜜桃精品 | 国产激情偷乱视频一区二区三区 | 久久美女视频 | 91精品久久久久久久 | 欧美精品综合 | 亚洲91精品| 久久久久久天堂 | 99精品网 | 日日夜精品视频 | 亚洲444eee在线观看 | 久久亚洲91 | 欧美一区 | 欧美日韩精品免费 | 精品免费视频一区二区 | 久久国产成人精品国产成人亚洲 | 午夜视频在线观看视频 | 日本视频一区二区 | 午夜视频在线播放 | 四虎国产 | 日韩在线精品 | 成人精品免费视频 | 91成人在线视频 | 亚洲精品综合一区二区 | 99re6在线视频精品免费 | 久久精品99 | 国产九九九九 | 日韩欧美亚洲一区 | 成人做爰69片免费观看 | 婷婷精品 | 99国产精品99久久久久久 |