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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3027|回復: 1
打印 上一主題 下一主題
收起左側

基于STM32ZGT6的鬧鐘定時器程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:506115 發表于 2019-7-2 18:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
l基本要求:實現具備鬧鐘功能的電子鐘
使用STM32定時器功能實現,禁止使用RTC
基于STM32開發板和液晶屏幕實現功能
電子鐘具備時間顯示功能和鬧鐘功能
利用兩個可以控制的LED指示鬧鐘1和鬧鐘2的狀態
進階要求:電子鐘時間和鬧鐘修改以及LED漸變
利用板載三個按鍵實現修改時間和鬧鐘設定時間功能
實現LED燈1和LED燈2在點亮和熄滅時的漸變效果

單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "oled.h"
  7. #include "exti.h"
  8. #include "key.h"
  9. #include "pwm.h"
  10. struct time_format{
  11. short hour;
  12. short minute;
  13. short second;
  14. }time,alarm1,alarm2;
  15. extern short Flag_LED0_light;
  16. extern short Flag_LED1_light;
  17. extern void TIM14_PWM_Init(u32 arr,u32 psc);

  18. void OLED_update(struct time_format time,struct time_format alarm1,struct time_format alarm2)
  19. {
  20.                 OLED_Clear();

  21.                 OLED_ShowString(0,0,"Time");
  22.                 OLED_ShowString(0,2,"Alarm1");
  23.                 OLED_ShowString(0,4,"Alarm2");

  24.                 OLED_ShowNum(52,0,time.hour,2,16);
  25.                 OLED_ShowChar(67,0,':');
  26.                 OLED_ShowNum(74,0,time.minute,2,16);
  27.                 OLED_ShowChar(89,0,':');
  28.                 OLED_ShowNum(96,0,time.second,2,16);
  29.                
  30.                 OLED_ShowNum(52,2,alarm1.hour,2,16);
  31.                 OLED_ShowChar(67,2,':');
  32.                 OLED_ShowNum(74,2,alarm1.minute,2,16);
  33.                 OLED_ShowChar(89,2,':');
  34.                 OLED_ShowNum(96,2,alarm1.second,2,16);
  35.                
  36.                 OLED_ShowNum(52,4,alarm2.hour,2,16);
  37.                 OLED_ShowChar(67,4,':');
  38.                 OLED_ShowNum(74,4,alarm2.minute,2,16);
  39.                 OLED_ShowChar(89,4,':');
  40.                 OLED_ShowNum(96,4,alarm2.second,2,16);
  41. }

  42. void time_init()
  43. {
  44.         time.hour=22;
  45.         time.minute=33;
  46.         time.second=44;
  47.         /*
  48.         alarm1.hour=23;
  49.         alarm1.minute=00;
  50.         alarm1.second=00;
  51.        
  52.         alarm2.hour=01;
  53.         alarm2.minute=59;
  54.         alarm2.second=59;
  55.         */
  56.         alarm1.hour=22;
  57.         alarm1.minute=33;
  58.         alarm1.second=50;
  59.        
  60.         alarm2.hour=22;
  61.         alarm2.minute=33;
  62.         alarm2.second=55;
  63. }
  64. int time_compete(struct time_format time,struct time_format alarm)
  65. {
  66.         if(time.hour==alarm.hour&&time.minute==alarm.minute&&time.second==alarm.second)
  67.                 return 1;
  68.         else return 0;
  69.        
  70. }
  71. void time_update()
  72. {
  73.         if(time.second==60)
  74.         {
  75.                 time.minute++;
  76.                 time.second=00;
  77.                 if(time.minute==60)
  78.                 {
  79.                         time.minute=00;
  80.                         time.hour++;
  81.                         if(time.hour==24)
  82.                                 time.hour=0;
  83.                 }
  84.         }       
  85.         if(time.minute==60)
  86.                 {
  87.                         time.minute=00;
  88.                         time.hour++;
  89.                         if(time.hour==24)
  90.                                 time.hour=0;
  91.                 }
  92.         if(time.hour==24)
  93.                                 time.hour=0;

  94.        
  95.         if(alarm1.second==60)
  96.         {
  97.                 alarm1.minute++;
  98.                 alarm1.second=00;
  99.                 if(alarm1.minute==60)
  100.                 {
  101.                         alarm1.minute=00;
  102.                         alarm1.hour++;
  103.                         if(alarm1.hour==24)
  104.                                 alarm1.hour=0;
  105.                 }
  106.         }
  107.         if(alarm1.minute==60)
  108.                 {
  109.                         alarm1.minute=00;
  110.                         alarm1.hour++;
  111.                         if(alarm1.hour==24)
  112.                                 alarm1.hour=0;
  113.                 }
  114.         if(alarm1.hour==24)
  115.                         alarm1.hour=0;
  116.                
  117.        
  118.         if(alarm2.second==60)
  119.         {
  120.                 alarm2.minute++;
  121.                 alarm2.second=00;
  122.                 if(alarm2.minute==60)
  123.                 {
  124.                         alarm2.minute=00;
  125.                         alarm2.hour++;
  126.                         if(alarm2.hour==24)
  127.                                 alarm2.hour=0;
  128.                 }
  129.         }       
  130.         if(alarm2.minute==60)
  131.                 {
  132.                         alarm2.minute=00;
  133.                         alarm2.hour++;
  134.                         if(alarm2.hour==24)
  135.                                 alarm2.hour=0;
  136.                 }
  137.         if(alarm2.hour==24)
  138.                                 alarm2.hour=0;       
  139. }
  140. void LED_light(int a,int b)
  141. {
  142.         int t=0;
  143.         if(a==0)
  144.         {
  145.                 if(b==0)
  146.                 {
  147.                         t=0;
  148.                         while(t<25)
  149.                                 {
  150.                                         LED0=0;
  151.                                         delay_ms(t);
  152.                                         LED0=1;
  153.                                         delay_ms(25-t);
  154.                                         t++;
  155.                                 }
  156.                                 LED0=0;
  157.                 }
  158.                 else
  159.                 {
  160.                         t=25;
  161.                         while(t>0)
  162.                                 {
  163.                                         LED0=0;
  164.                                         delay_ms(t);
  165.                                         LED0=1;
  166.                                         delay_ms(25-t);
  167.                                         t--;
  168.                                 }
  169.                                 LED0=1;
  170.                 }
  171.         }
  172.         else
  173.         {
  174.                 if(b==0)
  175.                 {
  176.                         t=0;
  177.                         while(t<25)
  178.                                 {
  179.                                         LED1=0;
  180.                                         delay_ms(t);
  181.                                         LED1=1;
  182.                                         delay_ms(25-t);
  183.                                         t++;
  184.                                 }
  185.                                 LED1=0;
  186.                 }
  187.                 else
  188.                 {
  189.                         t=25;
  190.                         while(t>0)
  191.                                 {
  192.                                         LED1=0;
  193.                                         delay_ms(t);
  194.                                         LED1=1;
  195.                                         delay_ms(25-t);
  196.                                         t--;
  197.                                 }
  198.                                 LED1=1;
  199.                 }
  200.         }       
  201. }
  202. void LED_light_pwm(int a,int b)
  203. {
  204.         u16 led0pwmval=0;   
  205.         if(a==0)
  206.         {
  207.                 if(b==0)
  208.                 {
  209.                         led0pwmval=500;
  210.                         while(led0pwmval>0)
  211.                         {
  212.                                 delay_ms(10);
  213.                                 led0pwmval--;
  214.                                 TIM_SetCompare1(TIM14,led0pwmval);
  215.                         }
  216.                 }
  217.                 else
  218.                 {
  219.                         led0pwmval=0;
  220.                         while(led0pwmval<500)
  221.                         {
  222.                                 delay_ms(10);
  223.                                 led0pwmval++;
  224.                                 TIM_SetCompare1(TIM14,led0pwmval);
  225.                         }
  226.                 }
  227.         }
  228.         else
  229.         {
  230.                 if(b==0)
  231.                 {
  232.                        
  233.                 }
  234.                 else
  235.                 {
  236.                        
  237.                 }
  238.         }
  239. }
  240. int main(void)
  241. {
  242.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
  243.         delay_init(168);  //初始化延時函數
  244.         uart_init(115200);         //串口初始化
  245.         LED_Init();                //初始化LED端口
  246.         EXTIX_Init();       //初始化外部中斷輸入
  247.         time_init();//時間變量賦初值
  248.         OLED_Init();//OLED初始化
  249.         OLED_update(time,alarm1,alarm2);
  250.         TIM3_Int_Init(10000-1,8400-1);        //定時器時鐘84M,分頻系數8400,所以84M/8400=10Khz的計數頻率
  251.         TIM14_PWM_Init(500-1,84-1);        //84M/84=1Mhz的計數頻率,重裝載值500,所以PWM頻率為 1M/500=2Khz.
  252.         GPIO_SetBits(GPIOF,GPIO_Pin_9);//GPIOF9,F10設置高,燈滅
  253.         while(1)
  254.         {
  255.                 if(Flag_LED0_light==0)
  256.                 {
  257.                         LED_light_pwm(0,0);
  258.                         GPIO_SetBits(GPIOF,GPIO_Pin_9);//GPIOF9,F10設置高,燈滅
  259.                         LED0=0;
  260.                         Flag_LED0_light=-1;
  261.                 }
  262.                 if(Flag_LED0_light==1)
  263.                 {
  264.                         LED_light_pwm(0,1);
  265.                         Flag_LED0_light=-1;
  266.                 }
  267.                 if(Flag_LED1_light==0)
  268.                 {
  269.                         LED_light(1,0);
  270.                         Flag_LED1_light=-1;
  271.                 }
  272.                 if(Flag_LED1_light==1)
  273.                 {
  274.                         LED_light(1,1);
  275.                         Flag_LED1_light=-1;
  276.                 }       
  277.                 if(USART_RX_STA&0x8000)
  278.                 {
  279.                         u8 len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
  280.                         //USART_RX_BUF
  281.                         if(strstr((const char*)USART_RX_BUF,"set"))
  282.                         {
  283.                                 time.hour=(USART_RX_BUF[4]-48)*10+USART_RX_BUF[5]-48;
  284.                                 time.minute=(USART_RX_BUF[7]-48)*10+USART_RX_BUF[8]-48;
  285.                                 time.second=(USART_RX_BUF[10]-48)*10+USART_RX_BUF[11]-48;
  286.                                 printf("OK!\r\n");
  287.                         }
  288.                         USART_RX_STA=0;
  289.                 }
  290.         }
  291. }
復制代碼
程序:
程序.7z (311.34 KB, 下載次數: 26)

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

使用道具 舉報

沙發
ID:1 發表于 2019-7-5 04:32 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 韩日精品一区 | 视频一区二区中文字幕 | 色婷婷av久久久久久久 | 久久性| 国产www成人 | 国产精品美女久久久久久免费 | 成人在线视频网站 | 91精品久久久久久久 | 欧美一级片在线观看 | 男人午夜视频 | 国产国语精品 | 欧美一区二区三区在线观看 | 婷婷综合激情 | 国产一区二区在线视频 | 韩国av网站在线观看 | 国产一区二区三区四区五区加勒比 | 成人精品一区亚洲午夜久久久 | 日韩一二区 | 精品视频一二区 | 一级在线观看 | 欧美日韩专区 | 国产精品免费在线 | 国产成人免费视频网站高清观看视频 | 超碰成人免费 | 九一视频在线观看 | 午夜精品久久久久久久99黑人 | 亚洲少妇综合网 | 日韩在线欧美 | 一区二区三区免费观看 | 在线看片网站 | 国产剧情久久 | 91嫩草精品 | 亚洲美女视频 | 国产精品www| 美女黄视频网站 | 亚洲人在线 | 爱高潮www亚洲精品 中文字幕免费视频 | 日韩国产免费观看 | 亚洲精品1| 午夜视频在线观看网站 | 日本一区不卡 |