Đếmsốnútnhấn0-9hiệnthịlênLED7
Ngu
ồ
n:biendt.biz
Trong phần này tôi sẽ giới thiệu với các pác số cách đếmsốnútnhấnhiệnthị
lên LED7 seg.Ta dùng 1 nútnhấn để nhận tín hiệu vào chíp. Đây là cách nhận
tín hiệu từ bên ngoài vào cho chíp xử lý. Phương pháp này người ta còn gọi là
đọc bàn phím nhưng ở đây là chúng ta đọc 1 phím. Nhấn 1 lần thìhiệnthịsố 1,
nhấn tiếp hiệnthịsố 2 cứ thế cho tới đến lần nhấnthì nó lại quay trở
về ban
đầu. Sau đây là cách làm như sau:
1: Lắp mạch.
Cái này mình phải dùng loại LED 7seg thì mới hiệnthị được các số lần nhấn
được. Hiện nay trên thị trường có 2 loại LED7 thanh đó là loại chung Anot và
chung catot
Cấu tạo của nó gồm 8 con LED đơn được ghép với nhau 1 là chung Anot 2 là
chung Catot. có 1 chân cấp nguồn và 8 chân đầu ra hay vào tùy theo Anot
chung hay catot chung.Và trên đó nó được chia ra làm 7 thanh tương ứng với
A,B,C,D,E,F,G và 1 chân dot.
Ở bài này tôi dùng LED7 thanh có Anot chung! Cái này các pác có thể ra chợ
mua được giá chỉ có 2k 1 con thôi!
Sơ đồ nguyên lý mạch hiện thị!
Ở đây tôi dùng Port 2 để điều khiển hiệnthị ra LED7 thanh. Và cách mắc này là
bơm dòng cho vi điều khiển. Dùng 5 V cấp cho LED7 và CY8C29466.(Hình vẽ)
Các pác dùng cổng Port 2(Không cứ gì Port này đâulà theo ý tôi) lắp lần lượt từ
Port2_0 đến Port2_7 vào các thanh A,B,C,D,E,F,G,Dot. Nhớ là phải lắp đúng thứ
tự không có là không hiệnthị được đâu.Đầu chung Anot là được nối với 5V
thông qua điện trở 470 hay 1k
Thêm 1 nútnhấn để đếmsốnút nhấn. Nútnhấn này
được mắc vào Port1_7 một
đầu được nối với chân P1_7 và một đầu được nối với GND. Trong phần mền tôi
không dùng phần mền để chống nhiễu cho nó mà ở phần cứng tôi dùng để
chống nhiễu cho tụ ở đây tôi dùng thêm 1 con tụ được mắc song song với nút
nhấn. Tác dụng của tụ này là:
+ Khi chưa nhấnnútthì tụ được nạp điện sau khi nhấnnútthì lúc này tụ sẽ
phóng điện t
ừ dương sang âm làm cho tín hiệu lâu về 0 hơn (Trễ cứng)
+ Khi nhấnnút do các tiếp điểm cơ khí nên tín hiệu đó không về không được mà
nó còn có 1 số xung điện . Tu điện dùng để giảm nhiễu đó. Nếu không muốn
phần cứng để khử nhiễu mà ta dùng phần mền khử nhiễu cũng được! (Khử bằng
phần mền các pác có thể tự tìm hiểu)
Thêm 1 mạch reset cho mạch: dùng 1 công t
ắc nối với chân số 19 thông qua 1
điện trở 1k và đầu kia được nối lên VCC. Khi công tắc được đóng thì mạch sẽ tự
reset. Còn 1 tụ được nối giữa chân 28 và 14 là để không bị mất nguồn trong
khoảng thời gian ngắn
2 : Nguyên lý hoạt động
Psoc có sự hơi khác so với các dòng vi sử lý khác nó ta phải tự thiết lập phần
cứng khi đưa ra các tín hiệu ra Port. Đối với bài tập này các pác phải thiết lập
chế độ như sau:
Port2 : Tất cả để ở chế độ Strong
Port1_7 " Để ở chế độ Pull up
Nguyên lý ở đây là nguyên lý đếmsốnút nhấn. Nên thế ta phải cho nó 1 biến
đếm để khi ta nhấnthì nó sẽ t
ăng thêm 1 (Tăng 2 ,3 cũng được) và biến đếm
đó phải được lưu trong Ram. Khi biến đếm đó được nhấn 9 lần thì phải trở về 0
do ở đây ta dùng 1 LED7 nên nó chỉ hiệnthị được từ 0-9 thôi. Dùng 1 hàm để
hiện thị các giá trị này. Nói chung cái này khá đơn giản nên các pác có thể tham
khảo chương trình là hiểu ngay ấy mà!
3 : Chương trình:
//
// Demso lan nutnhanhienthi tren LED7 vach tu 0-9
// Viet boi : Biendt - biendt.biendt@gmail.com
// Dung P2 lam hienthiso ra LED
// Dung P1-7 lam nut nhan!
// C main line
//
#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
unsigned char dem=0;
unsigned char LED_code[8]={0xfe,0xfd,0xfd,0xf7,0xef,0xbf,0xdf,0x7f};
/* Khai bao ham tao thoi gian tre*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j
}
/*Ham tra lai unsigned*/
unsigned char dongcongtac()
{
if((PRT1DR&0x04)==0)
{
delay(10);
while((PRT1DR&0x04)==0)
{
;
}
dem++;
if(dem==10)
{dem=0;}
}
return dem;
}
/* Khai bao ham hienthiso tu 0-9*/
void hienthi(unsigned char x)
{
switch(x)
{
case 0:{PRT2DR=0xff;PRT2DR=0x40;break;} //so 0
case 1:{PRT2DR=0xff;PRT2DR=0xf9;break;}
case 2:{PRT2DR=0xff;PRT2DR=0x24;break;}
case 3:{PRT2DR=0xff;PRT2DR=0x30;break;}
case 4:{PRT2DR=0xff;PRT2DR=0x99;break;}
case 5:{PRT2DR=0xff;PRT2DR=0x12;break;}
case 6:{PRT2DR=0xff;PRT2DR=0x82;break;}
case 7:{PRT2DR=0xff;PRT2DR=0x78;break;}
case 8:{PRT2DR=0xff;PRT2DR=0x80;break;}
case 9:{PRT2DR=0xff;PRT2DR=0x10;break;}// So 9
}
}
/* Ham chinh*/
void main()
{
unsigned char m;
PRT1DR=0xff;
PRT2DR=0xff;
while(1)
{
m=dongcongtac();
hienthi(m);
}
}
. Đếm số nút nhấn 0-9 hiện thị lên LED 7
Ngu
ồ
n:biendt.biz
Trong phần này tôi sẽ giới thiệu với các pác số cách đếm số nút nhấn hiện thị
lên LED 7. có là không hiện thị được đâu.Đầu chung Anot là được nối với 5V
thông qua điện trở 470 hay 1k
Thêm 1 nút nhấn để đếm số nút nhấn. Nút nhấn này
được