微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求解析-时钟、流水灯,LED调光等自定功能的代码注释

求解析-时钟、流水灯,LED调光等自定功能的代码注释

时间:10-02 整理:3721RD 点击:
要求是这三个,我不懂代码为何这样写。求详细解释。
1、能用1602或数码管显示阵列键盘键码,能用按键控制8个LED灯亮灭、蜂鸣器开关。
2、时钟、流水灯,LED调光等自定功能
3、自定要求设计一个简易频率计

#include"stm32f10x.h"

#include"delay.h"

#include"sys.h"

#include"usart.h"

#include "display.h"

#include "lcd.h"

#include "led.h"

#include "catch.h"

#include "key.h"

#include "beep.h"

#include "rtc.h"

#include"pwm.h"

#include "24cxx.h"

#include "myiic.h"

extern unsigned char digit[] ;

u8 key;

u16 LED = 0xffff  ; //控制LED灯的亮和灭

u16 ZKB1 = 3000 ;

int main(void)         

{        

        u8 mode = 1 ;                 

        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    uart_init(9600);         //串口初始化为9600         

        delay_init();                     //延时函数初始化

        TIM4_Cap_Init(0XFFFF,72-1);        //以1Mhz的频率计数

        TIM2_PWM_Init(7119,0) ;        //设置周期           72KHZ

        AT24CXX_Init();  //        24C02初始化

        LED_Init();    //LED灯的初始化

        LcdInit() ; //LCD1602的初始化

        KeyInit() ; //按键的初始化

        BeepInit() ; //蜂鸣器的初始化

        RTC_Init();                                  //RTC初始化

          while(1)

        {               

                if(mode==1)

                {

                        LcdWrite(0,0x01);//清零,指针指到屏幕左上角

                        Display_menu1() ; //显示菜单 1

                        TIM_Cmd(TIM4,DISABLE);         //使能定时器4

                        while(1)

                        {

                                key = KeyScan()         ;

                                if(key==3)

                                {

                                        LED = ~LED ;  

                                        Lcd_Write_Char(2,5,digit[key]) ;               

                                }

                                if(key==4)

                                {

                                        BEEP = 0 ;           //蜂鸣器响200ms

                                        delay_ms(200) ;

                                        BEEP = 1 ;

                                        Lcd_Write_Char(2,5,digit[key]) ;               

                                }

                                LedDisplay(LED) ;


                                delay_ms(100) ;

                                if(key==1)

                                {

                                        mode = 2 ;

                                        TIM_Cmd(TIM4,ENABLE );         //使能定时器4

                                        break;

                                }

                        }

                }

//*****************************************************8

        if(mode==2)

                {

                        LcdWrite(0,0x01);//清零,指针指到屏幕左上角

                        Display_menu2() ;

                        TIM_Cmd(TIM4,DISABLE);         //使能定时器4

                        while(1)

                        {

                                key = KeyScan()         ;

                                Display_Time() ; //RTC时间的显示                                

                                delay_ms(100) ;

                                if(key==1)

                                {

                                        mode = 3 ;

                                        TIM_Cmd(TIM4,ENABLE );         //使能定时器4

                                        break;

                                }

                        }

                }

//*****************************************************8

        if(mode==3)

                {

                        LcdWrite(0,0x01);//清零,指针指到屏幕左上角

                        Display_menu3() ;

                        TIM_Cmd(TIM4,ENABLE);         //使能定时器4

                        while(1)

                        {

                                key = KeyScan()         ;

                                Display_Catch() ;

                                delay_ms(50) ;

                                if(key==1)

                                {

                                        mode = 4 ;

                                        TIM_Cmd(TIM4,DISABLE);         //使能定时器4

                                        break;

                                }

                        }

                }

                //*****************************************************8

                if(mode==4)

                {

                        LcdWrite(0,0x01);//清零,指针指到屏幕左上角

                        Display_menu4() ;

                        TIM_Cmd(TIM2,ENABLE);         //使能定时器4

                        while(1)

                        {

                                key = KeyScan()         ;

//                                Display_XZ() ;  //流水灯旋转

                                TIM_SetCompare3(TIM2,ZKB1) ;         //设置占空比        PA2

                                if(key == 3)

                                {

                                        ZKB1 = (ZKB1+500) %7199 ;

                                }

                                if(key == 4)

                                {

                                        if(ZKB1>600) ZKB1 = ZKB1-500;

                                        else ZKB1 = 200 ;

                                }

                                Display_Preserve_Temp() ;

                                if(key==1)

                                {

                                        mode = 5 ;

                                        TIM_Cmd(TIM2,DISABLE);         //使能定时器4

                                        break;

                                }

                        }

                }

                if(mode==5)

                {

                        LcdWrite(0,0x01);//清零,指针指到屏幕左上角

                        Display_menu5() ;

                        TIM_Cmd(TIM4,DISABLE);         //使能定时器4

                        while(1)

                        {

                                key = KeyScan()         ;

                                Display_XZ() ;  //流水灯旋转                                

                                delay_ms(100) ;

                                if(key==1)

                                {

                                        mode = 1 ;

                                        TIM_Cmd(TIM4,ENABLE );         //使能定时器4

                                        break;

                                }

                        }

                }

//               

//                LCD1602_Test() ;


        }

}



十万火急

顶顶顶顶顶顶顶顶顶顶顶顶顶顶

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top