PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   kỹ thuật bảng dùng ngôn ngữ C (http://www.picvietnam.com/forum/showthread.php?t=10058)

pucapuca123 15-07-2011 12:13 AM

kỹ thuật bảng dùng ngôn ngữ C
 
chào các bạn!
các bạn cho mình hỏi chút về kỹ thuật lập bảng dùng ngôn ngữ C với.
giả sử mình có 5 giá trị.(100,102,105,106,110)
giờ mình muốn cho tất cả các giá trị đó vào 1 cái mảng aray[] chẳng hạn.
sau đó mình sẽ đọc giá trị ở 1 chân VDk và so sánh với cái bảng trên
nếu có giá trị 100 thì sẽ hiện chữ A lên LCD.
nếu có giá trị 102 thì sẽ hiện chữ B lên LCD
nếu có giá trị 105 thì sẽ hiện chữ c lên LCD.
nếu có giá trị 106 thì sẽ hiện chữ D lên LCD
nếu có giá trị 110 thì sẽ hiện chữ E lên LCD.
.....
cứ như vậy đến hết thì thui.

vậy mình sẽ phải lập trình như thế nào? các bạn cho mình cái thuật toán với
có code vd thì càng tốt.
P/S: nếu mình đọc giá trị 107 ko có trong bảng nhưng nó gần với giá trị 106 nhất thì sẽ vẫn hiển thị chữ D như giá trị 106 thì mình phải làm như thế nào?
mong các bạn góp ý!
cám ơn nhiều!

dinhnambkhn 25-07-2011 01:06 PM

cai nay khoi tao mang de hien thi A,B....tuong ung.
ban khoi tao mang vd:int mang[5]={..........cac gia tri tuong ung A,B....};
vd neu co gia tri 100 thi portA=mang[1];
gia tri 102 thi portA=mang[2]..
ban down vai code co san ve led 7 thanh ve lam thu vai cai la hieu thoi!than!

haneishun 26-07-2011 01:51 AM

void lcd_put_int(int16 num){
int16 temp;
unsigned char i = 0, c[5];????
temp = num;
if (temp != 0) {
while(temp){
c[i++] = temp%10; ????
temp /= 10;??????
}
while(i) lcd_putc(c[--i] + '0');??????
}
else lcd_putc('0');??????
}
va lam the nao de hien thi so thap phan 123,4 len LCD ???
ai co the giai thick tung cho em danh dau ???? dc ko a.em moi hoc len chua hieu ro cho nay lam

pstin 26-07-2011 11:38 PM

#include <16F877A.h>
#include <DEFS_16F877A.h>
#device *=16 ADC=10
#include <stdlib.h>
#include <ctLCD.c>
#include <ds1307_16F877A.c>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)

//=========================functions use========================================

const unsigned char aray[5]={100,102,105,106,110};
int16 adc1,ad1,ad2;

//======================================functions use===========================

//********************* Ham main *************************

void main()
{
set_tris_B(0xf9);
set_tris_D(0);
set_tris_E(0);
set_tris_A(0xff);
lcd_init();
setup_ADC(ADC_CLOCK_INTERNAL);
set_ADC_channel(0);
delay_us(10);

While(true)
{
adc1=read_ADC(ADC_START_AND_READ);
delay_us(10);
ad1=adc1/100;
ad2=adc1%100;
lcd_gotoxy(1,2);
lcd_putc(ad1/10+0x30);
lcd_gotoxy(2,2);
lcd_putc(ad1%10+0x30);
lcd_gotoxy(3,2);
lcd_putc(ad2/10+0x30);
lcd_gotoxy(4,2);
lcd_putc(ad2%10+0x30);

if((adc1>=aray[0])&&(adc1<((aray[0]+aray[1])/2)))
{
lcd_gotoxy(1,1);
lcd_putc("A");
}
else if((adc1>=((aray[0]+aray[1])/2))&&(adc1<((aray[1]+aray[2])/2)))
{
lcd_gotoxy(1,1);
lcd_putc("B");
}
else if((adc1>=((aray[1]+aray[2])/2))&&(adc1<((aray[2]+aray[3])/2)))
{
lcd_gotoxy(1,1);
lcd_putc("C");
}
else if((adc1>=((aray[2]+aray[3])/2))&&(adc1<((aray[3]+aray[4])/2)))
{
lcd_gotoxy(1,1);
lcd_putc("D");
}
else if((adc1>=((aray[3]+aray[4])/2))&&(adc1<=aray[4]))
{
lcd_gotoxy(1,1);
lcd_putc("E");
}
else
{
lcd_gotoxy(1,1);
lcd_putc("?");
}

}
}

king0205 02-08-2011 11:49 PM

bạn viết tới đây mà không cho thư viện. Chứ anh em mới nhập môn chép giống bạn rồi dịch ra--> không biết tại sao báo lỗi. Giúp thi giúp cho trót. Thanks!

pstin 20-08-2011 10:51 AM

1 Attachment(s)
Hì, có gì đâu!!!!!. Mấy cái file đó cơ bản mà!!!!!!!.


Múi giờ GMT. Hiện tại là 09:34 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam