View Single Post
Old 03-01-2010, 11:00 AM   #1
meopic
Đệ tử 1 túi
 
meopic's Avatar
 
Tham gia ngày: Sep 2009
Bài gửi: 18
:
Smile Giúp em về vấn đề hiển thị trên lcd !!

Tình hình là em đag làm đồ án về dụng cụ đo điện áp xài con pic16f88, áp được đưa vào adc và hiển thị lên LCD. Vấn đề em gặp phải là thông số điện áp trên LCD nháy quá nhiều, đôi lúc nhảy những giá trị o chính xác.
Đây là code chương trình của em :
[code]#include <16f88.h>
#include <def_88.h>
#device *=16 ADC=10
#fuses NOWDT, HS, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=8)
#include <LCD_4BIT16F88edit.C> // Thu vien ham cho LCD
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int16 temp;
int8 nghin,tram,chuc,donvi;
int1 mili_volt;
float volt;
void convert_bcd(int16 x)
{
nghin = x / 1000 +0x30;
temp = x % 1000;
tram = temp / 100 +0x30;
temp = temp % 100;
chuc = temp / 10 +0x30;
donvi = temp % 10 +0x30;
}
void main( )
{
set_TRIS_B(0x00);
LCD_init();
delay_ms(100);
LCD_Putcmd(0X80);
printf(LCD_putchar,"DIEN AP ");
setup_adc( ADC_CLOCK_INTERNAL );
Setup_ADC_ports (0);
Set_ADC_channel (0) ;
Delay_us (100);
while (1){
temp = read_adc() ;
volt=(float)(temp*5)/1023;
volt=volt*1000;
convert_bcd((int16)volt);
lcd_putcmd(0xc0);
{printf(lcd_putchar,"U= ");
lcd_putchar(nghin);
lcd_putchar(".");
}
lcd_putchar(tram);
lcd_putchar(chuc);
lcd_putchar(donvi);
printf(lcd_putchar," V");
printf("%u.%u%u%u",nghin-0x30,tram-0x30,chuc-0x30,donvi-0x30);
}
}[code]

Tuy nhiên, trước khi vào adc của pic thì em có dùng cái mạch phân áp như sau nữa, o bit có tạo nhiễu nhiều hay o ??!!
Các bác có cao kiến gì thì chỉ giáo dùm em với, e sắp bảo vệ rùi nên mong các bác hồi âm sớm
ah !! thầy em có bảo là dùng thuật toán cộng giá trị trung bình (gttb) j đó rùi hiển thị thì sẽ bớt nháy đi tuy nhiên e ko bit phải làm sao để lấy ra các lần xuất ra để tính gttb nữa !! mong các ace giúp đỡ !!
Thanks !!!
__________________
ALWAYS BE U !! HEHEHE
meopic vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn