|
Tài trợ cho PIC Vietnam |
Thực hành Bắt đầu làm một robot như thế nào? Mẹo vặt? Kỹ thuật? Công nghệ?... Hãy bắt tay vào việc... |
|
Ðiều Chỉnh | Xếp Bài |
|
11-03-2010, 12:11 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 2
: |
lập trình cho pic bằng ngôn ngữ C
Chào tất cả các bạn.
Mình đang học lập trình pic, mình đang tập viết một chương trình cho led 7 đoạn nhưng chưa chạy được. Mong các bạn giúp đỡ mình nhé. Cảm ơn các bạn nhiều! Đây là chương trình xuất led 7 đoạn ra portb, Các bạn xem có sai chỗ nào sửa dùm mình nhé. #include<16f877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=20000000) #use fast_io(b) const unsigned char ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; int8 donvi; // khai bao kieu du lieu int16 mdonvi; void main() {set_tris_B(0x00); //xuat port b while(1) {for(donvi=0;donvi<10;donvi++); {mdonvi=ma7doan[donvi]; // lay ma led output_B(mdonvi); delay_ms(100); } } } |
11-03-2010, 09:18 AM | #2 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2010
Bài gửi: 15
: |
Trích:
while(1) {for(donvi=0;donvi<10;donvi++); {mdonvi=ma7doan[donvi]; // lay ma led output_B(mdonvi); delay_ms(100); } } trong vòng for nếu bạn đặt dấu ; nghĩa là đoạn chương trình dưới sẽ không thực hiện theo vòng for đó. Cho nên ban bỏ dấu ; đó đi. Ngoài ra chương trình của bạn là dùng led7seg anot chung, catot điều khiển. #include<16f877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=20000000) #use fast_io(b) const unsigned char ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; int8 donvi; // khai bao kieu du lieu int16 mdonvi; void main() {set_tris_B(0x00); //xuat port b while(1) {for(donvi=0;donvi<10;donvi++) {mdonvi=ma7doan[donvi]; // lay ma led output_B(mdonvi); delay_ms(100); } } } |
|
12-03-2010, 10:02 AM | #3 |
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 2
: |
Chào các bạn. Mình gõ lại bài thầy làm nhưng khi cho mô phỏng thì mạch chạy không đúng( bài này dùng quét led). Mong các bạn sửa chỗ sai dùm mình với.
Cảm ơn các bạn nhiều! #include<16f877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=20000000) #use fast_io(b) #use fast_io(d) const unsigned char ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; int8 donvi,dem,chuc,i; // khai bao kieu du lieu unsigned char mdonvi,mchuc; void div_bcd(int tam) {chuc=tam/10; donvi=tam%10; mchuc=ma7doan[chuc]; } void hienthi() {for(i=0;i<250;i++) {output_b(mdonvi); output_d(0xfe); delay_ms(1); output_b(mchuc); output_d(0xfd); delay_ms(1); } } void main() {set_tris_b(0x00); set_tris_d(0x00); while(1) {for(dem=0;dem<100;dem++) {div_bcd(dem); hienthi(); } } } |
12-03-2010, 06:46 PM | #4 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2010
Bài gửi: 15
: |
Trích:
#include <16f877A.h> #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP #use delay(clock=4000000) #use fast_io(b) #use fast_io(d) byte const ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; void hienthi(int so) { int hc,hdv; hc=so/10; hdv=so%10; //hien thi so hang chuc output_low(pin_a4);//cho chan a4 xuong muc thap--->>>qua transitor(PNP)--->>>>tich cuc led hang chuc output_high(pin_a5);//cho chan a4 len muc cao--->>>qua transitor(PNP)--->>>>khoa led hang don vi output_b(ma7doan[hc]);//hien thi so hangf chuc da chuyen doi BCD delay_ms(100);//thay doi tuy theo ban chon thach anh //hien thi so hang don vi output_high(pin_a4); output_low(pin_a5); output_b(ma7doan[hdv]); delay_ms(100); } void main() { int8 count=0; int8 i; set_tris_b(0x00); //set_tris_a(0x00); while(1) { for(i=0;i<2;i++)//vong for de lap hien thi, de tao thoi` gian tre { hienthi(count); count++; if(count==10) count=0; //reset lai } } } chú ý: bài này led hàng chuc được nối với RA4, led hàng đơn vị nối với RA5 qua transitor loại pnp(tíc cực múc 0). port b nói với led7seg |
|
27-11-2010, 09:05 AM | #5 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 26
: |
bạn TRAI_XQ ơi cho mình hỏi cái này nha
mình đang viết đo hiển thị nhiệt độ trên LCD nhưng cần thêm 2 nút nhấn tăng giảm đễ hiển thị nhiệt độ trên LCD vỉ đó là nhiệt độ cài đặt để báo cháy. nhưng không biết làm sao để nhấn nút tăng giảm dc mong bạn chỉ giúp |
27-11-2010, 10:06 AM | #6 |
Đệ tử 2 túi
Tham gia ngày: Nov 2010
Bài gửi: 26
: |
pic
và đây là code chỉnh nút tăng vì toàn bộ truong trình thì dài quá. Nếu xong ai quan tâm mình post toàn bộ
#include <16F877A.h> #include <DEF_16F877A.h> #device *=16 adc=8 #fuses NOWDT,NOPROTECT,NOLVP,HS,NOPUT,NODEBUG, NOBROWNOUT,NOCPD, NOWRT #use delay(clock=20000000) #define RS RB0 #define RW RB1 #define E RB2 #define LED RB3 #define LCD PORTC #define TANG rd0 unsigned char CD[]="N_DO BAO:"; unsigned char so[]="0123456789"; int8 I,CHUC,DV,BIEN; void CONTROL(void) { RS = 0; RW = 0; E = 1; E = 0; delay_ms(1); } void WRITE(void) { RS = 1; RW = 0; E = 1; E = 0; delay_ms(1); } // KHOI TAO LCD void main(void) { set_tris_B(0); set_tris_C(0); set_tris_D(0xff); delay_ms(100); LCD = 0x38; CONTROL(); LCD = 0x0C; CONTROL(); WHILE(TRUE) { bien=0; delay_ms(10); if(tang==0) { delay_ms(50); while(tang==0) { CONTINUE ; }; bien++; } CHUC=BIEN/10; DV =BIEN%10; LCD = 0xC0; CONTROL(); i=0; while (i<=8) { LCD = CD[i]; WRITE(); i++; } LCD = 0xCA; CONTROL(); LCD = so[chuc]; WRITE(); LCD = so[dv]; WRITE(); } } |
|
|