stm32单片机学习笔记(自用)

这篇博客详细介绍了STM32单片机在输入时间及定时器方面的应用,包括计数模式(向上、向下、中央对齐)和捕获比较模式。捕获比较模式涵盖输入捕获、PWM输入、强制输出、比较输出、PWM及单脉冲模式。此外,还讨论了编码器模式和从模式的各种工作模式,如复位、门控、触发和外部时钟模式。最后提到了定时器的主模式及其内部和外部时钟选项。
摘要由CSDN通过智能技术生成

输入时间+定时器

计数模式
(向上计数,向下计数,中央对齐计数)

捕获比较模式
(捕获)
1、输入捕获模式
2、PWM输入模式
(比较)
1、强制输出模式
2、比较输出模式
3、PWM模式
4、单脉冲模式

编码器模式

从模式
1、复位模式
2、门控模式
3、触发模式
4、外部时钟模式+触发模式

主模式
时钟:
1、内部时钟
2、外部时钟1
3、外部时钟2

#include "Systerm.h"

/*****************秒表变量*********************/
u32 Stopwatch_counting = 0;
u8 Stopwatch_Start = 0;
u8 Stopwatch_RST = 0;
/*****************录音变量*********************/
u16 Luyin_counting = 0;
u8 Luyin_start = 0;
/*****************放音变量*********************/
u16 Fangyin_counting = 0;
u8 Fangyin_start = 0;
/*****************时间调整*********************/
int        clock_gengxin[7] = {
   0,1,1};
int main(void)
{
          
         static uint8 key=0;       
         static uint8 key1=0;       
         static uint8 key2=0;       
                
         static uint8 key3=0;       
//         static uint8 key4=0;       
         
         
         
         uint8 Add1=0,Add2=0,Add3=0,Add4=0,Add5=0,Add6 = 0;
         uint8 ADd1=0;
       
         /*****************录放音变量*********************/
         u32 Stopwatch_count[2];
         u16 Luyin_count[2] = {
   0,0};
         u16 Fangyin_count[2] = {
   0,0};
         uint8 i;
         /*****************闹钟变量*********************/
         uint16 Shi = 0,Shi1 = 0,Shi2 = 0,Fen = 0,Fen1 = 0,Fen2 = 0,Miao = 0,Miao1 = 0,Miao2 = 0;
         uint16 Alarm_clock_S1 = 0,Alarm_clock_F1 = 0,Alarm_clock_M1 = 0;
         uint16 Alarm_clock_S2 = 0,Alarm_clock_F2 = 0,Alarm_clock_M2 = 0;
         uint16 Alarm_clock_S3 = 0,Alarm_clock_F3 = 0,Alarm_clock_M3 = 0;
       
          /*****************时间调整变量*********************/
         u32 t = 2000;
         
         Systerm_Init();
               
          
         
        while(1)
        {
   
       
                BLED_ON;                        //蓝色指示灯
               
                DHT12_READ();                        //读取温湿度
                Ds1302_Readtime();        //读取时间
               
                key = KEY_Scan();                //读取按键值
               
                /*************************************************一界面------------------秒表*********************************************/
                if(key == 1)                                                                                                        //一界面------------------秒表
                {
   
                                if(!Add1)
                                {
   
                                                OLED_Clear();                //先清屏
                                          Add1 = 1;
                                }
                                Add2 = 0;
                                Add3 = 0;
                                Add4 = 0;
                                Add5 = 0;
                                Add6 = 0;
                       
                                for(i=10;i<12;i++)
                                {
   
                                        OLED_P16x16Ch(46+(i-10)*16,0,i);//一界面显示“秒表”
                                }
                                for(i=14;i<16;i++)
                                {
   
                                        OLED_P16x8Ch(1+(i-14)*16,3,i);//一界面显示“计时”
                                }
                                if(KEY2==1)
                                {
   
                                                Stopwatch_Start = 1;
                                }
                                else if(KEY3==1)
                                {
   
                                                Stopwatch_Start = 0;
                                }
                                else if(WK_UP==1)
                                {
   
                                                Stopwatch_counting = 0;
                                                Stopwatch_Start = 0;
                                }
                               
                                Stopwatch_count[1] = Stopwatch_counting/10;
                                Stopwatch_count[0] = Stopwatch_counting%10;
                               
                                OLED_F6x8Str1(84,6,Stopwatch_count[1],4);
                                OLED_P6x8Str(108,6,".");
                                OLED_F6x8Str1(114,6,Stopwatch_count[0],1);
                }
                /*************************************************二界面------------------录放音*********************************************/
                else if(key == 2)                                                                                //二界面------------------录放音
                {
   
                                if(!Add2)
                                {
   
                                                OLED_Clear();                //先清屏
                                          Add2 = 1;
                                }
                                Add1 = 0;
                                Add3 = 0;
                                Add4 = 0;
                                Add5 = 0;
                                Add6 = 0;
                               
                                for(i=12;i<15;i++)
                                {
   
                                        OLED_P16x16Ch(38+(i-12)*16,0,i);//二界面显示“录放音”
                                }
                               
                                OLED_P16x16Ch(5,3,12);//二界面显示“录”
                                OLED_P16x16Ch(5+16,3,14);//二界面显示“音”
                                OLED_P16x16Ch(5+32,3,23);//二界面显示“:”
                               
                                OLED_P16x16Ch(5,6,13);//二界面显示“放”
                                OLED_P16x16Ch(5+16,6,14);//二界面显示“音”
                                OLED_P16x16Ch(5+32,6,23);//二界面显示“:”
                                if(Luyin_counting<100)
                                {
   
                                                OLED_F6x8Str1(104,4,Luyin_count[1],2);
                                                OLED_P6x8Str(116,4,".");
                                                OLED_F6x8Str1(122,4,Luyin_count[0],1);
                                               
                                                OLED_F6x8Str1(104,7,Fangyin_count[1],2);
                                                OLED_P6x8Str(116,7,".");
                                                OLED_F6x8Str1(122,7,Fangyin_count[0],1);
                                }
                                /*************************************************录音*********************************************/
                                if(KEY4 == 1)                                                                               
                                {
   
                                               
                                                if(Luyin_counting>100)
                                                {
   
                                                               
                                                                Luyin_start = 0;
                                                                for(i=24;i<29;i++)
                                                                {
   
                                                                        OLED_P16x16Ch(55+(i-24)*16,3,i);//二界面显示“录音超时”
                                                                        ADd1 = 1;
                                                                }
                                                }
                                                else
                                                {
   
                                                                LY_start;
                                                                Luyin_start = 1;
                                                       
                                                                for(i=16;i<18;i++)
                                                                {
   
                                                                        OLED_P16x8Ch(55+(i-16)*16,4,i);//二界面显示“开始”
                                                                }
                                                                Luyin_count[1] = Luyin_counting/10;
                                                                Luyin_count[0] = Luyin_counting%10;
                                                }
                                               
                                }
                                else
                                {
   
                                                                Luyin_counting = 0;
                                                                LY_stop;
                                                                Luyin_start = 0;
                                                                if(ADd1 == 1)
                                                                {
   
                                                                                ADd1 = 0;
                                                                                for(i=55;i<128;i++)
                                                                                {
   
                                                                                        OLED_P6x8Str(i,3," ");
                                                                                        OLED_P6x8Str(i,4," ");
                                                                                }
                                                                }
                                                                for(i=18;i<20;i++)
                                                                {
   
                                                                        OLED_P16x8Ch(55+(i-18)*16,4,i);//二界面显示“结束”
                                                                }
                                }
                                /*************************************************放音*********************************************/
                                if(WK_UP == 1)
                                {
   
                                                BF_start;
                                                Fangyin_start = 1;
                                               
                                                for(i=16;i<18;i++)
                                                {
   
                                                        OLED_P16x8Ch(55+(i-16)*16,7,i);//二界面显示“开始”
                                                }
                                }
                                Fangyin_count[1] = Fangyin_counting/10;
                                Fangyin_count[0] = Fangyin_counting%10;

                                if(Fangyin_counting>Luyin_count[1]*10+Luyin_count[0])
                                {
   
                                                TBF_stop;
                                                Fangyin_start = 0;
                                                Fangyin_counting =0;
                                                for(i=18;i<20;i++)
                                                {
   
                                                        OLED_P16x8Ch(55+(i-18)*16,7,i);//二界面显示“结束”
                                                }
                                }

                }
                /*************************************************三界面------------------闹钟*********************************************/
                else if(key == 3)
                {
   
                                if(!Add3)
                                {
   
                                                OLED_Clear();                //先清屏
                                          Add3 = 1;
                                }
                                Add1 = 0;
                                Add2 = 0;
                                Add4 = 0;
                                Add5 = 0;
                                Add6 = 0;
                               
                                for(i=29;i<31;i++)
                                {
   
                                        OLED_P16x16Ch(46+(i-29)*16,0,i);//三界面显示“闹钟”
                                }

                                key1 = KEY_Scan2();                //读取按键值
               
                                if(key1 == 1)
                                {
   
                                                for(i=23;i<26;i++)
                                                {
   
                                                        OLED_P16x8Ch(5+(i-23)*16,5,i);//三界面显示“定时二”
                                                }
                                                OLED_P16x8Ch(5+3*16,5,29);//三界面显示“:”
                                                for(i=26;i<29;i++)
                                                {
   
                                                        OLED_P16x8Ch(5+(i-26)*16,7,i);//三界面显示“定时三”
                                                }
                                                OLED_P16x8Ch(5+3*16,5,29);//三界面显示“:”
                                                OLED_F6x8Str1(67,5,Shi1,2);                //shi
                                                OLED_P6x8Str(82,5,":");
                                                OLED_F6x8Str1(91,5,Fen1,2);                //shi
                                                OLED_P6x8Str(106,5,":");
                                                OLED_F6x8Str1(115,5,Miao1,2);                //shi
                                               
                                                OLED_P16x8Ch(5+3*16,7,29);//三界面显示“:”
                                                OLED_F6x8Str1(67,7,Shi2,2);                //shi
                                                OLED_P6x8Str(82,7,":");
                                                OLED_F6x8Str1(91,7,Fen2,2);                //shi
                                                OLED_P6x8Str(106,7,":");
                                                OLED_F6x8Str1(115,7,Miao2,2);                //shi
                                                /***************************上面是把上一界面消掉*********************************/
                                                for(i=20;i<23;i++)
                                                {
   
                                                        OLED_P16x8Ch1(5+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值