緣由六位密碼器設計連接LED-嵌入式-CSDN問答
矩陣51單片機密碼鎖,回復:https://bbs.csdn.net/topics/392713242_智者知已應修善業的博客-CSDN博客
#include "REG52.h"
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64,15,56}; //共陰0~F消隱減號
unsigned char code ShaoMiaoZhi[]={1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127,238,237,235,231,222,221,219,215,190,189,187,183,126,125,123,119};//獨立按鍵16陣
sbit ledL=P3^6;
sbit ledH=P3^7;
unsigned char JianPanShaoMiao(/*獨立按鍵16掃描法*/)
{ unsigned char H=15,L=240,Ys=0,zhi=H+L;P1=zhi;if(P1!=zhi){while(++Ys);zhi=P1;while(zhi==P1);return zhi;}else P1=zhi+1;if(P1!=~zhi){while(++Ys);zhi=P1;while(zhi==P1);return zhi;}return (H+L);
}
void smxs(unsigned char mz, unsigned char w)
{unsigned char Xd=0;P0=~0;P0=~smgduan[mz];P2=w;while(++Xd);
}
void main()
{unsigned char sm=0,jz=0, mm[12]={0,0,0,0,0,0,1,2,3,4,5,6},w=0;while(1){smxs(mm[0],1);smxs(mm[1],2);smxs(mm[2],4);smxs(mm[3],8);smxs(mm[4],16);smxs(mm[5],32);sm=JianPanShaoMiao();jz=0;if(sm<255){while(sm!=ShaoMiaoZhi[jz])++jz;if(w<6){mm[w]=jz;++w;}else{if(jz>9)while(mm[w]==mm[w+6])--w;if(w==255){w=ledL=0;ledH=1;}else {ledL=1;w=ledH=0;}}}}
}