Key đơn thật ra là tập hợp các nút ấn, nhưng có cách nối đặc biệt để đảm bảo giá trị khởi điểm của các chân ra ở trạng thái bình thường sẽ luôn ở mức cao, khi nút ấn đượg ấn xuống thì sẽ xuống trạng thái thấp.
Mục đích của bài này là khi ấn một nút ấn thì có một LED tương ứng sáng trong 1s rồi tắt trong khi các LED khác vẫn không sáng. Để làm được yêu cầu này trước hết ta cần khai báo tên LED, tên Key tương ứng với các chân trên vi điều khiển( Lưu ý nếu các bạn dùng P0 làm chân I/O thì cần lắp thêm điện trở kéo nhé) như sau:
sbit LED0=P3^0; // Dinh nghia cho chan p3.0 co ten la LED0
sbit LED1=P3^1;
sbit LED2=P3^2;
sbit LED3=P3^3;
sbit KEY0=P2^0; // Dinh nghia cho chan p2.0 co ten la KEY0
sbit KEY1=P2^1;
sbit KEY2=P2^2;
sbit KEY3=P2^3;
Hàm delay() được phát biểu như sau:
void delay(unsigned int time )
{
unsigned int i;
unsigned int j;
for( i=0; i<time; i++ )
for( j=0; j<1275; j++ );
}
Mình xin khái quát qua thuật toán như sau:
+ Khai báo trạng thái ban đầu là key và led đều mức cao, tức chưa ấn key và LED đều tắt.
+ Khi ấn Key0 thì LED0 sáng trong 1s rồi tắt, 3 đèn còn lại đều tắt.
+ Khi ấn Key1 thì LED1 sáng trong 1s rồi tắt, 3 đèn còn lại đều tắt.
+ Khi ấn Key2 thì LED2 sáng trong 1s rồi tắt, 3 đèn còn lại đều tắt.
+ Khi ấn Key3 thì LED3 sáng trong 1s rồi tắt, 3 đèn còn lại đều tắt.
Để làm được yêu cầu như trên, chúng ta cần sử dụng hàm if(điều kiện)...Mình xin trích qua code main như sau:
void main(void)
{
KEY0=KEY1=KEY2=KEY3=1; // GIA TRI BAN DAU CUA KEY DON
LED0=LED1=LED2=LED3=1; // TAT CA LED DEU TAT
while (1)
{
if(KEY0==0) // KEY0 duoc nhan
{
LED0=0; // LED0 sang
delay(1000); // 1s delay
LED0=1=LED1=LED2=LED3; // tat ca led cung tat
}
if(KEY1==0)
{
LED1=0;
delay(1000);
LED1=LED2=LED3=LED0=1;
}
if(KEY2==0)
{
LED2=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY3==0)
{
LED3=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
}
}
Mạch nguyên lý như hình sau:
+ ấn 1 key thì một led sáng trong 1s.
+ ấn 2 key thì 2 led sáng trong 1s.
+ ấn 3 key thì 3 led sáng trong 1s.
+ ấn 4 key thì 4 led sáng trong 1s.
#include <reg51.h>
#include <stdio.h>
sbit LED0=P3^0;
sbit LED1=P3^1;
sbit LED2=P3^2;
sbit LED3=P3^3;
sbit KEY0=P2^0;
sbit KEY1=P2^1;
sbit KEY2=P2^2;
sbit KEY3=P2^3;
void delay(unsigned int time )
{
unsigned int i;
unsigned int j;
for( i=0; i<time; i++ )
for( j=0; j<1275; j++ );
}
void main(void)
{
KEY0=KEY1=KEY2=KEY3=1; // GIA TRI BAN DAU CUA KEY DON
LED0=LED1=LED2=LED3=1; // TAT CA LED DEU TAT
while (1)
{
if(KEY0==0)
{
LED0=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY1==0)
{
LED1=0;
delay(1000);
LED1=LED2=LED3=LED0=1;
}
if(KEY2==0)
{
LED2=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY3==0)
{
LED3=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY0=KEY1==0)
{
LED0=LED1=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY2=KEY1==0)
{
LED2=LED1=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY2=KEY3==0)
{
LED2=LED3=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY0=KEY1=KEY2=0)
{
LED0=LED1=LED2=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
if(KEY3=KEY1=KEY2=0)
{
LED1=LED2=LED3=0;
delay(1000);
LED0=LED1=LED2=LED3=1;
}
}
}
Bài tiếp theo mình xin giới thiệu với các bạn về KEYPAD MATRIX, đây là một dạng nâng cao của KEY đơn, keypad matrix có rất nhiều ứng dụng trong thực tế, ví dụ như mạch khóa điện tử, máy tính mini, .....
Rất mong được các bạn ủng hộ!
Không có nhận xét nào:
Đăng nhận xét