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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103可控調光系統制作 帶時鐘顯示 附程序

[復制鏈接]
跳轉到指定樓層
樓主
通過stm32f103c8t6單片機的定時器3輸出四路可調的PWM(TIM3)。
通過按鍵控制呼吸燈頻率以及模式轉換。
通過oled12864顯示實時時鐘,并且可以通過按鍵修改時間。
通過oled12864屏幕顯示信息(顯示實時時間以及呼吸頻率等級)。
通過HC-05藍牙模塊調節PWM的頻率
主要功能:
基于STM32的呼吸燈裝置,使用定時器3(TIM3)輸出4路PWM。
在屏幕上會顯示呼吸頻率等級和實時時鐘,裝置具有三個按鍵,其中一個為模式轉換,按下依次修改年月日時分的數值。另外兩個按鍵為加數和減數,這兩個按鍵共用與按鍵修改時間和調整呼吸頻率。
當模式按鍵未按下時,加減鍵修改呼吸頻率。
當模式按鍵按下第一次時,此時為年份修改,通過按鍵加減修改年份。
當模式按鍵按下第二次時,此時為月份修改,通過按鍵加減修改月份
當模式按鍵按鍵按下三、四、五次時,分別對應修改日、時、分,通過按鍵加減修改數值。

另外可以通過藍牙修改呼吸燈的頻率
接線:

  
引腳
  
模塊

  
PA6 PA7 PB0 PB1
定時器3 pwm的通道1~4
  
分別接入四個led
PB6 PB7
IIC 屏幕數據線以及時鐘線
  
分別接入屏幕的SCL SDA
PA9、PA10
藍牙串口引腳
  
分別接入藍牙模塊RX TX
PA0 PA1 PA2
為按鍵引腳
  
分別接入三個按鍵

清單:

  
序號
  
器件名稱
規格
數量
1
單片機最小系統
stm32f103c8t6
1
2
藍牙模塊
Hc-05
1
3
顯示屏幕
oled12864
1
4
LED燈
4
5
獨立按鍵
按鍵
4



制作出來的實物效果圖:










單片機源程序如下:
  1. #include "stm32f10x.h" //STM32頭文件
  2. #include "sys.h"
  3. #include "delay.h"//延時
  4. #include "oled0561.h"//oled屏幕
  5. #include "NVIC.h"//外部中斷
  6. #include "usart.h"//串口
  7. #include "key.h"//按鍵
  8. #include "i2c.h"
  9. #include "rtc.h"
  10. #include "pwm.h"
  11. void xianshishijian(void);
  12. void xiugai(void);
  13. u8 a,dengji=20;
  14. u8 bya=6;
  15. int main (void){//主程序
  16.         u8 a,fx=1;
  17.         u32 ti=0;
  18.         RCC_Configuration(); //系統時鐘初始化
  19.   TIM3_Init();       //定時器3 pwm
  20.         USART1_Init(9600);//串口1初始化并啟動
  21.         KEY_Init();//按鍵初始化
  22.         KEYPAD1_INT_INIT();//按鍵中斷初始化
  23.         KEYPAD2_INT_INIT();//按鍵中斷初始化
  24.         KEYPAD3_INT_INIT();//按鍵中斷初始化
  25.         RTC_Config();
  26.         I2C_Configuration();//i2c初始化
  27.         OLED0561_Init();//屏幕初始化
  28.         delay_ms(10);
  29.         OLED_DISPLAY_PIC1();//開機動畫
  30.         delay_s(1);
  31.         OLED_DISPLAY_CLEAR();
  32.         bya=RTC_Set(2019,12,10,13,34,00);
  33.         delay_s(1);
  34.   printf("%d",dengji);
  35.         
  36.         
  37.         while(1){
  38.                 for(a=0;a<8;a++){
  39.                   OLED_DISPLAY_16x16(4,a*16,a);//顯示信息
  40.                 }
  41.                
  42.                

  43.     xianshishijian();
  44.                 xiugai();
  45.                
  46.         delay_ms(1);
  47.                 if(fx==1)               
  48.                 {
  49.                         ti++;
  50.                         if(ti>dengji)               
  51.                         {
  52.                                 fx=0;
  53.                         }
  54.                 }
  55.                 else
  56.                 {
  57.                         ti--;
  58.                         if(ti==0)
  59.                         {
  60.                                 fx=1;
  61.                         }
  62.                 }
  63.                 TIM_SetCompare1(TIM3, ti*10);//設置TIMx捕獲比較2寄存器值        
  64.     TIM_SetCompare2(TIM3, ti*10);
  65.                 TIM_SetCompare3(TIM3, ti*10);
  66.                 TIM_SetCompare4(TIM3, ti*10);
  67.         }
  68. }








  69. void xiugai(void){
  70.         if((jia1==1||jia==1)&&mode==0){
  71.                 dengji++;
  72.                 printf("%d",dengji);
  73.                 jia=0;
  74.                 jia1=0;
  75.         }
  76.         if((jian1||jian==1)&&mode==0){
  77.                 if(dengji>0){               
  78.                 dengji--;
  79.                         printf("%d",dengji);
  80.                 jian=0;
  81.                         jian1=0;
  82.                 }
  83.         }
  84.         
  85. switch(mode){
  86.                         case 1:
  87.                 OLED_DISPLAY_8x16(0,3*8,'_');
  88.                 OLED_DISPLAY_8x16(0,4*8,'_');
  89.                 OLED_DISPLAY_8x16(0,5*8,'_');
  90.                 OLED_DISPLAY_8x16(0,6*8,'_');
  91.                 a=ryear/1000+48;
  92.                 OLED_DISPLAY_8x16(0,3*8,a);
  93.                 a=ryear%1000/100+48;
  94.                 OLED_DISPLAY_8x16(0,4*8,a);
  95.                 a=ryear%100/10+48;
  96.                 OLED_DISPLAY_8x16(0,5*8,a);
  97.                 a=ryear%10+48;
  98.                 OLED_DISPLAY_8x16(0,6*8,a);
  99.                 if(jia==1){
  100.                 ryear++;
  101.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  102.                 jia=0;
  103.                 }
  104.                 if(jian==1){
  105.                 ryear--;
  106.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  107.                 jian=0;
  108.                 }
  109.                         break;
  110.                
  111.                   case 2:
  112.                 OLED_DISPLAY_8x16(0,8*8,'_');        
  113.                 OLED_DISPLAY_8x16(0,9*8,'_');        
  114.                 a=rmon/10+48;
  115.                 OLED_DISPLAY_8x16(0,8*8,a);
  116.                 a=rmon%10+48;
  117.                 OLED_DISPLAY_8x16(0,9*8,a);               
  118.                 if(jia==1){
  119.                 rmon++;
  120.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  121.                 jia=0;
  122.                 }
  123.                 if(jian==1){
  124.                 rmon--;
  125.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  126.                 jian=0;
  127.                 }
  128.                  break;
  129.                
  130.                 case 3:
  131.                 OLED_DISPLAY_8x16(0,11*8,'_');        
  132.                 OLED_DISPLAY_8x16(0,12*8,'_');               
  133.                 a=rday/10+48;
  134.                 OLED_DISPLAY_8x16(0,11*8,a);
  135.                 a=rday%10+48;
  136.                 OLED_DISPLAY_8x16(0,12*8,a);        
  137.                 if(jia==1){
  138.                 rday++;
  139.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  140.                 jia=0;
  141.                 }
  142.                 if(jian==1){
  143.                 rday--;
  144.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  145.                 jian=0;
  146.                 }
  147.                  break;
  148.                
  149.                 case 4:
  150.                 OLED_DISPLAY_8x16(2,4*8,'_');        
  151.                 OLED_DISPLAY_8x16(2,5*8,'_');               
  152.                 a=rhour/10+48;
  153.                 OLED_DISPLAY_8x16(2,4*8,a);
  154.                 a=rhour%10+48;
  155.                 OLED_DISPLAY_8x16(2,5*8,a);
  156.                 if(jia==1){
  157.                 rhour++;
  158.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  159.                 jia=0;
  160.                 }
  161.                 if(jian==1){
  162.                 rhour--;
  163.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  164.                 jian=0;
  165.                 }
  166.                  break;
  167.                
  168.                 case 5:
  169.                 OLED_DISPLAY_8x16(2,7*8,'_');        
  170.                 OLED_DISPLAY_8x16(2,8*8,'_');        
  171.                 a=rmin/10+48;
  172.                 OLED_DISPLAY_8x16(2,7*8,a);
  173.                 a=rmin%10+48;
  174.                 OLED_DISPLAY_8x16(2,8*8,a);
  175.                 if(jia==1){
  176.                 rmin++;
  177.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  178.                 jia=0;
  179.                 }
  180.                 if(jian==1){
  181.                 rmin--;
  182.                 bya=RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
  183.                 jian=0;
  184.                 }
  185.                  break;
  186.                 default:
  187.                         mode=0;        
  188.                
  189.                
  190.                 }
  191. }




  192. void xianshishijian(void){
  193.         
  194.         
  195.         
  196.         //************等級
  197.         OLED_DISPLAY_16x16(6,4*16,14);
  198.         OLED_DISPLAY_16x16(6,5*16,15);
  199.         OLED_DISPLAY_8x16(6,12*8,':');
  200.         a=dengji/10+48;
  201.         OLED_DISPLAY_8x16(6,13*8,a);
  202.         a=dengji%10+48;
  203.         OLED_DISPLAY_8x16(6,14*8,a);
  204.         
  205.         
  206. RTC_Get(); //讀出時間值,同時判斷返回值是不是0,非0時讀取的值是錯誤的。
  207. //                printf("%d-%d-%d %02d:%02d:%02d  ",ryear,rmon,rday,rhour,rmin,rsec);//顯示日期時間
  208. //                printf("%d\r\n",bya);//0為成功
  209.                 //****************年
  210.                 a=ryear/1000+48;
  211.                 OLED_DISPLAY_8x16(0,3*8,a);
  212.                 a=ryear%1000/100+48;
  213.                 OLED_DISPLAY_8x16(0,4*8,a);
  214.                 a=ryear%100/10+48;
  215.                 OLED_DISPLAY_8x16(0,5*8,a);
  216.                 a=ryear%10+48;
  217.                 OLED_DISPLAY_8x16(0,6*8,a);
  218.                 OLED_DISPLAY_8x16(0,7*8,'/');
  219.                 //****************月
  220.                 a=rmon/10+48;
  221.                 OLED_DISPLAY_8x16(0,8*8,a);
  222.                 a=rmon%10+48;
  223.                 OLED_DISPLAY_8x16(0,9*8,a);
  224.                 OLED_DISPLAY_8x16(0,10*8,'/');
  225.                 //****************日
  226.                 a=rday/10+48;
  227.                 OLED_DISPLAY_8x16(0,11*8,a);
  228.                 a=rday%10+48;
  229.                 OLED_DISPLAY_8x16(0,12*8,a);
  230.                 //**************時
  231.                 a=rhour/10+48;
  232.                 OLED_DISPLAY_8x16(2,4*8,a);
  233.                 a=rhour%10+48;
  234.                 OLED_DISPLAY_8x16(2,5*8,a);
  235.                 OLED_DISPLAY_8x16(2,6*8,':');
  236.                 //***************分
  237.                 a=rmin/10+48;
  238.                 OLED_DISPLAY_8x16(2,7*8,a);
  239.                 a=rmin%10+48;
  240.                 OLED_DISPLAY_8x16(2,8*8,a);
  241.                 OLED_DISPLAY_8x16(2,9*8,':');
  242.                 //***************秒
  243.                 a=rsec/10+48;
  244.                 OLED_DISPLAY_8x16(2,10*8,a);
  245.                 a=rsec%10+48;
  246.                 OLED_DISPLAY_8x16(2,11*8,a);

  247. }







  248. /*

  249. 【變量定義】
  250. u32     a; //定義32位無符號變量a
  251. u16     a; //定義16位無符號變量a
  252. u8     a; //定義8位無符號變量a
  253. vu32     a; //定義易變的32位無符號變量a
  254. vu16     a; //定義易變的 16位無符號變量a
  255. vu8     a; //定義易變的 8位無符號變量a
  256. uc32     a; //定義只讀的32位無符號變量a
  257. uc16     a; //定義只讀 的16位無符號變量a
  258. uc8     a; //定義只讀 的8位無符號變量a



  259. delay_us(1); //延時1微秒
  260. delay_ms(1); //延時1毫秒
  261. delay_s(1); //延時1秒



  262. */
復制代碼

所有資料51hei提供下載:
課題設計.7z (213.65 KB, 下載次數: 63)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91亚洲精品在线观看 | 成人午夜在线视频 | 久久久91精品国产一区二区三区 | 久久精品一| 综合另类 | 一级毛片在线看 | 国产1区 | 久久久久国产 | 亚洲日本欧美日韩高观看 | 国产精品片aa在线观看 | 国产不卡一区 | 亚洲精品一区二区三区蜜桃久 | 中文字幕日韩欧美一区二区三区 | 国产一二区视频 | 成人av一区二区三区 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 久久小视频 | 久久久久久久久国产精品 | 国产欧美精品一区二区色综合 | 久久99精品久久久水蜜桃 | 男女啪啪高潮无遮挡免费动态 | 欧日韩在线观看 | 91精品国产综合久久久久久首页 | 欧美日韩视频 | 日韩欧美三区 | 久久精品小短片 | а√中文在线8 | 在线日韩视频 | 久在线观看 | 色爱区综合 | 亚洲精品黑人 | 亚洲香蕉在线视频 | 成人深夜福利在线观看 | 国产精品婷婷 | 性色视频 | 日韩av免费在线观看 | 日本成年免费网站 | 亚洲最大福利网 | 免费看片国产 | 国产一级片 | 一区精品在线观看 |