PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 03-03-2009, 08:26 PM   #1
mtuankct
Đệ tử 6 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 125
:
Theo mình để thực hiện việc này thì bạn dùng một Timer để thực hiện vòng quét Led (hàm hiển thị của bạn) còn trong chuơng trình main bạn sẽ thay đổi dữ liệu để hiện được các số khác nhau.
mtuankct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-08-2009, 04:03 PM   #2
sonduy1
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 20
:
vậy cho mình hỏi dùng timer ?

Trích:
Nguyên văn bởi mtuankct View Post
Theo mình để thực hiện việc này thì bạn dùng một Timer để thực hiện vòng quét Led (hàm hiển thị của bạn) còn trong chuơng trình main bạn sẽ thay đổi dữ liệu để hiện được các số khác nhau.
#INT_TIMER1
void ngat_timer1()
{ int time=0,count=0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(24280);
time++; // timer 1 tràn sau ==> 500 000 us = 0.5s
if(time==2) // 2* 500 000 =1s
{
count++;
if(count==1)
{ portb=bang_ma[n1];
output_low(pin_d0);//mo transistor để led7 doan dc cap 5v(dung anot chung)
}
if(count==2)
{ portb=bang_ma[n2];
output_low(pin_d1);//tuong tu o d0
}
if(count==3)
{ portb=bang_ma[n3];
output_low(pin_d3);//
}
if(count==4)
{ portb=bang_ma[n4];
output_low(pin_d4);//
}
count=0;
}
enable_interrupts(int_timer1);
enable_interrupts(global);
}



bác coi giup sau e thực hiên quét mà kô dc.
sonduy1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-08-2009, 01:51 AM   #3
manhha2799
Đệ tử 5 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 121
:
Send a message via Yahoo to manhha2799
Trích:
Nguyên văn bởi sonduy1 View Post
#INT_TIMER1
void ngat_timer1()
{ int time=0,count=0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(24280);
time++; // timer 1 tràn sau ==> 500 000 us = 0.5s
if(time==2) // 2* 500 000 =1s
{
count++;
if(count==1)
{ portb=bang_ma[n1];
output_low(pin_d0);//mo transistor để led7 doan dc cap 5v(dung anot chung)
}
if(count==2)
{ portb=bang_ma[n2];
output_low(pin_d1);//tuong tu o d0
}
if(count==3)
{ portb=bang_ma[n3];
output_low(pin_d3);//
}
if(count==4)
{ portb=bang_ma[n4];
output_low(pin_d4);//
}
count=0;
}
enable_interrupts(int_timer1);
enable_interrupts(global);
}



bác coi giup sau e thực hiên quét mà kô dc.
Mấy dòng này bạn phải để trong void main() chứ:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(24280);
enable_interrupts(int_timer1);
enable_interrupts(global);

Với lại hàm if, mấy cái sau bạn thử dùng else if xem sao. Chứ if thì có thể nó sẽ bị lẫn lộn đó.
__________________
Bảng ledsigns chất lượng cao...
http://www.ledviet.info - manhha2700@yahoo.com
Đt:0949299699
manhha2799 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-08-2009, 05:36 PM   #4
sonduy1
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 20
:
The còn cái này thì sao ha bác

#include <16f877a.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#byte trisb=0x86
#byte portb=0x06
#BYTE TRISD=0X88
#BYTE PORTD=0X08


char bang_ma[10]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
char n1,n2,n3,n4;
char sec,min,h;
#int_timer1
void ngat_TMR1()
{ int time,count;
set_timer1(15535);
time++;
if(time=1);//dc 1/2s
//<thuc hien cong viec>
{
count++;
if(count==1)
{ portb=bang_ma[N1];
OUTPUT_LOW(PIN_A0);
DELAY_MS(10);
OUTPUT_HIGH(PIN_A0);
}
if(count==2)
{ portb=bang_ma[N2];
OUTPUT_LOW(PIN_A1);
DELAY_MS(10);

}
if(count==3)
{ portD=bang_ma[N3];

OUTPUT_LOW(PIN_A4);DELAY_MS(10);
OUTPUT_HIGH(PIN_A4);
}
if(count==4)
{ portD=bang_ma[N4];
OUTPUT_LOW(PIN_A5);
DELAY_MS(10);
}
count==0;



}
time==0;
}
//SU DUNG HAM NGAT TIMER0 DE HIEN THI
#INT_TIMER0

void ngat_timer0()
{ int dem;

set_timer0(15536); //mac dinh gia tri ban dau cho TMR0

dem++;
if(dem==20) //20*50000=1s
{ dem=0;
sec++;
}
if(sec==60)
{ sec=0;
min++;
}
if(min==60)
{ min=0;
h++;
}
if(h==24)
{ h=0;
}
}





VOID main(void)
{ trisb=0x00;
portb=0xff;
TRISD=0X00;
PORTD=0XFF;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(15536);
enable_interrupts(int_timer0);
enable_interrupts(global);


setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(15535);
enable_interrupts(int_timer1);
enable_interrupts(global);
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
while(1)
{

NGAT_TIMER0();
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
ngat_TMR1();

}
}



//em cho 4 led 7 doạn 2 led gắn với 2 port.và nguon` vao` 5v nối tới con trans tới các chân a0-a3.
sonduy1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-08-2009, 11:56 AM   #5
sonduy1
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 20
:
gởi a !

Trích:
Nguyên văn bởi manhha2799 View Post
Mấy dòng này bạn phải để trong void main() chứ:
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(24280);
enable_interrupts(int_timer1);
enable_interrupts(global);

Với lại hàm if, mấy cái sau bạn thử dùng else if xem sao. Chứ if thì có thể nó sẽ bị lẫn lộn đó.
vậy nếu dùng else thì dùng sáo cho đúng hả a. !!...
sonduy1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:29 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam