51单片机C语言编的密码锁程序.docVIP

  • 19
  • 0
  • 约5.63千字
  • 约 5页
  • 2016-09-19 发布于重庆
  • 举报
51单片机C语言编的密码锁程序

求51单片机C语言编的密码锁程序 悬赏分:100 - 解决时间:2008-6-22 10:16 要求: 能输入密码与制定密码箱同时亮起一个灯表示密码正确,否则蜂鸣器报警表示密码错误,能设定新的密码,可扩展将密码写入flash,掉电不丢失 提问者: 匿名 最佳答案 #include reg52.h #define uint unsigned int #define uchar unsigned char #define BIN(a,b,c,d,e,f,g,h) ((a7)+(b6)+(c5)+(d4)+(e3)+(f2)+(g1)+(h0)) //下面的code表示数组存放在ROM中,因为这个数组的值不需要改写 uchar code KeyCode[16]={15,14,12,8,30,28,24,16,60,56,48,32,120,112,96,64};//值为m*(n+1)的乘积,用于Key() uchar dis[6]; msdelay(uint x)//延时子函数 {uchar j; while(x--) {for(j=0;j125;j++){;} } } //键盘子程序一,键盘值与数组值对比得到 uchar Key(void) {uchar temp,m,n,i,j,matrix,k; P1=0xF0; /*行线电平为高,列线为低*/ temp=P10xf0; if (temp==0xf0) return(16); /*行仍为高,无按健,退出*/ else msdelay(10); for(i=1;i16;i=i*2) {m=i; for(j=1;j16;j=j*2) {n=(~j)0x0f; P1=(m4)|n; /*m为P1的行值由i循环得到,n为列值,由j循环并取反得到*/ temp=P10xf0; if (!temp) {do{temp=P10xf0;}while(!temp); matrix=m*(n+1);/*为避免乘积重复,n+1*/ for(k=0;k16;k++){if (matrix==KeyCode[k]) return(k);} //KeyCode:见前 return(16); } //if loop }//j loop }//i loop }//Key end //用Switch...case语句得到键盘值*/ uchar Key1(void) {uchar temp,m,n,i,j,matrix; P1=0xF0; /*行线电平为高,列线为低*/ temp=P10xf0; if (temp==0xf0) return(16); /*行仍为高,无按健,退出*/ else msdelay(10); for(i=1;i16;i=i*2) {m=i; for(j=1;j16;j=j*2) {n=(~j)0x0f; P1=(m4)|n;/*m为P1的行值由i循环得到,n为列值,由j循环并取反得到*/ temp=P10xf0; if (!temp) {do{temp=P10xf0;}while(!temp); matrix=m*(n+1); switch(matrix) //此方法的基本思路: {case 15:return(1); break; //由循环得到的m,n值赋于P1端口实现逐个键扫描 case 14:return(2); break; //同时由m,n+1的值相乘得到对应键点de的积 case 12:return(3);

文档评论(0)

1亿VIP精品文档

相关文档