PDA

View Full Version : Giao tiếp nút nhấn với LCD....


onghatbekacdvn
08-07-2014, 02:30 AM
Mọi người ơi giúp em giao tiếp nút nhấn với...đề tài của mình là đọc nhiệt độ bằng DS18B20 và hiển thị nhiệt độ lên LCD và khi nhiệt độ đạt tới mức mà mình quy định trong code thì còi buzzer sẽ hú báo động...Nhưng bây h mình muốn từ phần cứng mình nhấn nút nhấn thì nhiệt độ báo cháy sẽ tăng hoặc giảm...VD: trong chương trình mình viết nhiệt độ báo cháy bằng 34 vậy khi nhiệt độ môi trường đạt tới 34 độ thì còi sẽ hú....vậy bây giờ phải viết code cho nút nhấn ntn để tăng hoặc giảm nhiệt độ báo cháy đó mà không cần phải chỉnh sửa trong code
....Mọi người giúp em với nha...Tuần sau là em phải báo cáo rùi...Đồ Án Tốt Nghiệp of E...hjx
Còn đây là code:
#include <16F877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include "1wire.c"

#define RS PIN_A1
#define RW PIN_A2
#define E PIN_A3


#byte portB=0x06
#byte portC=0x07
#byte portD=0x08
#byte portE=0x09


#define DS18B20_C
#define Buzz PIN_E2
#define button PIN_E0
int t=33;
float nhietdo;
float ds18b20_read();

float ds18b20_read()
{
int8 temp1, temp2;
signed int16 temp3;
float result;

onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
delay_ms(200);

onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);

result = (float) temp3 / 16.0; //Calculation for DS18B20 with 0.1 deg C resolution

delay_ms(200);
return(result);
}


//void LCD_Init (); // ham khoi tao LCD
//void LCD_Char ( char X ); // Ham ghi 1kitu/1chuoi len LCD
//void LCD_Cmd (int X) ; // Ham ghi lenh len LCD
//void LCD_PulseEnable (); // Ham cho phep hoac khong

void LCD_Char (char X)
{
output_high(RS);
output_low(RW);
output_D(X);
output_high(E);
output_low(E);
delay_ms( 30 );
}

void LCD_Cmd (int X)
{
output_low(RS);
output_low(RW);
output_D(X);
output_high(E);
output_low(E);
delay_ms( 30 );
}

void LCD_Init ()
{
output_d(0x00);
delay_ms(100);
LCD_Cmd(0x02);
LCD_Cmd(0x38); // giao tiep 8 bit 2 dong, font 5x7
LCD_Cmd(0x0C); // bat hien thi, tat con tro
LCD_Cmd(0x06); // tang con tro
LCD_Cmd(0x01); // xoa man hinh
}


void main()
{
set_tris_E(1);

LCD_Init();
LCD_Cmd(0x01);
lcd_Cmd(0x80);
LCD_Char("DO AN TOT NGHIEP");
lcd_Cmd(0xC0);
LCD_Char(" VI XU LY");
delay_ms(1500);

LCD_Cmd(0x01);
lcd_Cmd(0x80);
LCD_Char("SVTH:VO VAN NHUT");
lcd_Cmd(0xC0);
LCD_Char("NGUYEN TIEN DAT");
delay_ms(1500);

if(button==0)
{
while(button==0)
{};
t++;
}

lcd_cmd(0x01);
while(1)
{
lcd_Cmd(0x80);
LCD_Char("NHIET DO:");
lcd_cmd(0x89);
printf(LCD_Char,"%3d",t);
lcd_char(223);
lcd_char("C");

LCD_Cmd(0xC0);
lcd_char("HCM CITY:");
nhietdo=ds18b20_read();
LCD_Cmd(0xC9);
Printf(LCD_Char,"%3.1f",nhietdo);
LCD_Char(223);
LCD_Char("C");

if(nhietdo > t)
{
output_high(Buzz);
output_b(0xff);
output_c(0xff);
}
else if(nhietdo<=t)
{
output_low(Buzz);
output_b(0x00);
output_c(0x00);
}
}
}

hangocminh1989
10-07-2014, 10:12 PM
mình nghĩ là nếu mình không trả lời thì cũng chẳng có ai trả lời bạn đâu, đơn giản vì câu hỏi của bạn tương đối ngớ ngẩn. bạn - 1 người đã viết code rành đến mức này rồi - mà chỉ cần 1 thay đổi nhỏ về mặt ý tưởng thôi đã không làm được là sao? giải pháp thế này nhé :
đặt 1 biến b hay c hay d gì đó, gán biến đó cho nhiệt độ set_point mà bạn muốn còi hú. tiếp theo viết 1 chương trình nút nhấn, nếu bạn nhấn nút thì nó tăng hoặc giảm biến b và gán lại nó cho cái set_point nhiệt độ mới. mình nói thế bạn hiểu và làm được chứ?
chúc bạn vui và thành công.
thân,