|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
|
09-06-2011, 11:05 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
may a cho em hoi ve de tai cua em sai o cho nao
em viet doan code ma ko biet sai o cho nao ma no chay hok dung zay,khi nhiet do xuong 3 do thi den min chay,khi len 32 do thi den max chay,ma khi tra ve nhiet do tu 4 den 31 do ma sau ko tra lai den an toan chay zay,may a kiem tra va giup dum em.
#include <16f877a.h> #fuses xt,nowdt,noprotect,nolvp #use delay(clock=4000000) #use fast_io(b) #use fast_io(c) #use fast_io(d) #use fast_io(e) #use fast_io(a) #byte porta=0x05 #byte portb=0x06 #byte portc=0x07 #byte portd=0x08 #byte porte=0x09 #bit a0=porta.0 #bit rs=porte.0 #bit rw=porte.1 #bit e=porte.2 #bit C0=portc.0 #bit C1=portc.1 #bit C2=portc.2 #bit C3=portc.3 #bit C4=portc.4 #bit B0=PORTB.0 #BIT B1=PORTB.1 #BIT B2=PORTB.2 #bit B3=portb.3 #bit B4=portb.4 #bit B5=portb.5 #bit B6=portb.6 #bit B7=portb.7 int8 i,data,chuyen; int8 tramdo,chucdo,donvido,max,min,KT; int8 chucmax,dvmax,chucmin,dvmin,data1,chucdo1,dvdo1; void lenh(); void khoitao(); void xuat(); void ctxuat(); void xuly(); void doc_adc(); void ctxuat2(); void ctxuat1(); void xlchuyen(); void doc_adc1(); void xlmax(); void xlmin(); void or(); VOID CTXUAT4(); VOID CTXUAT5(); void ctxuat3(); void lenh() { rs=0; rw=0; e=1; e=0; delay_ms(5); } void xuat() { e=1; rs=1; rw=0; e=0; delay_ms(5); } void khoitao() { portd=0x01; lenh(); portd=0x0c; lenh(); portd=0x80; lenh(); portd=0x38; lenh(); delay_ms(5); } void doc_adc1() { setup_ADC(ADC_clock_internal); setup_adc_ports(ra0_ra1_ra3_analog); set_adc_channel(1); data1=(float)read_adc()*2.046; ctxuat3(); delay_ms(800); } void doc_adc() { setup_ADC(ADC_clock_internal); setup_adc_ports(an0); set_adc_channel(0); delay_us(1); } void main() { set_tris_d(0); set_tris_e(0); set_tris_b(0); set_tris_a(0x01); SET_TRIS_c(0b00000011); ctxuat1(); delay_ms(5000); portd=0x01; lenh(); ctxuat2(); delay_ms(5000); portd=0x01; lenh(); ctxuat(); delay_ms(5000); portd=0x01; lenh(); KT=0; CHUYEN=1; MAX=32; MIN=3; IF(DATA<MIN) { B0=1; } IF(DATA>MAX) { B1=1; } while(true) { IF(DATA<MIN) { B0=1; } IF(DATA>MAX) { B1=1; } IF(KT==0) {B2=1; if(data<min) { B0=1; KT=2; CTXUAT4(); } if(data>max) { B1=1; KT=3; CTXUAT5(); } } if(max==255) { max=0; ctxuat1(); } if(min==255) { min=0; ctxuat2(); } if(chuyen==1) { xuly(); delay_ms(5); } /////////////////////////////////////// portc=0x0b; if(c0==0) { do{} while(c0==0); if(chuyen==0) { min++; xlmin(); } if(chuyen==2) { max++; xlmax(); } } if(c1==0) { do{} while(c1==0); chuyen++; xlchuyen(); } delay_ms(5); /////////////////////////////////////// portc=0x07; if(c0==0) { do{} while(c0==0); if(chuyen==0) { min--; xlmin(); } if(chuyen==2) { max--; xlmax(); } } if(c1==0) { do{} while(c1==0); KT=0; CHUYEN=1; } if(max<=min) { b0=1; b1=1; or(); delay_ms(10000); max=30; min=1; ctxuat(); } } } void xuly() { doc_adc(); data=(float)read_adc()*2.046; ctxuat(); delay_ms(800); } void xlchuyen() { if(chuyen<4) { portd=0x01; lenh(); if(chuyen==1) { xuly(); } if(chuyen==2) { ctxuat1(); } if(chuyen==3) { ctxuat2(); chuyen=0; delay_ms(5); } } } void xlmax() { ctxuat1(); } void xlmin() { ctxuat2(); } void ctxuat1() { khoitao(); char const ht1[]=" NHIET DO MAX "; char const ht[]={'0','1','2','3','4','5','6','7','8','9',' '}; chucmax=(max%100)/10; dvmax=(max%10); for(i=0;i<17;i++) { portd=ht1[i]; xuat(); } PORTD=0XC0; LENH(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); for(i=0;i<1;i++) { portd=ht[chucmax]; xuat(); portd=ht[dvmax]; xuat(); } } void ctxuat2() { khoitao(); char const ht1[]=" NHIET DO MIN "; char const ht[]={'0','1','2','3','4','5','6','7','8','9',' '}; chucmin=(min%100)/10; dvmin=(min%10); for(i=0;i<17;i++) { portd=ht1[i]; xuat(); } PORTD=0XC0; LENH(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); portd=0x14; lenh(); for(i=0;i<1;i++) { portd=ht[chucmin]; xuat(); portd=ht[dvmin]; xuat(); } } void ctxuat() { portd=0x80; lenh(); char const ht1[]=" Max HienTai Min "; char const ht[]={'0','1','2','3','4','5','6','7','8','9',' '}; tramdo=data/100; chucdo=(data%100)/10; donvido=(data%10); chucmax=(max%100)/10; dvmax=(max%10); chucmin=(min%100)/10; dvmin=(min%10); FOR(I=0;I<21;I++) { PORTD=HT1[I]; XUAT(); } PORTD=0XC0; LENH(); for(i=0;i<1;i++) { portd=ht[chucmax]; xuat(); portd=ht[dvmax]; xuat(); } PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); for(i=0;i<1;I++) { portd=ht[tramdo]; xuat(); portd=ht[chucdo]; xuat(); portd=ht[donvido]; xuat(); } PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); PORTD=0X14; LENH(); for(i=0;i<1;i++) { portd=ht[chucmin]; xuat(); portd=ht[dvmin]; xuat(); } } void or() { khoitao(); char const ht1[]=" LOI PHAN MAX / MIN "; for(i=0;i<21;i++) { portd=ht1[i]; xuat(); } DELAY_MS(5000); } void ctxuat3() { khoitao(); char const ht[]={'0','1','2','3','4','5','6','7','8','9',' '}; chucdo1=(data1%100)/10; dvdo1=(data1%10); for(i=0;i<1;i++) { portd=ht[chucdo1]; xuat(); portd=ht[dvdo1]; xuat(); } } void ctxuat4() { char const ht[]=" NHIET DO QUA THAP "; CHAR CONST HT1[]=" LICK PHIM MENU "; KHOITAO(); FOR(I=0;I<21;I++) { PORTD=HT[I]; XUAT(); } PORTD=0XC0; LENH(); FOR(I=0;I<21;I++) { PORTD=HT1[I]; XUAT(); } DELAY_MS(30000); } void ctxuat5() { char const ht[]=" NHIET DO QUA CAO "; CHAR CONST HT1[]=" LICK PHIM MENU "; KHOITAO(); FOR(I=0;I<21;I++) { PORTD=HT[I]; XUAT(); } PORTD=0XC0; LENH(); FOR(I=0;I<21;I++) { PORTD=HT1[I]; XUAT(); } DELAY_MS(30000); } may a giup dum em day la mach ve bang protues |
10-06-2011, 03:16 PM | #2 |
Đệ tử 6 túi
Tham gia ngày: Feb 2011
Bài gửi: 156
: |
Chương trình đã không hợp lý lại còn dài. Nhưng cái quan trọng hơn là Tiếng Việt không có dấu rất chi là khó đọc nhất là dân kỹ thuật tụi mình. Nếu chỉ đọc nhiệt độ và đưa ra các đèn báo và thực thi một số lệnh như thế thì chương trình không cần thiết phải loằng ngoằng thế này bạn à. Giải pháp tôi ưu hơn đi bạn?
|
14-06-2011, 09:49 AM | #3 |
Đệ tử 5 túi
Tham gia ngày: Jan 2010
Bài gửi: 96
: |
vậy anh thể giúp em viết chương trình hợp lý được không vậy,nếu anh giúp em cam ơn nhiều
|
14-06-2011, 09:52 AM | #4 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
a giúp gium em a co the góp ý cho tụi em về đoạn code hợp lý được hok anh.
|
14-06-2011, 11:10 AM | #5 |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
cái này lúc trước có sửa giúp cho một em trên diễn đàn bạn lấy về tham khảo.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
15-06-2011, 10:13 AM | #6 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
mch do nhiet do
hjhj.cái file anh gưi cho e moi co cài đăt được nhiệt độ max không hà. anh có thể viết thêm về cài đặt nhiệt độ min luôn không?.anh có thể cho em số điên thoại hay yahoo để nói chuyện tiện hơn.thankyou nhiều
|
14-06-2011, 01:59 PM | #7 |
Đệ tử 6 túi
Tham gia ngày: Feb 2011
Bài gửi: 156
: |
À, mình đọc sơ qua chương trình của bạn và có một vài ý kiến nho nhỏ thế này:
- Hình như bạn không dùng vòng lặp cho toàn bộ chương trình nên nó chỉ chạy một lần và dừng lại. - Đúng là chương trình quá dài và nhiều đoạn không cần thiết: + Chương trình nhỏ không cần phải định nghĩa chân cẳng làm gì cho nó rườm rà + Tận dụng thư viện có sẵn: Nếu include cái LCD.h vào có phải đỡ đi bao nhiêu: Định nghĩa chân cho LCD, các hàm khởi tạo, các hàm xuất dữ liệu...) Lúc đó chỉ đơn giản là Printf ra LCD giá trị luôn chứ chẳng cần phải chia hàng chục hàng trăm ... Có khi kết thúc vấn đề của bạn vẫn là vòng While. nhé |
14-06-2011, 09:09 PM | #8 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
vậy là dư những điễm nào zậy anh,a có thể xóa giúp dùm em ko.khi minh include cho lcd thi minh cung phải khai báo như khai báo cho con pic phải ko anh.vòng while. là thé nào thế anh. giúp em lan nữa nha
|
15-06-2011, 12:31 AM | #9 | |
Đệ tử 6 túi
Tham gia ngày: Feb 2011
Bài gửi: 156
: |
Trích:
#include<lcd.h> chỉ ngắn vậy thôi nhưng ít nhất sẽ làm giảm chữ trong chương trình bạn viết xuống 5 lần.( Ước đoán). Có điều bạn vào thư mục driver mở xem file lcd.h bằng notepad mà xem chân cẳng thể nào, có thể thay đổi cho phù hợp. Phần help và các ví dụ trong CCS rất hay. Bạn nên tham khảo trước nhé! |
|
15-06-2011, 11:30 AM | #10 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
uhm em thanks anh nha,ma a cho em hỏi là mạch anh gửi cho em khi muốn nhiệt độ hiện tại khi con lm335 cảm biến nhưng sau gắn thêm con biến trở vào thi nó hiện nhiệt độ k và nhiệt độ F là sau thế anh.em gắn thêm biến trở để cảm biến nhiệt hiện tại,a giúp giùm em nha.tks
|
|
|