View Single Post
Old 12-04-2012, 11:27 PM   #22
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 Ðính Kèm





http://www.picvietnam.com/forum/show...6014#post56014
thanhphong.91 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn