Hiện tại em đang làm đồ án môn học I. Đề tài em làm là mạch khóa số điện tử (có thể thay đổi mã số) hiển thị lên LCD 16x2. Sau thời gian tìm tòi cũng đó có được một cái mạch mô phỏng hoàn chỉnh. Nhưng hiện tại mạch của em sử dụng 2 bàn phím độc lập: 1 bàn phím dạng ma trận chứa 0 tới 9. và một bàn phím sử dụng nút bấm đến thẳng chân của vi điều khiển chứa các phím chắc năng: nhập pass, đổi pass, enter, clear và exit. em thấy tổng số nút bấm vẫn nhỏ hơn 16 nên em muốn chuyển hết các phím chúng năng lên chung với phím số để có thể dùng 1 keypad cho tiện. Bác nào giúp em với ... em đã thử nhiều kiểu mà keil c đều báo lỗi.
Đây là code của em:
#include<reg52.h>
#include<stdio.h>
//------ Khai Bao LCD------//
sbit RS=P3^1;
sbit EN=P3^0;
sbit l=P2^6;
//------ Khai Bao Nut Nhan ------//
sbit exit=P2^7;
sbit pass=P3^4;
sbit change=P3^5;
sbit clear=P3^6;
sbit ok=P3^7;
//------ Khai Bao Dong Co ------//
sbit ledbao=P2^4;
//------ Khai Bao Ma Tran Phim ------//
sbit cot1=P1^4;
sbit cot2=P1^5;
sbit cot3=P1^6;
sbit cot4=P1^7;
//------- Khai Bao Bien ------//
char k=0,k1=0,k2=0,k4=0;
char number=0,number2,number1=1234;
char gt=0,gt1=0,y;
//*********************************//
void delay( int t)
{
int i;
for(i = 0;i<=t;i++);
}
//*********************************//
void loa(void)
{
char j;
for(j=0;j<=50;j++)
{
l=0;
delay(20);
l=1;
delay(20);
}
}
//*********************************//
void ghilenh(unsigned char a)
{
delay(100);
RS=0;
EN=1;
P0=a;
EN=0;
}
//*********************************//
void ghidulieu(unsigned char b)
{
delay(100);
RS=1;
EN=1;
P0=b;
EN=0;
}
//*********************************//
void chuoi( char *s) //ghi ky tu len LCD
{
while(*s)
{
ghidulieu(*s);
s++;
}
}
//*********************************//
void dieukhien(void) //khoi tao LCD
{
ghilenh(0x01);
ghilenh(0x38);
ghilenh(0x0C);
}
//*********************************//
void quetphim(void) //ham quet phim
{
char x;
unsigned char H[4]={0xFE,0xFD,0xFB,0xF7};
for(x=0;x<4;x++)
{
P1=H[x];
if(cot1==0)
{
loa();
while(cot1==0);
gt=x;
k++;
}
if(cot2==0)
{
loa();
while(cot2==0);
gt=4+x;
k++;
}
if(cot3==0)
{
loa();
while(cot3==0);
gt=8+x;
k++;
}
}
}
//*********************************//
void commond(void) //xu ly gia tri nhap vao
{
quetphim();
if(gt!=gt1)
number =( number* 10 + gt); //chuoi password
gt1=gt;
if(k==0)
{
ghilenh(0xC0);
chuoi(" ");
}
else
{
ghilenh(0xC0+k);
chuoi("*");
}
if(k>9) //cho phep password khong qua 9 so
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" LOI ");
delay(30000);
delay(30000);
ghilenh(0x01);
}
if(clear==0) //clear xoa man hinh
{
loa();
number=0;
k=0;
ghilenh(0x01);
}
}
//*********************************//
void nhappassword(void) //Nhap Password
{
k1++;
ghilenh(0x01);
number=0;
k=k4=0;
while(k1==1)
{
if( exit==0)
{
loa();
while(exit==0);
k1=0;
}
ghilenh(0x80);
chuoi(" PASSWORD : ");
commond();
if(ok==0)
{
loa();
while(ok==0);
if((number==number1))
{
ghilenh(0x01);
ghilenh(0x80);
chuoi(" CHAP NHAN ");
{
ledbao=0;
delay(30000);
delay(30000);
ledbao=1;
}
k=k1=0;
ghilenh(0x01);
}
else
{
if((number!=number1)&&(k4==0))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi("PASS SAI LAN 1");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==1))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi("PASS SAI LAN 2");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==2))
{
while(k4==2)
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" QUA 3 LAN ");
loa();
number=0;
if(exit==0)
{
loa();
k=k1=k4=0;
ghilenh(0x01);
}
}
}
}
}
}
}
}
}
//*********************************//
void doipassword(void) //Ham Doi password
{
k2++;
ghilenh(0x01);
number=0;
gt=gt1=0;
k=k1=k4=0;
number=0;
while(k2==1)
{
if( exit==0)
{
loa();
while(exit==0);
k2 =0;
}
ghilenh(0x80);
chuoi(" PASS CU : ");
commond();
if(ok==0)
{
loa();
while(ok==0);
if((number!=number1)&&(k4==0))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi(" PASS SAI LAN 1 ");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==1))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi(" PASS SAI LAN 2 ");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==2))
{
while(k4==2)
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" QUA 3 LAN ");
loa();
if(exit==0)
{
loa();
while(exit==0);
number=0;
k2=k4=0;
}
}
}
}
}
if((number==number1))
{
number=0;
k=k4=0;
ghilenh(0x01);
while(k4==0)
{
ghilenh(0x80);
chuoi(" PASS MOI: ");
commond();
number2=number;
if((ok==0)&&(k4==0))
{
loa();
while(ok==0);
k4++;
k=0;
ghilenh(0x01);
number=0;
while(k4==1)
{
ghilenh(0x80);
chuoi(" NHAP LAI PASS:");
commond();
if(ok==0)
{
loa();
while(ok==0);;
if(number==number2)
{
number1=number;
k1=k2=0;
k4=2;
number=0;
ghilenh(0x01);
ghilenh(0x80);
chuoi(" DOI THANH CONG");
delay(30000);
delay(30000);
ghilenh(0x01);
}
}
}
}
}
}
}
}
}
//*********************************//
void dieukien()
{
if((pass==0)&&(change==1))
{
loa();
nhappassword();
}
else
if((pass==1)&&(change==0))
{
loa();
doipassword();
}
}
//*********************************//
Đây là code của em:
#include<reg52.h>
#include<stdio.h>
//------ Khai Bao LCD------//
sbit RS=P3^1;
sbit EN=P3^0;
sbit l=P2^6;
//------ Khai Bao Nut Nhan ------//
sbit exit=P2^7;
sbit pass=P3^4;
sbit change=P3^5;
sbit clear=P3^6;
sbit ok=P3^7;
//------ Khai Bao Dong Co ------//
sbit ledbao=P2^4;
//------ Khai Bao Ma Tran Phim ------//
sbit cot1=P1^4;
sbit cot2=P1^5;
sbit cot3=P1^6;
sbit cot4=P1^7;
//------- Khai Bao Bien ------//
char k=0,k1=0,k2=0,k4=0;
char number=0,number2,number1=1234;
char gt=0,gt1=0,y;
//*********************************//
void delay( int t)
{
int i;
for(i = 0;i<=t;i++);
}
//*********************************//
void loa(void)
{
char j;
for(j=0;j<=50;j++)
{
l=0;
delay(20);
l=1;
delay(20);
}
}
//*********************************//
void ghilenh(unsigned char a)
{
delay(100);
RS=0;
EN=1;
P0=a;
EN=0;
}
//*********************************//
void ghidulieu(unsigned char b)
{
delay(100);
RS=1;
EN=1;
P0=b;
EN=0;
}
//*********************************//
void chuoi( char *s) //ghi ky tu len LCD
{
while(*s)
{
ghidulieu(*s);
s++;
}
}
//*********************************//
void dieukhien(void) //khoi tao LCD
{
ghilenh(0x01);
ghilenh(0x38);
ghilenh(0x0C);
}
//*********************************//
void quetphim(void) //ham quet phim
{
char x;
unsigned char H[4]={0xFE,0xFD,0xFB,0xF7};
for(x=0;x<4;x++)
{
P1=H[x];
if(cot1==0)
{
loa();
while(cot1==0);
gt=x;
k++;
}
if(cot2==0)
{
loa();
while(cot2==0);
gt=4+x;
k++;
}
if(cot3==0)
{
loa();
while(cot3==0);
gt=8+x;
k++;
}
}
}
//*********************************//
void commond(void) //xu ly gia tri nhap vao
{
quetphim();
if(gt!=gt1)
number =( number* 10 + gt); //chuoi password
gt1=gt;
if(k==0)
{
ghilenh(0xC0);
chuoi(" ");
}
else
{
ghilenh(0xC0+k);
chuoi("*");
}
if(k>9) //cho phep password khong qua 9 so
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" LOI ");
delay(30000);
delay(30000);
ghilenh(0x01);
}
if(clear==0) //clear xoa man hinh
{
loa();
number=0;
k=0;
ghilenh(0x01);
}
}
//*********************************//
void nhappassword(void) //Nhap Password
{
k1++;
ghilenh(0x01);
number=0;
k=k4=0;
while(k1==1)
{
if( exit==0)
{
loa();
while(exit==0);
k1=0;
}
ghilenh(0x80);
chuoi(" PASSWORD : ");
commond();
if(ok==0)
{
loa();
while(ok==0);
if((number==number1))
{
ghilenh(0x01);
ghilenh(0x80);
chuoi(" CHAP NHAN ");
{
ledbao=0;
delay(30000);
delay(30000);
ledbao=1;
}
k=k1=0;
ghilenh(0x01);
}
else
{
if((number!=number1)&&(k4==0))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi("PASS SAI LAN 1");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==1))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi("PASS SAI LAN 2");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==2))
{
while(k4==2)
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" QUA 3 LAN ");
loa();
number=0;
if(exit==0)
{
loa();
k=k1=k4=0;
ghilenh(0x01);
}
}
}
}
}
}
}
}
}
//*********************************//
void doipassword(void) //Ham Doi password
{
k2++;
ghilenh(0x01);
number=0;
gt=gt1=0;
k=k1=k4=0;
number=0;
while(k2==1)
{
if( exit==0)
{
loa();
while(exit==0);
k2 =0;
}
ghilenh(0x80);
chuoi(" PASS CU : ");
commond();
if(ok==0)
{
loa();
while(ok==0);
if((number!=number1)&&(k4==0))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi(" PASS SAI LAN 1 ");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==1))
{
number=0;
k=0;
k4++;
ghilenh(0x80);
chuoi(" PASS SAI LAN 2 ");
ghilenh(0xC0);
chuoi(" ");
delay(30000);
delay(30000);
}
else
{
if((number!=number1)&&(k4==2))
{
while(k4==2)
{
k=0;
ghilenh(0x80);
chuoi(" ");
ghilenh(0xC0);
chuoi(" QUA 3 LAN ");
loa();
if(exit==0)
{
loa();
while(exit==0);
number=0;
k2=k4=0;
}
}
}
}
}
if((number==number1))
{
number=0;
k=k4=0;
ghilenh(0x01);
while(k4==0)
{
ghilenh(0x80);
chuoi(" PASS MOI: ");
commond();
number2=number;
if((ok==0)&&(k4==0))
{
loa();
while(ok==0);
k4++;
k=0;
ghilenh(0x01);
number=0;
while(k4==1)
{
ghilenh(0x80);
chuoi(" NHAP LAI PASS:");
commond();
if(ok==0)
{
loa();
while(ok==0);;
if(number==number2)
{
number1=number;
k1=k2=0;
k4=2;
number=0;
ghilenh(0x01);
ghilenh(0x80);
chuoi(" DOI THANH CONG");
delay(30000);
delay(30000);
ghilenh(0x01);
}
}
}
}
}
}
}
}
}
//*********************************//
void dieukien()
{
if((pass==0)&&(change==1))
{
loa();
nhappassword();
}
else
if((pass==1)&&(change==0))
{
loa();
doipassword();
}
}
//*********************************//
Comment