功能:
输入正确密码并按下回车键的时候,进入倒计时时间调节,通过长短按键快速设置倒计时时间,再次按下回车键进入启动炸弹模式,并根据倒计时间蜂鸣器和小灯按一定规律鸣叫和闪烁
Mode:炸弹爆炸前模式
ESC 键:取消倒计时 / // 回车键,模式加一
Mode = 0: 模式零:数字按键按下,则刷新密码数组,将密码在数码管上显示
Mode = 1:模式一:向上键倒计时设定值递增 / 模式一: 向下键倒计时设定值递减
Mode = 2:模式二:启动炸弹,秒表开始倒计时 我的矩阵按键具有长短按键,长按可以连续触发按键函数 秒表倒计时启动:
flag_Mode :炸弹倒计时模式
flag_Mode = 0: 炸弹倒计未启动
flag_Mode = 1: 炸弹倒计时第一阶段,15s前每5s蜂鸣器响,LED小灯闪烁
flag_Mode = 2: 炸弹倒计时第二阶段, 5s前每1s蜂鸣器响,LED小灯闪烁
flag_Mode = 3: 炸弹倒计时第三阶段, 0s前每 0.5s蜂鸣器响,LED小灯闪烁
flag_Mode = 4: 炸弹倒计时第四阶段,倒计时结束蜂鸣器持续响,LED小灯全部点亮
作者;邵达豪(郎朗郎朗郎) B站:爱看日出的小王子
#include <REGX52.H>
//unsigned long time; // 测试用
/***************** CS *****************************/
//unsigned char CSBomb_Code[7] = {7,3,5,5,6,0,8}; // CS安包密码
bit flag_Buzzer = 0;
unsigned char Code = 0; // 密码
unsigned char Mode = 0; // 输入模式0:输入密码,模式1:调节倒计时时间。模式二:开启倒计时
unsigned char CodeArray[7]; // 存放密码数组
unsigned char CodeIndex = 0; // 密码数组引脚
unsigned char flag_Mode = 0; // 炸弹倒计时第一阶段,15s前每5s蜂鸣器响,最后5s每1s蜂鸣器响
/*********************** 蜂鸣器 ********************/
sbit Buzzer = P2^5;
bit Bomb_Countend = 0; // 炸弹倒计时结束
bit enBuzz = 0; // 蜂鸣器使能标志
bit flag_1s = 0; // 1s定时标志
bit flag_5s = 0; // 5s定时标志
bit flag_10ms = 0; // 10ms定时标志
bit flag_100ms = 0; // 100ms定时标志
bit flag_500ms = 0; // 500ms定时标志
bit Buzzer_Key250ms = 0; // 按键提示音(250ms)
bit Buzzer_Bomb200ms = 0; // 炸弹倒计时最后5s , 每1s持续响200ms,如 5,4,3,2,1 执行此段代码
bit Buzzer_Bomb800ms = 0; // 炸弹倒计时结束10s之前, 每1s持续响500ms,如 40,39,38 ~ 12,11,10 执行此段代码
/******************* 定时器0 ***********************/
unsigned char T0RH; // T0 重载值高点平
unsigned char T0RL; // T0 重载值低电平
/******************* 定时器1 **********************/
unsigned char T1RH = 0 ; // T1 重载值的高字节
unsigned char T1RL = 0 ; // T1 重载值的低字节
/********************* 矩阵按键部分 ***************************/
//unsigned char KeyNumber = 0; // 矩阵按键值(测试用)
sbit KEY_OUT_1 = P1^7; // 矩阵按键1(第一行)
sbit KEY_OUT_2 = P1^6; // 矩阵按键2(第二行)
sbit KEY_OUT_3 = P1^5; // 矩阵按键3(第三行)
sbit KEY_OUT_4 = P1^4; // 矩阵按键4(第四行)
sbit KEY_IN_1 = P1^3; // 矩阵按键1(第一列)
sbit KEY_IN_2 = P1^2; // 矩阵按键2(第二列)
sbit KEY_IN_3 = P1^1; // 矩阵按键3(第三列)
sbit KEY_IN_4 = P1^0; // 矩阵按键4(第四列)
/* 矩阵按键编码到标准键盘键码的映射表 */
unsigned char code MatrixKeyCodeMap[4][4] = {
{0x31, 0x32, 0x33, 0x26 }, // 数字键 1,数字键 2,数字键 3,向上键 ,
{0x34, 0x35, 0x36, 0x25 }, // 数字键 4,数字键 5,数字键 6,向左键 ,
{0x37, 0x38, 0x39, 0x28 }, // 数字键 7,数字键 8,数字键 9,向下键 ,
{0x30, 0x1B, 0x0D, 0x27 } // 数字键 0, ESC键 ,回车键 ,向右键 ,
};
/* 矩阵按键当前状态 */
unsigned char MatrixKeyState[4][4] = { // 矩阵按键当前状态
{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}
};
/* 每个按键按下的持续时间, 单位 ms */
unsigned long pdata MatrixKeyDownTime[4][4] =
{
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}
};
/********************** 数码管部分 *************************/
/* U5:74HC138译码器 */
sbit ADDR2 = P2^4; // C
sbit ADDR1 = P2^3; // B
sbit ADDR0 = P2^2; // A
unsigned char LedBuff[8] = { // 数码管缓冲区确保启动时都不亮
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* 数码管断码(共阴极) */
unsigned char code NiXie_Tube_Yin[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00 //??
};
/*************** 秒表倒计时部分 ****************/
bit StopwatchRuning = 0; // 秒表运行标志
bit StopwatchRefresh