Tải bản đầy đủ (.pdf) (6 trang)

Điều khiển IO bằng sáng từng LED

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (209.79 KB, 6 trang )

Điều khiển IO bằng sáng từng LED
Ngu
ồn : biendt.biz 
Đầu tiên để học được vi điều khiển là ta lập trình bật tắt đèn LED cho nó quen
với với việc vào ra của vi điều khiển ở đây tôi dùng con CY8C29466 không có các
pác dùng con khác cũng được. Và bài này tôi đã test trên thực tế nên chương
trình ko có gì sai. Con này thì ta không mô phỏng được vì Protues không hỗ trợ.


1: Lắp mạch.
Ở đây tôi dùng điều khiển bằng cách bơm dòng cho vi điều khiển. Dùng nguồn
5V cấp cho cả dãy LED và CY8C29466.
Các pác gắn lần lượt 8 con LED vào lần lượt các chân Port0 tương ứng của vi
điều khiển . Chiều của catot của LED được nối vào với vi điều khiển qua các con
trở 330 còn đầu Anot của 8 con LED được nối chung với nhau lên 5V (Hình vẽ).
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.
Sơ đồ mạch:


2 : Nguyên lý hoạt động
Do nguồn 5V được nối từ LED vào vi điều khiển nên khi chân vi điều khiển 0V thì
đèn sáng còn 5V thì đèn tắt. Psoc có cái hơi khác do các dòng vi điều khiển khác
là nó không bộ dao động ngoài mà nó tích hợp bên trong nên việc lắp mạch và
điều khiển rất rễ ràng với tốc độ xử lý lên tới 48MHZ.
3: Lập trình
Đầu tiên các pác chọn drives cho Port0 là tất cả ở chế độ strong vì ở mức này ta
có thể điều khiển được cả 2 khóa c


ủa trong con vi điều khiển (Để bit được làm
cái này các pác vào phần mềm của nó chỉnh lại là ok ở đây tôi không hướng dẫn
cái này)
Để điều khiển 1 LED ta chỉ cần cho chân đó xuống 0V. Tắt đi cho nó mức 5V.
Ví dụ : Tôi muốn cho Port0_0 sáng thì tôi tính mã như sau: Tôi cho Port0_0 ở
mức 0 còn các Port0_1 đến Port0_7 bằng 1. Tính mã nhị phân 4 bít ta được :
0xfe. Tắt nó đi thì ngược lai!

Chương trình:
//----------------------------------------------------------------------------
// Bai tap nhay den LED linh tinh tu 1 den 8 va nguoc lai...
// 8 LED duoc noi voi Port 0 (Lan luot)
// Viet boi biendt
//
// ngoai cac kieu nhay nay cac ban co the dieu chinh thanh kieu den theo y thich
//----------------------------------------------------------------------------

#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#include "ports.h"
// Dinh ngia cac gia tri
#define LED0 0xfe // LED 0
#define LED1 0xfd
#define LED2 0xfb
#define LED3 0xf7
#define LED4 0xef
#define LED5 0xdf
#define LED6 0xbf
#define LED7 0x7f // LED 7


//Nhap 1 mang li tu gom cac den LED tu 0 - 7
unsigned char LED_code[8]={LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7};
// Ham tao thoi gian tre//
void delay()
{
unsigned int i;
for(i=0;i<10000;i++)
for(i=0;i<20000;i++);


}

void hienthi(unsigned char x) // ham tuy chon hien thi
{
switch(x)
{
case 0:{PRT0DR=0xff;PRT0DR=LED0;break;} //LED1
case 1:{PRT0DR=0xff;PRT0DR=LED1;break;}
case 2:{PRT0DR=0xff;PRT0DR=LED2;break;}
case 3:{PRT0DR=0xff;PRT0DR=LED3;break;}
case 4:{PRT0DR=0xff;PRT0DR=LED4;break;}
case 5:{PRT0DR=0xff;PRT0DR=LED5;break;}
case 6:{PRT0DR=0xff;PRT0DR=LED6;break;}
case 7:{PRT0DR=0xff;PRT0DR=LED7;break;} //LED8
}
}

void main()
{
PRT0DR=1; //Khoi tao

while(1)
{
unsigned char m; // nhap nhay kieu 1
for(m=0;m<8;m++) //Lap 8 lan
{
hienthi(m);
delay();
}
if(m==8) //nhap nhay kieu 2
{
unsigned char n;
for(m=0;m<8;m++)

×