.kkursor писал(а):Но в твоей функции куча изъянов. Нет параметров,
Это проба... Так то работает эта функция и она была с параметрами... Мне практика нужна, вот я и ломаю, ремонтирую, и так далее... Функции надо научиться писать уверенно... Пока туговато идёт...
Вот так это щас выглядит... Компилятор ругается...
Остальное пока закоментил, чтоб не мешало...
#asm
.equ __lcd_port=3; PORTE
#endasm
#include <alcd.h>
#define ADC_VREF_TYPE 0x40
#define La Lev[i]
#define Lb Lev[i-1]
//========================================
unsigned int adc; // Переменная выборки из ADC
char string[10]; // Перенеммая для вывода на LCD
//char string_T[6];
//char string_i[6];
//char string_j[6];
int V; // Переменные, работающие с массивом Lev
static int adc_T;
//static int i;
float U, T, temp; // Переменные форматирования данных для вывода на LCD
//static float q;
static int j;
//static float Ta, Tb, Tc, L; //
//unsigned int convert(int i);
float convert(int j, float temp);
//========================================
int Lev[151] = { 1007, 1006, 1005, 1003, 1002, 1001, 1000, 998, 997, 996,
994, 993, 991, 989, 987, 985, 983, 980, 978, 975,
972, 969, 966, 962, 959, 956, 952, 948, 944, 940,
936, 931, 927, 922, 917, 911, 906, 900, 894, 888,
882, 875, 869, 862, 855, 848, 841, 833, 825, 817,
809, 801, 792, 783, 774, 765, 756, 747, 737, 727,
717, 707, 697, 687, 677, 666, 655, 645, 634, 623,
613, 602, 591, 580, 569, 558, 548, 537, 526, 515,
505, 494, 483, 473, 463, 452, 442, 432, 422, 412,
402, 392, 382, 373, 364, 355, 347, 339, 331, 323,
315, 307, 299, 292, 284, 277, 270, 263, 256, 250,
243, 237, 231, 225, 219, 213, 207, 202, 196, 191,
186, 181, 176, 171, 167, 162, 158, 154, 150, 146,
142, 138, 134, 131, 127, 124, 121, 117, 114, 111,
108, 105, 102, 100, 97, 94, 92, 90, 88, 85,
83 };
//==========================================
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(20);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
//==========================================
/*unsigned int convert(int i){
for (i = 0; i < 150; i++){
if(Lev[i] <= adc_T)
return i;
}
} */
//==========================================
void convert(){
int i=0;
for (i = 0; i < 150; i++){
if(Lev[i] <= adc_T){
j = i;
return;
}
}
temp = j;
}
//==========================================
/*float dtog(float j){
if(Lev[i] == adc_T){
j=i; }
return j;
} */
//==========================================
void main(void)
{
//==========================================
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
lcd_init(16);
//lcd_clear();
while (1)
{
adc=read_adc(0); // вызываем функцию для измерения напряжения и передаем ей номер ножки,
U=(float) adc*50.0/1024; // Переводим в вольты
sprintf(string, "%2.1f", U); // форматируем
lcd_gotoxy(0,0); // Выставляем курсор
lcd_puts(string); // Выводим значение
delay_us(50);
adc_T=read_adc(1);
V=convert(temp);
T=(float) V*1.0;
sprintf(string, "T=%-3.0f", T);
lcd_gotoxy(0,1);
lcd_puts(string);
delay_us(50);