要求是这三个,我不懂代码为何这样写。求详细解释。。。
1、能用1602或数码管显示阵列键盘键码,能用按键控制8个LED灯亮灭、蜂鸣器开关。
2、时钟、流水灯,LED调光等自定功能
3、自定要求设计一个简易频率计
#include"delay.h"
#include"sys.h"
#include"usart.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_Configura
tion(); //
设置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() ;
}
}
0