📄 复件 dingshi.c
字号:
/*********************************************************************/
//
// 自动报警控制
// ancleyan 2007.04.17
/*********************************************************************/
//使用AT89C51单片机,12MHZ晶振,P1口输入,P2口作列扫描,p3数据输出,用共阳LED数码管
#include"reg51.h"
#define char unsigned char
//
sbit qqqq=P0^7;
sbit aa=P1^0; sbit bb=P1^1; sbit cc=P1^2;
sbit dd=P1^3; sbit ee=P1^4; sbit ff=P1^5;
sbit gg=P1^6; sbit hh=P1^7;
//char data time[6]={0x00,0x00,0x00,0x00,0x00,0x00};
char data time[6]={0x01,0x02,0x01,0x02,0x03,0x09};
char code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */
//char code dis_7[10]={0xC0,0xF9,0xA4,0x99,0xB0,0x82,0xF8,0x80,0x99,0xff};
/* 共阳LED段码表 "0" "1" "2" "8" "3" "5" "6" "7" "4" "9" "不亮" */
//char code scan_con[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 列扫描控制字
//char code scan_con[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 列扫描控制字
char code scan_con[7]={0x00,0x01,0x02,0x04,0x08,0x10,0x20}; // 列扫描控制字
//char data keytmp[6]={0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
//char data stime[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
//char data key[8]={0x01,0x02,0x03,0x06,0x06,0x05,0x04,0x03};
//char m;
char t; //供键盘输入的数存储进数组时使用
//*******1毫秒延时程序********
delay1ms(int t1)
{
char i,j;
for(i=0;i<t1;i++)
for(j=0;j<120;j++)
{;}
}
//*******10毫秒延时程序********
delay10ms(int t2)
{
int i,j;
for(i=0;i<t2;i++)
for(j=0;j<1200;j++)
{;}
}
//*****确定键功能函数*********//
void okset(void)
{
if(time[5]==0)
{ //1111
if(time[4]==0)
{ //2222
if(time[3]==0)
{ //3333
if(time[2]==0)
{ //4444
if(time[1]==0)
{ //5555
if(time[0]==0)
{}//alarm();}
else
{time[0]--;time[1]=9;time[2]=5;time[3]=9;time[4]=5;time[5]=9;}
} //5555
else
{time[1]--;time[2]=5;time[3]=9;time[4]=5;time[5]=9;}
} //4444
else
{time[2]--;time[3]=9;time[4]=5;time[5]=9;}
} //3333
else
{time[3]--;time[4]=5;time[5]=9;}
} //2222
else
{time[4]--;time[5]=9;}
} //1111
else
{time[5]--;delay10ms(100);}
}
//**********功能函数15***********************************
void fun15(void)
{
delay1ms(200);
gg=0;
}
//**********功能函数14***********************************
void fun14(void)
{
delay1ms(200);
ff=0;
}
//**********功能函数13***********************************
void fun13(void)
{
delay1ms(200);
okset();
ee=0;
}
//**********功能函数12***********************************
void fun12(void)
{
delay1ms(200);
dd=0;
}
//**********功能函数11***********************************
void fun11(void)
{
delay1ms(200);
cc=0;
}
//**********功能函数10***********************************
void fun10(void)
{
//password();
okset();
}
//**********功能函数9***********************************
char fun9(void)
{
delay1ms(200); //防止由于按键未放开 输入一串数字 可以加入一个while(P3!=0xfe)语句 直到放开键才动作
time[t]=9; //用delay1ms(100)语句可以按住键之后重复输入
aa=0;
return t++;
}
//**********功能函数8***********************************
char fun8(void)
{
delay1ms(200);
time[t]=8;
bb=0; //函数功能测试灯
return t++;
}
//**********功能函数7***********************************
char fun7(void)
{
delay1ms(200);
time[t]=7;
cc=0;
return t++;
}
//**********功能函数6***********************************
char fun6(void)
{
delay1ms(200);
time[t]=6;
dd=0;
return t++;
}
//**********功能函数5***********************************
char fun5(void)
{
delay1ms(200);
time[t]=5;
ee=0;
return t++;
}
//**********功能函数4***********************************
char fun4(void)
{
delay1ms(200);
time[t]=4;
ff=0;
return t++;
}
//**********功能函数3***********************************
char fun3(void)
{
delay1ms(200);
time[t]=3;
gg=0;
return t++;
}
//**********功能函数2***********************************
char fun2(void)
{
delay1ms(200);
time[t]=2;
return t++;
}
//**********功能函数1***********************************
char fun1(void)
{
delay1ms(200);
time[t]=0x01;
hh=0;
return t++;
}
//**********功能函数0***********************************
char fun0(void)
{
delay1ms(200);
time[t]=0;
aa=0;
return t++;
}
//**************************
//对型如7 8 9 a 的键盘的驱动
// 4 5 6 b
// 1 2 3 c
// d 0 e f
/**********按键驱动函数***********/
void keyscan(void)
{
P3=0xfe; //将第一行置零
if(P3!=0xfe)
{ if(P3==0x7e) fun10(); //一行四列
else if(P3==0xbe) fun9(); //一行三列
else if(P3==0xde) fun8(); //一行二列
else if(P3==0xee) fun7(); //一行一列
}
else
{
P3=0xfd; //将第二行置零
if(P3!=0xfd)
{ if(P3==0x7d) fun11(); //二行四列
else if(P3==0xbd) fun6(); //二行三列
else if(P3==0xdd) fun5(); //二行二列
else if(P3==0xed) fun4(); //二行一列
}
else
{
P3=0xfb; //将第三行置零
if(P3!=0xfb)
{ if(P3==0x7b) fun12();//三行四列
else if(P3==0xbb) fun3();//三行三列
else if(P3==0xdb) fun2();//三行二列
else if(P3==0xeb) fun1();//三行一列
}
else
{
P3=0xf7;
{ if(P3!=0xf7)
{
if(P3==0x77) fun13();//四行四列
else if(P3==0xb7) fun14();//四行三列
else if(P3==0xd7) fun0();//四行二列
else if(P3==0xe7) fun15();//四行一列
}
}
}
}
}
}
//*****数码管显示函数 将数据及显示控制码输出*********//
void scan_7(void)
{
char j;
for(j=0;j<6;j++)
//{
P2=scan_con[4]; //dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
P0=dis_7[time[4]]; //scan_con[7]={0x01,0x02,0x04,0x08,0x10,0x200x00,}; // 列扫描控制字
delay1ms(1);
P2=scan_con[3];
P0=dis_7[time[3]];
//delay1ms(4); //time[6]={0x00,0x00,0x00,0x00,0x00,0x00};
// }
}
//*******复位功能键函数*********
void reset() interrupt 0
{
char t3;
for(t3=0;t3<6;t3++)
{time[t3]=0x00;}
P2=scan_con[6];
}
//*******主程序*******//
void main()
{
while(1)
{ scan_7();
okset();
//delay1ms(1);
//keyscan();
//if(t==6){}
//delay1ms(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -