51单片机C4炸弹代码

功能:

输入正确密码并按下回车键的时候,进入倒计时时间调节,通过长短按键快速设置倒计时时间,再次按下回车键进入启动炸弹模式,并根据倒计时间蜂鸣器和小灯按一定规律鸣叫和闪烁

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值