View Single Post
Old 21-03-2014, 11:22 PM   #2
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
cái này không khó. tang bạn nè đây là chương trình minh viết rộng hơn về ý tường của bạn.


//=============== PIC16F877A-ENCODER-LCD =======================
//* Tac gia: Lam Bao Trung
//* Ngay Viet: 25/05/2013
//* Ngay ket thuc:
//* Phan Cung: PIC16F877A, LCD2X16, ENCODER 100
//* Chuong trinh: Hien thi nhiet do tu moi truong
//================================================== ============
#include <ENCODER-1XUNG.h>
#INCLUDE <D:\MACH DIEN\PIC\ENCODER\lcd_lib_4bit.C>
#INCLUDE <D:\MACH DIEN\PIC\ENCODER\DEF_877A.H>


float rpm,V;
INT32 COUNTER,COUNTER1;
INT8 I,ADC;

#INT_ext
VOID EXT()
{

COUNTER++;
COUNTER1++;

IF(I>=10)
{
disable_interrupts(INT_TIMER1);
//RPM=(float)(counter*((3600*0.00169)/12));
//RPM=(counter*0.507);
RPM=(counter*0.2535);
counter=I=0;
enable_interrupts(INT_TIMER1);
SET_TIMER1(3001);
}

IF(counter1>=12)
{
V=V+0.00169;
COUNTER1=0;
}

}

#int_timer0
void timer0()
{
ADC=(FLOAT)READ_ADC()/131.07;
}
#int_timer1
void timer()
{
set_timer1(3001);
I=I+1;
}

void main()
{
SETUP_TIMER_1(T1_inTERNAL|T1_DIV_BY_8);
setup_TIMER_0(T1_inTERNAL);
EXT_INT_EDGE(1,L_TO_H);
ENABLE_INTERRUPTS(INT_EXT);
enable_interrupts(INT_TIMER1);
enable_interrupts(int_timer0);
ENABLE_INTERRUPTS(GLOBAL);
SET_TIMER1(3001);
SET_TIMER0(0);
setup_adc(adc_clock_internal);
setUP_adc_ports(RA0_analog);
set_adc_channel(0);
LCD_INIT();
v=rpm=counter=0;
WHILE(TRUE)
{

LCD_PUTCMD(0X80);
PRINTf(LCD_PUTCHAR,"%f Kmh %u",RPM,COUNTER1);
LCD_PUTCHAR("\n\r");

LCD_PUTCMD(0XC0);
PRINTF(LCD_PUTCHAR,"%f %u C",V,ADC);
LCD_PUTCHAR("\n\r");
}
}
File Kèm Theo
File Type: rar ENCODER.rar (131.5 KB, 47 lần tải)
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn