1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

[Code mẫu cho PIC ] ADC đo nhiệt độ, điện áp, hiển thị LCD và giao tiếp với máy tính

9 4,6K 80

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 68,5 KB

Nội dung

Code mẫu cho PIC - Kết hợp: ADC đo nhiệt độ, điện áp, hiển thị LCD và giao tiếp với máy tính Chương trình thực hiện đo nhiệt độ, điện áp, hiển thị kết quả lên màn hình LCD 16x2, và truyề

Trang 1

Code mẫu cho PIC - Kết hợp: ADC đo nhiệt độ, điện áp, hiển thị LCD và giao tiếp với máy tính

Chương trình thực hiện đo nhiệt độ, điện áp, hiển thị kết quả lên màn hình LCD 16x2, và truyền giá trị lên máy tính

Mô phỏng trên Proteus:

mô phỏng trên Proteus

Mã nguồn:

#include <16f877a.h>

#include <def_877a.h>

#device *=16 ADC=10

#use delay(clock=20000000)

Trang 2

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#include <lcd_lib_4bit.c>

//======================================================================= void send(int8 a);

void HIENTHI_LCD(int8 t);

void HIENTHI_LCD_float(int8 t);

int8 count=0;

int8 i,value,vl[10];

//=======================================================================

#INT_RDA //ngat khi nhan du lieu

Receive_isr()

{

char c;

c=getc();

switch(c)

{

case '0': //xoa man hinh LCD

{

LCD_putcmd(0x01);

}

break;

//o day co the su dung ma thap phan! (ngoai tru cac ky tu dieu khien)

case '-': //lui con tro hien thi LCD 1 don vi

{

LCD_putcmd(0x10);

}

break;

case '1': //truyen len may tinh: gia tri do duoc

{

Set_ADC_channel(0); //kenh 0 chan so2

delay_us(10);

Trang 3

for(i=0;i<10;i++)

{

vl[i]=read_adc();

delay_us(10);

}

value=(vl[0]+vl[1]+vl[2]+vl[3]+vl[4]+vl[5]+vl[6]+vl[7]+vl[8]+vl[9])/20.48; send(value);

}

break;

case '2': //truyen len may tinh: gia tri do duoc

{

Set_ADC_channel(1); //kenh 1 chan so3

delay_us(10);

if(read_adc()==0)

{

for(i=0;i<10;i++)

{

vl[i]=read_adc();

delay_us(10);

}

value=(vl[0]+vl[1]+vl[2]+vl[3]+vl[4]+vl[5]+vl[6]+vl[7]+vl[8]+vl[9])/10; }

else

{

value=read_adc()+6;

for(i=0;i<10;i++)

{

vl[i]=read_adc()+6;

delay_us(10);

}

value=(vl[0]+vl[1]+vl[2]+vl[3]+vl[4]+vl[5]+vl[6]+vl[7]+vl[8]+vl[9])/10; }

send(value);

Trang 4

}

break;

case '9': //thoat khoi ham ngat, cho ADC làm viec

{

count=0; //ket thuc viec truyen ky tu len LCD

LCD_putcmd(0x01);

}

break;

default : //truyen ky tu xuong LCD ^^

{

count++;

if(count==1) LCD_putcmd(0x01);

if(count==16) LCD_putcmd(0xC0);

if(count==32)

{

LCD_putcmd(0x01);

count=0;

}

LCD_putchar(c);

}

}

}

//======================================================================= void main()

{

//trisD=0x0C; //D0,D1 LA CONG VAO, D2-D7 LA CONG RA

enable_interrupts(int_rda); //cho phep ngat noi tiep nhan

enable_interrupts(GLOBAL);

LCD_init(); //Khoi tao LCD

LCD_putcmd(0xC0);

Trang 5

Printf(LCD_putchar,"Khoi tao ");

delay_ms(250);

setup_adc_ports(AN0_AN1_AN3); //Khoi tao che do cho bo ADC setup_adc(ADC_CLOCK_INTERNAL);

delay_us(10);

while(1)

{

//do nhiet do

{

Set_ADC_channel(0); //kenh 0 chan so2

delay_us(10);

value=read_adc();

value=value/2.048;

LCD_putcmd(0x80);

LCD_putchar("Nhiet do: ");

LCD_putcmd(0x89);

HIENTHI_LCD(value);

LCD_putcmd(0x8C);

LCD_putchar("oC");

delay_ms(0.1);

}

//do diep ap

{

Set_ADC_channel(1); //kenh 1 chan so3

delay_us(10);

if(read_adc()==0)

{

for(i=0;i<10;i++)

{

vl[i]=read_adc();

Trang 6

delay_us(10);

}

value=(vl[0]+vl[1]+vl[2]+vl[3]+vl[4]+vl[5]+vl[6]+vl[7]+vl[8]+vl[9])/10;

}

else

{

value=read_adc()+6;

for(i=0;i<10;i++)

{

vl[i]=read_adc()+6;

delay_us(10);

}

value=(vl[0]+vl[1]+vl[2]+vl[3]+vl[4]+vl[5]+vl[6]+vl[7]+vl[8]+vl[9])/10;

}

LCD_PutCmd(0xC0);

LCD_putchar("DIEN AP : ");

LCD_putcmd(0xC9);

//HIENTHI_LCD(value);

HIENTHI_LCD_float(value);

LCD_putcmd(0xCD);

LCD_putchar("V ");

}

}

}

//======================================================================= void HIENTHI_LCD(int8 t)

{

unsigned char v;

if(t<10)

LCD_putchar(t+48);

else

if(t<100)

Trang 7

{

LCD_putchar(t/10+48); LCD_putchar(t%10+48); }

else

{

v=t/10;

LCD_putchar(v/10+48); LCD_putchar(v%10+48); LCD_putchar(t%10+48); }

}

void send(int8 a)

{

if(a<10)

{

putc(a+48);

}

if(a>9&&a<100)

{

unsigned char c=a/10; unsigned char d=a%10; putc(c+48);

putc(d+48);

}

if(a>99)

{

unsigned char t=a/100; unsigned char c=a/10-10*t; unsigned char d=a%10; putc(t+48);

putc(c+48);

putc(d+48);

Trang 8

}

}

void HIENTHI_LCD_float(int8 t) {

int8 v;

if(t<10)

{

LCD_putchar(48); LCD_putchar(46); LCD_putchar(t+48); LCD_putchar(32); }

else

if(t<100)

{

LCD_putchar(t/10+48); LCD_putchar(46); LCD_putchar(t%10+48); LCD_putchar(32); }

else

{

v=t/10;

LCD_putchar(v/10+48); LCD_putchar(v%10+48); LCD_putchar(46); LCD_putchar(t%10+48); }

}

/*

void send_float(float a) {

if(a<10)

Trang 9

{

putc(a+48);

}

if(a>9&&a<100)

{

unsigned char c=a/10;

unsigned char d=a%10;

putc(c+48);

putc(d+48);

}

if(a>99)

{

unsigned char t=a/100;

unsigned char c=a/10-10*t;

unsigned char d=a%10;

putc(t+48);

putc(c+48);

putc(d+48);

}

}*/

//=======================================================================

Ngày đăng: 27/05/2014, 23:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w