![]() |
|
Tài trợ cho PIC Vietnam |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 7
: |
giúp mình với , mình gặp vấn đề trong hiển thị LCD và dùng ngắt
mình dùng proteus mô phỏng
Mạch gồm pic6f877a,lm335,mpx4115 nối vào đầu vào của AN0 và AN1, RB0 và RB1 nối với 2 button khi button1=1 +hiển thị gia tri cua mpx (cảm biến áp suất) button2=1 hiển thị Vp button2=0 hiển thị P khibutton1=0 +hiển thị giá trị của lm335 CT: Code:
#include <16F877A.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) #include <lcd_lib_4bit.c> void convert(int16 x); void test(); void temp_2_buff(); void xuatralcd(); void chongrung(int8 x); int1 blink; int8 mint,maxt,minp,maxp; int8 nghin,tram,chuc,donvi,mode; int16 volt,adc1,adc2; void xuat_nhietdo(); void alarm(); void main() { trisa = 0xFF; trisb = 0x03; trisd = 0x00; mint=15; maxt=45; minp=15; maxp=100; blink=0; lcd_init(); setup_adc_ports(RA0_RA1_RA3_ANALOG ); setup_adc(ADC_CLOCK_INTERNAL); delay_us(10); // Khoi tao cho ngat ngoai enable_interrupts (INT_EXT); ext_int_edge(H_TO_L); enable_interrupts (GLOBAL); //--------------------------- lcd_putcmd(0x01); lcd_putcmd(0x80); printf(lcd_putchar," V--P--T"); delay_ms(1000); //--------------------------- while(1){ if (RB0==1) { set_ADC_channel(0); delay_ms(10); adc1 = read_adc(); volt = adc1; if(RB1==1) { volt = (volt*5)/1.023; convert((int16)volt); lcd_putcmd(0xC0); printf(lcd_putchar,"Vp="); xuatralcd(); delay_ms(1000); } if (RB1==0) { adc1 = (adc1-0.268*1023/5)/((45.9*1.023)/5)+15; convert((int16)adc1); lcd_putcmd(0xC0); printf(lcd_putchar,"P="); xuatralcd(); lcd_putchar("kpA"); if ((int16)adc1>100 || (int16)adc1<15 ) alarm(); delay_ms(1000); } } else { set_ADC_channel(1); set_timer0(0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // Tran = 13.1ms adc2=read_adc(); volt=adc2; if (RB1==1) { volt=(volt*5)/1.023; convert((int16)volt); lcd_putcmd(0xC0); printf(lcd_putchar,"Vt="); xuatralcd(); } else { adc2 = (adc2 - 558.5)/2.048; convert((int16)adc2); lcd_putcmd(0xC0); printf(lcd_putchar, "V2="); xuatralcd(); delay_ms(100); } } }} void convert(int16 x) { nghin = x / 1000 + 48; x = x % 1000; tram = x / 100 + 0x30; x = x % 100; chuc = x / 10 + 48; donvi = x % 10 + 48; } void xuatralcd() { lcd_putchar(nghin); lcd_putchar("."); lcd_putchar(tram); lcd_putchar(chuc); lcd_putchar(donvi); } void alarm() { if (blink==0) { LCD_putchar("!!!!!");blink=1;delay_ms(10);} else {LCD_putchar(" ");blink=0;delay_ms(10);} } mình ko hiểu , khi mình ấn button2 thì ko xảy ra hiện tượng gì xảy ra ![]() ah giúp mình đoạn nào nên xài timer để tối ưu hơn nhé |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 7
: |
vấn đề button mình đã giải quyết đc
khi mô phỏng trong ISIS , mình thấy hiển thị trên LCD nháy du quá , mình muốn nó ko nháy nữa mà vẫn đáp ứng theo thời gian thì nên điều chỉnh ở phần delay , nhưng chưa biết nên điều chỉnh thế nào |
![]() |
![]() |
![]() |
|
|