![]() |
may a cho em hoi ve de tai cua em sai o cho nao
1 Attachment(s)
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 |
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?
|
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
|
a giúp gium em a co the góp ý cho tụi em về đoạn code hợp lý được hok anh.
|
1 Attachment(s)
Trích:
|
À, 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é |
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
|
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é! |
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
|
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
|
Múi giờ GMT. Hiện tại là 04:24 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam