PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 09-06-2011, 11:05 PM   #1
kshoaiviet
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
File Kèm Theo
File Type: rar SUM.rar (18.0 KB, 9 lần tải)
kshoaiviet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-06-2011, 03:16 PM   #2
hein_ts
Đệ 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?
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2011, 09:49 AM   #3
lambaotrung
Đệ 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
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2011, 09:52 AM   #4
kshoaiviet
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.
kshoaiviet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2011, 11:10 AM   #5
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi kshoaiviet View Post
a giúp gium em a co the góp ý cho tụi em về đoạn code hợp lý được hok anh.
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.
File Kèm Theo
File Type: zip do nhiet do.zip (107.5 KB, 23 lần tải)
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2011, 10:13 AM   #6
kshoaiviet
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
kshoaiviet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2011, 01:59 PM   #7
hein_ts
Đệ 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é
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2011, 09:09 PM   #8
kshoaiviet
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
kshoaiviet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2011, 12:31 AM   #9
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
Trích:
Nguyên văn bởi kshoaiviet View Post
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
Hjhj. Bạn cứ tạm hiểu là như thế này. Một chương trình sẽ chạy theo tuần tự từ đầu tới cuối( không kể ngắt nhé). Khi đến cuối thì nó dừng lại nếu không có chỉ thị gì thêm. Ở đây, vòng While đóng vai trò là cứ khi đến cuối thì quay lại đầu. Chương trình của bạn không có vòng While này cho nên đến cuối là dừng. Tức là nó chỉ chạy được một lần, kiểm tra giá trị một lần mà thôi. Khi thay đổi nhiệt độ thì lúc đó chương trình đã không còn chạy nữa nên không kiểm tra được điều kiện đã thay đổi. Hơi dài dòng chút nhỉ.
#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é!
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2011, 11:30 AM   #10
kshoaiviet
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
kshoaiviet 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à 02:35 PM.


Đượ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