📄 new66.c
字号:
#include<reg52.h>
#include<absacc.h>
//以下8个字节存放8位数码管的段码
int LED_BIT_1;
int LED_BIT_2;
int LED_BIT_3;
int LED_BIT_4;
int LED_BIT_5;
int LED_BIT_6;
int LED_BIT_7;
int LED_BIT_8;
//以下6个字节存放初始密码
int WORD[6] = {1,2,3,4,5,6};
//以下6个字节存放用户输入的6位密码
int KEY[6] = {0};
int CNT_A;
int CNT_B;
int KEY_CNT; //已输出的密码位数
int LINE; //按键行号
int ROW; //按键列号
int VAL; //键值
int FLAG = 1;
sbit P1_0 = P1^0;
sbit P1_7 = P1^7;
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
sbit P2_4 = P2^4;
sbit P2_5 = P2^5;
sbit P2_6 = P2^6;
sbit P2_7 = P2^7;
sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
sbit P3_2 = P3^2;
sbit P3_3 = P3^3;
sbit P3_4 = P3^4;
sbit P3_5 = P3^5;
sbit P3_6 = P3^6;
void FINI()
{
;//Nothing
}
void DLY_S()
{
int i = 0;
for (i=0; i<950; i++)
{
;
}
}
void DLY_L()
{
int i = 0;
int k = 0;
for (i=0; i<1000; i++)
{
for (k=0; k<940; k++)
{
;
}
}
}
//段码,输入密码左移子程序
void SHIFTL()
{
LED_BIT_6 = LED_BIT_5;
LED_BIT_5 = LED_BIT_4;
LED_BIT_4 = LED_BIT_3;
LED_BIT_3 = LED_BIT_2;
LED_BIT_2 = LED_BIT_1;
LED_BIT_1 = 0x40;
KEY[5] = KEY[4];
KEY[4] = KEY[3];
KEY[3] = KEY[2];
KEY[2] = KEY[1];
KEY[1] = KEY[0];
KEY[0] = VAL;
}
//段码,输入密码右移子程序
void SHIFTR()
{
LED_BIT_1 = LED_BIT_2;
LED_BIT_2 = LED_BIT_3;
LED_BIT_3 = LED_BIT_4;
LED_BIT_4 = LED_BIT_5;
LED_BIT_5 = LED_BIT_6;
LED_BIT_6 = 0;
KEY[0] = KEY[1];
KEY[1] = KEY[2];
KEY[2] = KEY[3];
KEY[3] = KEY[4];
KEY[4] = KEY[5];
KEY[5] = 0;
}
void ALARM_1()
{
TR0 = 1;
while (1 == TR0)
{
;
}
}
void ALARM_2()
{
TR0 = 1;
while (1 == TR0)
{
;
}
DLY_L();
}
//以下为数码显示子程序
void DISP()
{
P2_7 = 0;
P0 = LED_BIT_8;
DLY_S();
P2_7 = 1;
P2_6 = 0;
P0 = LED_BIT_7;
DLY_S();
P2_6 = 1;
P2_5 = 0;
P0 = LED_BIT_6;
DLY_S();
P2_5 = 1;
P2_4 = 0;
P0 = LED_BIT_5;
DLY_S();
P2_4 = 1;
P2_3 = 0;
P0 = LED_BIT_4;
DLY_S();
P2_3 = 1;
P2_2 = 0;
P0 = LED_BIT_3;
DLY_S();
P2_2 = 1;
P2_1 = 0;
P0 = LED_BIT_2;
DLY_S();
P2_1 = 1;
P2_0 = 0;
P0 = LED_BIT_1;
DLY_S();
P2_0 = 1;
}
//定时器中断服务程序,用于声音报警
void clk()interrupt 1
{
P1_7 = 0;
TH0 = (65536-700) / 256;
TL0 = (65536-700) % 256;
CNT_A++;
if (30 == CNT_A)
{
CNT_A = 0;
CNT_B++;
if (20 == CNT_B)
{
CNT_A = 0;
CNT_B = 0;
TR0 = 0;
}
}
}
void CALCU()
{
int i;
VAL = LINE * 3 + ROW;
if (0X0A == VAL)
{
if (0 == KEY_CNT)
{
ALARM_1();
FLAG = 0;
return;
}
SHIFTR();
KEY_CNT--;
while (1)
{
DISP();
if ((0X0F==P3) || (0XF0==P3))
{
return;
}
}
}
if (0X0B == VAL)
{
if (6 == KEY_CNT)
{
for (i=0; i<6; i++)
{
if (KEY[i]!=WORD[i])
{
ALARM_2();
FLAG = 0;
return;
}
}
P1_0 = 0;
DLY_L();
FINI();
FLAG = 0;
return;
}
ALARM_1();
FLAG = 0;
return;
}
KEY_CNT++;
if (7 == KEY_CNT)
{
ALARM_1();
while(1)
{
DISP();
if ((0X0F==P3) || (0XF0==P3))
{
FLAG = 0;
return;
}
}
FLAG = 0;
return;
}
SHIFTL();
while(1)
{
DISP();
if ((0X0F==P3) || (0XF0==P3))
{
return;
}
}
return;
}
void RSCAN()
{
P3 = 0X0F;
if (1 == P3_4)
{
ROW = 0;
CALCU();
}
if (1 == P3_5)
{
ROW = 1;
CALCU();
}
if (1 == P3_6)
{
ROW = 2;
CALCU();
}
}
void LSCAN()
{
P3 = 0XF0;
if (1 == P3_0)
{
DLY_S();
if (1 == P3_0)
{
LINE = 0;
RSCAN();
}
}
if (1 == P3_1)
{
DLY_S();
if (1 == P3_1)
{
LINE = 1;
RSCAN();
}
}
if (1 == P3_2)
{
DLY_S();
if (1 == P3_2)
{
LINE = 2;
RSCAN();
}
}
if (1 == P3_3)
{
DLY_S();
if (1 == P3_3)
{
LINE = 3;
RSCAN();
}
}
}
void main()
{
while (1)
{
FLAG = 1;
CNT_A = 0;
CNT_B = 0;
KEY_CNT = 0;
LINE = 0;
ROW = 0;
VAL = 0;
P1_0 = 1;
LED_BIT_1 = 0;
LED_BIT_2 = 0;
LED_BIT_3 = 0;
LED_BIT_4 = 0;
LED_BIT_5 = 0;
LED_BIT_6 = 0;
LED_BIT_7 = 0X79;
LED_BIT_8 = 0X73;
KEY[0] = 0;
KEY[1] = 0;
KEY[2] = 0;
KEY[3] = 0;
KEY[4] = 0;
KEY[5] = 0;
WORD[0] = 6;
WORD[1] = 5;
WORD[2] = 4;
WORD[3] = 3;
WORD[4] = 2;
WORD[5] = 1;
TMOD = 1;
TH0 = (65536-700) / 256;
TL0 = (65536-700) % 256;
IE = 0X82;
do
{
DISP();
LSCAN();
}while(1 == FLAG);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -