PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ

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

Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ Thảo luận việc sử dụng và thay thế các sản phẩm Analog, Memory, KEELOG và cảm biến nhiệt độ của Microchip cho các thiết kế

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 10-04-2012, 09:15 PM   #1
thanhphong.91
Nhập môn đệ tử
 
Tham gia ngày: Apr 2012
Bài gửi: 9
:
Cảm biến nhiệt độ và áp suất. 16f877a

Phần này là sode của em đang làm, phần em đang gặp rắc rối là làm sao cho:

Nếu áp suất đo được nhỏ hơn 50 Pascal thì động cơ máy nén chạy với vận tốc 100%, nếu 50<P<70 Pascal thì động cơ máy nén chạy với vận tốc 70%, nếu 70<P<90 Pascal thì động cơ máy nén chạy với vận tốc 50%. Nếu P>90 Pascal thì động cơ máy nén chạy với vận tốc 30%.

Dưới đây là yêu cầu đề bài của em và code mong các pro chữa dùm em.
#define chay PORTD.0 //Khai bao chan RB0 la ngo dieu khien quay thuan.
#define dung PORTD.1 //Khai bao chan RB1 la ngo dieu khien quay nghich.
//sbit chay at RD0_bit;
//sbit dung at RD1_bit;
void main() //Khai bao chuong trinh chinh.
{
unsigned long nhietdo; //Khai bao bien nhiet do chua gia tri nhiet do doc duoc.
unsigned long apsuat;
unsigned char chuoi[12]; //Khai bao bien chuoi dang mang 1 chieu co 12 phan tu. Moi phan tu chinh la mot ky
unsigned char chuoi1[12];
unsigned char i,j,ketqua[5]; //Khai bao bien i, j de chay vong lap xu ly chuoi. Bien ketqua la mang 1 chieu co 5
unsigned char k,m,ketqua1[5];
TRISB = 0;
trisc=0;
portc=0;
trisd=0;
portd=0;
Lcd_Init(&PORTB); // LCD duoc noi voi PORTB theo cac chan mac dinh la
ADCON1 = 0x80; // Thiet lap cac ngo vao analog va dien ap tham chieu Vref = Vdd = 5V.
ADCON0 = 0xC1;//Chon va cho phep xung clock
TRISA = 0xff;
PORTA=0; //Gan gia tri ban dau cho cac chan cua PORT A = 0
//Hien thi loi gioi thieu
Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD
Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro
Lcd_Out(1,1,"nhietdo,apsuat"); //Hien thi dong chu "Chuong trinh do nhiet do" ra LCD tai vi tri 1x1.
Delay_ms(1000); //Cho 2000 mili giay
Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD
while(1) //Vong lap vo tan de lap lai chuong trinh
{
//Doc nhiet do
nhietdo=Adc_read(0); // Doc ket qua chuyen doi AD tu kenh 0.
Delay_ms(100); //Cho 200 mili giay
nhietdo=nhietdo/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2).
LongToStr(nhietdo,chuoi); //Chuyen gia tri cua bien nhiet do sang dang chuoi va luu trong bien chuoi.
//Xu ly chuoi de loai bo cac khoang trang va luu ket qua xu ly vao bien ket qua.
j=0; //Gan gia tri ban dau bang 0 cho bien j (phan tu cua bien ket qua).
for(i=0;i<=11;i++) //Vong lap voi bien i chay 12 lan de quet cac phan tu cua bien chuoi
{
if(chuoi[i] != ' ') // Neu phan tu thu i cua chuoi khong phai la khoang trang thi
{
ketqua[j]=chuoi[i]; //Gan phan tu thu i cua chuoi cho phan tu thu j cua ket qua.
j++; //Tang gia tri cua bien j len 1
}
}
//doc ap suat
apsuat=Adc_read(1); // Doc ket qua chuyen doi AD tu kenh 0.
Delay_ms(100); //Cho 200 mili giay
apsuat=apsuat/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2).
LongToStr(apsuat,chuoi1); //Chuyen gia tri cua bien nhiet do sang dang chuoi va luu trong bien chuoi.
//Xu ly chuoi de loai bo cac khoang trang va luu ket qua xu ly vao bien ket qua.
m=0; //Gan gia tri ban dau bang 0 cho bien j (phan tu cua bien ket qua).
for(k=0;k<=11;k++) //Vong lap voi bien i chay 12 lan de quet cac phan tu cua bien chuoi
{
if(chuoi[k]!=' ') // Neu phan tu thu i cua chuoi khong phai la khoang trang thi
{
ketqua1[m]=chuoi1[k]; //Gan phan tu thu i cua chuoi cho phan tu thu j cua ket qua.
m++; //Tang gia tri cua bien j len 1
}
}
if(ketqua<30 )
{
portc=0b00000001;
}
if(ketqua>50)
{
portc=0b00000001;
}

if(Adc_read(1)<512)
{
unsigned char duty_cycle;
pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz
pwm_start(); // khoi dong ham pwm
for(duty_cycle=253; duty_cycle<255; duty_cycle++) /* bien duty_cycle tang tu 0
den 51 de tang toc do tu 0 den 20 vong/phut*/
{
pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN
//if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART
delay_ms(1); // TAO THOI GIAN TRE 0.19S sau
}
}
else if(512<Adc_read(1)<717)
{
unsigned char duty_cycle;
pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz
pwm_start(); // khoi dong ham pwm
for(duty_cycle=177; duty_cycle<178; duty_cycle++) /* bien duty_cycle tang tu 0
den 51 de tang toc do tu 0 den 20 vong/phut*/
{
pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN
//if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART
delay_ms(1); // TAO THOI GIAN TRE 0.19S sau
}
}
else if(717<Adc_read(1)<922)
{
unsigned char duty_cycle;
pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz
pwm_start(); // khoi dong ham pwm
for(duty_cycle=126; duty_cycle<127; duty_cycle++) /* bien duty_cycle tang tu 0
den 51 de tang toc do tu 0 den 20 vong/phut*/
{
pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN
//if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART
delay_ms(1); // TAO THOI GIAN TRE 0.19S sau
}
}
else if(Adc_read(1)>922)
{
unsigned char duty_cycle;
pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz
pwm_start(); // khoi dong ham pwm
for(duty_cycle=76; duty_cycle<77; duty_cycle++) /* bien duty_cycle tang tu 0
den 51 de tang toc do tu 0 den 20 vong/phut*/
{
//pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN
//if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART
delay_ms(1); // TAO THOI GIAN TRE 0.19S sau
}
}
//Hien thi ket qua
Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD
Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro
Lcd_Out(1,1,"nhietdo:"); //Hien thi dong chu "Nhiet do (0C):" ra LCD tai vi tri 1x1.
Lcd_Out(1,9,ketqua); //Hien thi gia tri nhiet do dang chuoi luu trong bien ketqua ra LCD tai dong thu 2.
//Lcd_out(1,9,"0C");
//Delay_us(100); //Cho 500 mili giay cho lan doc gia tri tiep theo.
//HIEN THI AP SUAT
//Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD
//Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro
Lcd_Out(2,1,"apsuat:"); //Hien thi dong chu "Nhiet do (0C):" ra LCD tai vi tri 1x1.
//Lcd_Cmd(LCD_SECOND_ROW); //Chuyen con tro xuong dong thu 2.
Lcd_Out(2,8,ketqua1); //Hien thi gia tri nhiet do dang chuoi luu trong bien ketqua ra LCD tai dong thu 2.
//Delay_us(100); //Cho 500 mili giay cho lan doc gia tri tiep theo.
}
}
Hình Kèm Theo
File Type: png yeucau.png (34.2 KB, 8 lần tải)
File Type: png yeucauphancung.png (21.6 KB, 10 lần tải)
File Type: png Untitled.png (224.7 KB, 20 lần tải)
thanhphong.91 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 01:04 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