#include
void delay(unsigned int j ) //基本延时单位1ms
{
unsigned int e,f;
for(e=0;e
for(f=0;f<=148;f++);
}
int saomiao() //扫描键盘,输出一个数,0~9代表数;10~14代表符号
{
int i,j,y=20,x=20,temp;
int aa[]={0xf7,0xfb,0xfd,0xfe,};
dingwei:
P3=0xf0;
if(P3!=0xf0) //判断是否有输入
{
delay(5); //防抖(延时10ms)
if(P3!=0xf0) //再判断是否有输入
{
for(i=0; i<4; i++)
{
P3 = aa[i];
temp=0x10;
for(j=0; j<4; j++)
{
if(!(P3 & temp)) //判断P1口高4位某一行为低电平
x=i+j*4; //使用中间变量X
temp <<= 1;
}
}
}
}
if(P3!=0xf0) goto dingwei; //判断是否松开按键,防止重复赋值
switch(x)
{
case 0:y=10; break;
case 1:y=0; break;
case 2:y=15; break;
case 4:y=1; break;
case 5:y=2; break;
case 6:y=3; break;
case 8:y=4; break;
case 9:y=5; break;
case 10:y=6;break;
case 12:y=7;break;
case 13:y=8; break;
case 14:y=9;break;
default:y=20;
}
return y; //返回键盘编号,方便起见:数为0~9;
} //符号 复位 = 分别为10,15。
void xianshii(long a) //显示部分
{
long b=0;
int i=0,j=0;
int shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
b=a;
while(b=(b/10)) j++; //判断输入数的个数
for(i=0;i
{
P2=0x01<
P0=shuzi[a%10];
a=a/10;
delay(3);
P0=0Xff;
}
}
/*******主函数***********/
main()
{
int y=0;
long k=0;
long mima=20130521; //初始化密码
while(1)
{
y=saomiao(); //扫描输入数字
if(y<=9) //数字
{
k=k*10+y;
}
if(y==15) //输入=,确认密码
{
if(k==mima)
P1=0x00; //密码正确灯就亮
else
{
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………