3.6 Kết luận
u đi m:
Ư ể
Dễ dàng thay đổi mật mã thường xun để đảm bảo an tồn. Có thể cho phép người khác vào nhà bằng cách chia sẻ mật khẩu.
Nhược đi m:ể
Giá thành cao hơn gấp nhiều lần so với khóa truyền thống. Phải nhập chính xác cả dãy mật khẩu.
Hướng phát tri n:ể
3.7 Code
#include <htc.h> #include <string.h>
/********Khai bao chan giao tiep LCD************/
#define RS P30 #define E P31 #define lcd_data P2
// khai bao chan giao tiep phim #define row0
#define row1 #define row2 #define row3
#define col0 P14 //cot
#define col1 P15 #define col2 P16 #define col3 P17 #define led P34 #define bat 0 #define tat 1
void delay_ms(unsigned int t); void mocua();
void dongcua(); void mocua() {
int sv;
for(sv=0;sv<50;sv++) //dong cua {
led=1; delay_ms(1); led=0; delay_ms(19); } } void dongcua() { int sv;
for(sv=0;sv<50;sv++) //mo cua { led=1; delay_ms(2); led=0; delay_ms(18); } }
unsigned char matkhau[]="060920"; // mk mac dinh /************************************/
unsigned char code ma_nut[16]={ //Khai bao mang ten nut nhan
'+','9','8','7', '-','6','5','4', '*','3','2','1', '/','=','0','c' };
unsigned char check_but(){ //Kiem tra nut nhan
if(!col0 || !col1 || !col2 || !col3 )return 1; return 0;
}
void scan_row(unsigned char r) //Quet hang { row0=row1=row2=row3=1; if(r==0)row0=0; else if(r==1)row1=0; else if(r==2)row2=0; else if(r==3)row3=0; }
unsigned char check_col() //Kiem tra cot { unsigned char c=0; if(!col0)c=1; else if(!col1)c=2; else if(!col2)c=3; else if(!col3)c=4; return c; }
unsigned char get_key(){ //Ham tra ve vi tri nut 1-16, =0 la khong nhan unsigned char row,col;
if(check_but()) { delay_ms(1); if(check_but()){ for(row=0;row<4;row++){ 33
scan_row(row); //Quet hang
col=check_col(); //Lay vi tri cot
if(col>0)return ((row*4)+col); //Tra ve vi tri nut duoc nhan }
} }
return 0; //Khong co nut nao duoc nhan hoac nut da nhan }
void delay_us(unsigned int t){ while(t--);
}
void delay_ms(unsigned int t){ unsigned int i,j;
for(i=0;i<t;i++) for(j=0;j<125;j++); }
/**************Ctr giao tiep LCD 16x2 8bit**********************/
/ ham cho phep LCD void LCD_en(void){ E=1; delay_us(3); E=0; delay_us(50); }
/ ham gui du lieu : thanh GHI RS =1 void LCD_data(unsigned char data) {
RS=1;
lcd_data=data; LCD_en(); }
/ ham gui lenh: thanh ghi RS =0 void LCD_cmd(unsigned char cmd) {
RS=0;
lcd_data=cmd; LCD_en();
}
/ HAM gui chuoi string len LCD void LCD_puts(char *str)
{
unsigned char i=0; while(str[i]!=0) { LCD_data(str[i]); i++; } }
//ham xoa man hinh : lenh 0x01 , can 1.57ms de hoan thanh void LCD_clear()
{ LCD_cmd(0x01); delay_ms(2); } 3 5
void LCD_init() {
LCD_cmd(0x38); // che do 8bit 2 dong LCD_cmd(0x0c); //bat hien thi, tat con tro
LCD_cmd(0x80); // di chuyen con tro ve dau dong 1 LCD_clear(); // xoa tat ca noi dung tren lcd
}
/ ham dua con tro to vi tri x , y, 0x80 dua toi hang thu 1,0xc0 dua toi hang thu 2 ..can it nhat 37us
void LCD_Gotoxy(unsigned char x, unsigned char y){ unsigned char address; if(!y)address=(0x80+x);// else address=(0xc0+x); // delay_us(1000); LCD_cmd(address); delay_us(50); } /******************Ctr
chinh**************************/ void main(){ unsigned char pass[6];
unsigned char i=0;
LCD_init();//Khoi tao LCD delay_ms(500);
LCD_puts("KHOA SO DIEN TU");//Gui chuoi len LCD delay_ms(500);
LCD_Gotoxy(0,1); LCD_puts("DT2 HVKT MAT MA");
LCD_clear();//Xoa man hinh while(1)
{ unsigned char x; lamlai:
LCD_Gotoxy(0,0);//Tro toi vi tri
LCD_puts("VUI LONG NHAP MK"); LCD_Gotoxy(0,1);
x=get_key();
if(x > 0) //co nhan phim {
pass[i]=ma_nut[x-1];
LCD_data(ma_nut[x-1]); //Xuat ra vi tri nut nhan i=i++; } if(i>5) { i=0; if(strcmp(matkhau,pass) == 0) { LCD_clear(); LCD_Gotoxy(0,0); LCD_puts("CHINH XAC^^"); delay_ms(500); LCD_Gotoxy(0,1);
LCD_puts("MO CUA SAU 5S"); delay_ms(5000);
led = bat;// bat dong co mo cua len LCD_clear(); goto lamlai; } else { led = tat; LCD_clear(); LCD_Gotoxy(0,0);
LCD_puts("BAN NHAP SAI MK"); LCD_Gotoxy(0,1);
LCD_puts("K MO DUOC CUA"); delay_ms(2000);
LCD_clear(); goto lamlai;} }} }
TÀI LI U THAM KH OỆ Ả
Trong báo cáo này, chúng em đã sử dụng các tài liệu tham khảo:
[1]. “Họ Vi Điều Khiển 8051” của thầy Tống Văn On và Hồng Đức Hải
[2]. “Giáo Trình Vi Điều Khiển” Của GV Phạm Hùng Kim Khánh