 |

|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 03 10, 00:14. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Atmega + LCD, meniu valdymas
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 04 07, 16:39 |
|
|
|
Sveiki,
Gal kam nesunku pasidalinti C kodo pavyzdziu daugiafunkcinio meniu. Atmega8 + LCD + keletas mygtuku, noretusi tam tikrus parametrus iejus i meniu keisti. Ideja tokia: yra voltmetras per meniu butu galima issirinkti reiksme kuria pasiekus isvestu i pasirinkta porta 1.
Visos idejos welcome!!!
Voltmetro kodas:
/****************************
Chip type : ATmega8
Program type : Application
Clock frequency : 1,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
****************************/
#include <mega8.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <delay.h>
#define VREF 5000
#define ADC_VREF_TYPE 0x60
void main(void)
{
// Локальные переменные
unsigned long volt1;
unsigned int a;
// Инициализация порта В
PORTB=0x00;
DDRB=0x00;
// Инициализация порта С
PORTC=0x00;
DDRC=0x00;
// Инициализация порта D
PORTD=0x00;
DDRD=0x00;
// Инициализация LCD
lcd_init(16);
delay_ms(200); //пауза 200 мс
lcd_clear(); //очистка ЖКИ
lcd_putsf(" Voltmetras "); //вывод заставки
delay_ms(4000); // показывать 4сек
while (1) //Начало цикла измерения напряжения
{ // Инициализация АЦП на PC0(ADC0)
ADMUX &= 0xdf & 0x7e & 0xf1; ADMUX |= 0x40 | 0x01;//10бит;Vref=AVCC;канал-2 PC1
//Регистр ADCSRA:АЦП-вкл; Запуск АЦП; Постоянное измерение;
ADCSRA &=0xfb; ADCSRA |= 0x80 | 0x40 | 0x02 | 0x03;//Регистр ADCSRA:АЦП-вкл; Fацп=125кГц
//Вычиление напряжения PC2
volt1=ADCW;//Чтение 10 бит результата
volt1=volt1*VREF/1024;//Вычисление Vin в милливольтах
//Вывод на дисплей
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0); //начать вывод текста с 0,0
lcd_putsf(" V1 "); // вывести на ЖКИ
lcd_putchar (volt1/1000+0x30); //показать значение единиц
lcd_putsf (","); // вывести на ЖКИ
lcd_putchar ((volt1/100)%10+0x30); //показать значение десятых
lcd_putchar ((volt1/10)%10+0x30); //показать значение сотых
lcd_putchar (volt1%10+0x30); //показать значение тысячных
if ((volt1/1000+0x30)>50){ //Jeigu itampa virsija 2 voltus displejuje rodo zenkliuka SOS, 50 ascii lenteleje atitinka 2.
lcd_gotoxy(12,0);lcd_putsf("SOS");
}
for (a=65000; a>0; a--); //цикл для создания паузы
}
} |
|
|
|
|
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 04 07, 21:59 |
|
|
|
na ir rasai jei reikia meniu... spaudi koki nors mygtuka ir isveda vis kita eilute... Dar kita mygtuka spaudi-gali keisti reikiama parametra ir t.t... |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 04 08, 08:19 |
|
|
|
Kaip paprasta tai isivaizduoju, bet kad kazkoki universalesni.
Butu puiku, kad isirinkusia reiksme irasytu i eproma.
As kaip isivaizduoju: reiktu apsirasyti atskira faila.c skirta duomenim su klavitura (nerandu normalaus aprasymo, truksta iki uzsikabinimo):
Tad ir prasau kokio pvz., kuri po kauleli butu galima narplioti.
--------------
Klaviaturos skanavimas
--------------
void ScanKbd(void)
{
switch (byScanState)
{
case ST_WAIT_KEY: // Если обнаружено нажатие на клавишу, то переходим к ее проверке.
if (KeyCode != 0)
......
-----------------
Klaviaturos ivykiai
-----------------
void ProcessKey(void)
{
switch (byKeyCode)
{
case KEY_Up:
if (Mode < 5)
{
Mode++;
}
View = 1;
Counter3 = 0;
break;
................
Paprasto pvz:
lcd_init(16);
while (1)
{
if (PINC.0==0) // если нажата первая кнопка
{
delay_ms(250); // задержка 1/4 сек. (для удобства) выбора
inf++; // к значению минуты добавляем еденицу
}
if (inf==1)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Itampa");
delay_ms(250);
}
if (inf==2)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Srove");
delay_ms(250);
}
if (inf==3)inf=0;
}
} |
|
|
|
|
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 04 08, 08:39 |
|
|
|
void meniu (void)
{
if(mygt ==1)
{
Nr=Nr+1;
if(Nr>11)Nr=0;
}
}
//===========================================
if(mygt==1||mygt==3||mygt==4||Prad==1){
{
switch (Nr) {
case 0:{
indik_string(0,&(control[0]));
indik_string(8,&(ch_temp[0]));
indik_string(16,&(ch_nr[0]));
break;}//!!!butinai reikia break... kitaip neteisingai veikia
case 1:{
indik_string(0,&(ch_nr[0]));
indik_string(16+0,&(ch_nr[0]));
break;}
case 2:{
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(8,&(ch_temp[0]));
indik_string(16+0,&(ch_nr[0]));
break;}
case 3:{
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 4:{ //itampa
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 5:{ //itampa
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 6:{ //itampa
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 7:{ //itampa
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 8:{ //itampa
indik_string(0,&(ch_nr[0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 9:{ //itampa
indik_string(0,&(ch_nr [0])); //Slenkstis
indik_string(16+0,&(ch_nr[0]));
break;}
case 10:{ //itampa
indik_string(0,&(Temper_mazinimas [0])); //Slenkstis
indik_string(0+16,&(Zona_1[0]));
break;}
case 11:{ //itampa
indik_string(0,&(Temper_mazinimas [0])); //Slenkstis
indik_string(0+16,&(Zona_2[0]));
break;}
}
}
}
//***********************************************
if((mygt<5) && (mygt!=2) )
{
atleid_lauk();//laukti kol atleis mygtuka
}
//**************************
}
nu a tep gera y? spaudi mygtukus, keiciasi uzrasai indikatoriuje... Toliau-skonio dalykeliai...  |
|
_________________ Nieko taip lengvai nedaliname, kaip patarimus... |
|
|
|
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 05 27, 22:20 |
|
|
|
Sveiki cia radau tokia programa parasyta
Kodas: |
#include <mega16.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
void main(void)
{
lcd_init(16);
lcd_clear();
lcd_putsf("Sveiki");
while (1)
{
}
}
|
Man viskas gerai veikia tik noriu dar prie teksto prideti koki skaiciu kuri galeciau keisti tarkim mes priskirtumem sk=2; ir kaip ji reiketu parody ? |
|
|
|
|
 |
 |
 |
 |
Atmega + LCD, meniu valdymas |
Parašytas: 2010 05 28, 15:11 |
|
|
|
Tesiant jau isanalizuota tema daugiafunkcinis meniu,
Funkcija: switch
switch (Nr)
{case 0:
....
break;}
kodo pvz:
#include <mega8.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#define mygt PINC.0
// Declare your global variables here
unsigned int a; //0 to 65535
unsigned char Nr; //0 to 255
void meniu (void)
{
if(mygt ==0)
{Nr=Nr+1;
delay_ms(50); // задержка 10 мс.
if(Nr>2)Nr=0;
}
}
void main(void)
{
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x01;
DDRC=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
meniu();
switch (Nr)
{
case 0:
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0); //начать вывод текста с 0,0
lcd_putsf("Meniu"); // вывести на ЖКИ
break;
case 1:
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0);
lcd_putsf("Voltmetras"); // вывести на ЖКИ
break;
case 2:
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0);
lcd_putsf("Ampermetras"); // вывести на ЖКИ
}
for (a=65000; a>0; a--);
}
} |
|
|
|
|
 |
 |
|
 |
|
 |
Google paieška forume |
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
 |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
 |
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
 |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|

|
 |