Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option 1"},
{"Option 2"},
{"Option 3"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
unsigned char PAGE=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[(x+PAGE)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE != 0) PAGE--;
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
} else {
PAGE++;
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
ITEM+=PAGE;
switch(ITEM){
case 0:
Delay_ms(2000);
break;
case 1:
Delay_ms(2000);
break;
}
//Bring our title back.. cuz we are done with the menu...
}
void main() {
unsigned char POS = 0;
unsigned char x;
CMCON |= 7; // Disable Comparators
TRISA = (0x0F<<2); // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option 1"},
{"Option 2"},
{"Option 3"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
unsigned char PAGE=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[(x+PAGE)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE != 0) PAGE--;
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
} else {
[B] PAGE=1;[/B]
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
ITEM+=PAGE;
switch(ITEM){
case 0:
Delay_ms(2000);
break;
case 1:
Delay_ms(2000);
break;
}
//Bring our title back.. cuz we are done with the menu...
}
void main() {
unsigned char POS = 0;
unsigned char x;
CMCON |= 7; // Disable Comparators
TRISA = (0x0F<<2); // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option 1"},
{"Option 2"},
{"Option 3"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[x]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE != 0) PAGE--;
}
break;
case DOWN:
if(POS<2){
POS++;
ITEM++;
} else {
if(PAGE<1){
ITEM--;
POS--;
PAGE=1;
}
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
switch(ITEM){
case 0:
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 3, "temp ");
Delay_ms(2000);
break;
case 1:
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1, 3, "Time");
Delay_ms(2000);
break;
}
//Bring our title back.. cuz we are done with the menu...
}
void main() {
unsigned char POS = 0;
unsigned char x;
CMCON |= 7; // Disable Comparators
TRISA = (0x0F<<2); // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}
/* *****************************************************************************
; *
; Filename: *
; Date: *
; File Version: 001 *
; *
; Author: Jason Lopez *
; Company: AtomSoft *
; *
;***************************************************************************** */
#include <p18F4620.h>
#include <delays.h>
#include <string.h>
#include "lcd.h"
#include "keys.h"
#pragma config WDT = OFF, LVP = OFF, OSC = HS, XINST = OFF
unsigned rom char MainMenuLIST[2][16] = {
{"Change View "},
{"Change Speed"}
};
unsigned rom char SpeedMenuLIST[3][16] = {
{"500 mS "},
{"1 Second "},
{"2 Seconds"}
};
unsigned rom char Company[16]=" AtomSoftTech ";
unsigned rom char SpeedLIST[3][16] = {
{"Update: 500 mS"},
{"Update: 1 sec"},
{"Update: 2 sec"}
};
/************************************
Prototypes
*************************************/
void main(void);
unsigned char DECtoBCD(unsigned char DEC);
unsigned char DECtoASCII(unsigned char DEC,char part);
/************************************
Variables and Defines
*************************************/
#define ADCPin TRISAbits.TRISA0 // RA0/AN0 TRIS (DATA DIRECTION REGISTER)
unsigned int oldresult; //Old Result Variable
unsigned int result; //Result Variable
unsigned int DegC; //Result in Celsius
unsigned int DegF; //Result in Fahrenheit
unsigned int DelayTime; //Delay Length
unsigned char MyView;
unsigned char lcdtmp[10];
unsigned char avg[10];
unsigned char CompSpeed;
/************************************
Main
*************************************/
void main(void){
unsigned char tmp;
unsigned long tmp1;
TRISD = 0x00;
KeyDIR = 0x0F;
ADCPin = 1; //AN0 = Input
ADCON0 = 0x00; //BIT 7:6 Always 00, BIT 5:2 is 0000 for Channel 0 (AN0),
//BIT 1:0 is 00 (A/D Idle and Module is off) until we are done setting up
ADCON1 = 0x0E; //BIT 7:6 Always 00, BIT 5 is 0 for VSS, BIT 4 is 0 for VDD
//BIT 3:0 is 1110 for all digital expect AN0. We need it analog so we can convert it.
ADCON2 = 0b10001101; //BIT 7 is 0 for Left Justified, BIT 6 Always 0, BIT 5:3 001 for 2 TAD (A/D Acquisition Time)
//BIT 2:0 is 100 for FOSC/4 for A/D Conversion Clock
ADCON0bits.ADON = 1; //Turn on the A/D module
LCD_Init();
DelayMS(100);
LCD_LINE(1);
LCD_STR(Company);
LCD_LINE(2);
LCD_STR((unsigned rom char*)"Temp: ");
//DEFAULTS
DelayTime = 500;
MyView = 'F';
CompSpeed = 0; //Company = 0, Speed = 1
while(1){
for(tmp=0;tmp<5;tmp++){
ADCON0bits.GO = 1; //Start the conversion
while(ADCON0bits.DONE); //Wait until it’s done
result = ADRESH; //Load ADRESH into result
result <<= 8; //Shift over Result 8 bits to the left
result |= ADRESL; //OR in our LOW byte to finish off out INT
avg[tmp] = result;
DelayMS(40);
}
result = 0;
for(tmp=0;tmp<5;tmp++){
result += avg[tmp];
}
result /= 5;
if(result==oldresult) goto tSame;
DegC = (result*5)/10;
DegC--;
DegF = DegC * 9;
DegF/=5;
DegF+=32;
//clear LCD temp buffer
for(tmp=0;tmp<16;tmp++)
lcdtmp[tmp] = ' ';
if(MyView == 'F'){
lcdtmp[0] = DECtoASCII(DegF,'h');
lcdtmp[1] = DECtoASCII(DegF,'l');
lcdtmp[2] = 0xDF;
lcdtmp[3] = 'F';
lcdtmp[4] = ' ';
} else {
lcdtmp[0] = DECtoASCII(DegC,'h');
lcdtmp[1] = DECtoASCII(DegC,'l');
lcdtmp[2] = 0xDF;
lcdtmp[3] = 'C';
lcdtmp[4] = ' ';
}
LCD_LINE(2);
LCD_STR((unsigned rom char*)"Temp: ");
LCD_STR2(lcdtmp);
DelayMS(DelayTime);
oldresult = result;
tSame:
if(KeyPORT == MENU){
DelayMS(10); //Extra Debounce
MainMenu();
while(KeyPORT == MENU);
}
if(KeyPORT == UP){
LCD_LINE(1);
if(CompSpeed == 1){
CompSpeed = 0;
LCD_STR(Company);
} else {
CompSpeed = 1;
switch(DelayTime){
case 500:
LCD_STR(SpeedLIST[0]);
break;
case 1000:
LCD_STR(SpeedLIST[1]);
break;
case 2000:
LCD_STR(SpeedLIST[2]);
break;
}
}
while(KeyPORT == UP);
}
}
}
unsigned char DECtoASCII(unsigned char DEC,char part){
unsigned char temp;
unsigned char myData;
temp = DECtoBCD(DEC);
if(part == 'l')
myData = temp & 0x0F;
if(part == 'h')
myData = (temp >> 4) & 0x0F;
myData += 0x30;
return myData;
}
unsigned char DECtoBCD(unsigned char DEC){
unsigned char temph;
unsigned char templ;
unsigned char myData;
templ = DEC % 10;
temph = DEC / 10;
myData = (temph << 4) | templ;
return myData; //Return myData
}
////////////////////////////////////////////////////////////////////////////
//// MENU SYSTEM
////////////////////////////////////////////////////////////////////////////
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
LCD_CLEAR(5);
while(KeyPORT == MENU);
while(!done){
for(x=0;x<2;x++){
LCD_LINE(x+1);
if(x == POS)
LCD_DATA('>',1);
else
LCD_DATA(' ',1);
LCD_STR(MainMenuLIST[x]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
}
break;
case ENTER:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
switch(ITEM){
case 0:
//Code to toggle C or F
if(MyView == 'F')
MyView = 'C';
else
MyView = 'F';
break;
case 1:
//Code to jump to new menu system
SpeedMenu();
break;
}
LCD_LINE(1);
if(CompSpeed == 0){
LCD_STR(Company);
} else {
switch(DelayTime){
case 500:
LCD_STR(SpeedLIST[0]);
break;
case 1000:
LCD_STR(SpeedLIST[1]);
break;
case 2000:
LCD_STR(SpeedLIST[2]);
break;
}
}
oldresult = 0;
}
////////////////////////////////////////////////////////////////////////////
//// SPEED MENU SYSTEM
////////////////////////////////////////////////////////////////////////////
void SpeedMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char START = 0;
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
LCD_CLEAR(5);
while(!done){
for(x=0;x<2;x++){
LCD_LINE(x+1);
if(x == POS)
LCD_DATA('>',1);
else
LCD_DATA(' ',1);
LCD_STR(SpeedMenuLIST[(x+START)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
POS++;
ITEM++;
START = 0;
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
} else {
if(START<1){
START = 1;
POS--;
ITEM--;
}
}
break;
case ENTER:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
//START is used to determine which number we are on plus the LCD #
ITEM+=START;
switch(ITEM){
case 0:
//Code to set 500mS
DelayTime = 500;
break;
case 1:
//Code to set 1 Second
DelayTime = 1000;
break;
case 2:
//Code to set 2 Seconds
DelayTime = 2000;
break;
}
}
////////////////////////////////////////////////////////////////////////////
//// BUTTON SYSTEM
////////////////////////////////////////////////////////////////////////////
unsigned char WaitForInput(void){
unsigned char temp1; //TEMP DATA HOLDER
unsigned char done = 0; //DONE Var will determine if done
while(!done){ //while done == 0
if(KeyPORT>0){ //if KeyPORT aka PORTB&0x0F.. the &0x0f will make sure we
//return the lower part of port only RB0 to RB3
temp1 = KeyPORT; //Place the lower part of port into temp variable
while(KeyPORT==temp1);//Like a debounce for button press
done = 0xFF; //Set DONE Var so we know we are complete
}
}
return temp1; //Return our temp1 var
}
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option 1"},
{"Option 2"},
{"Option 3"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
unsigned char PAGE=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[(x+PAGE)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE != 0) PAGE--;
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
} else {
PAGE=1;
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
ITEM+=PAGE;
switch(ITEM){
case 0:
Delay_ms(2000);
break;
case 1:
Delay_ms(2000);
break;
}
//Bring our title back.. cuz we are done with the menu...
}
void main() {
CMCON |= 7; // Disable Comparators
TRISA = (0x0F<<2); // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option 1"},
{"Option 2"},
{"Option 3"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
unsigned char PAGE=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[(x+PAGE)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE != 0) PAGE--;
}
break;
case DOWN:
if(POS<2){
POS++;
ITEM++;
} else {
PAGE=1;
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
ITEM+=PAGE;
switch(ITEM){
case 0:
Delay_ms(2000);
break;
case 1:
Delay_ms(2000);
break;
}
//Bring our title back.. cuz we are done with the menu...
}
void main() {
CMCON |= 7; // Disable Comparators
TRISA = (0x0F<<2); // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}
//REV2
#define MENU 2
#define UP 3
#define DOWN 4
// LCD connections definitions
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections definitions
unsigned char MainMenuLIST[3][16] = {
{"Option A"},
{"Option B"},
{"Option C"}
};
unsigned char WaitForInput(void){
unsigned char done = 0; //DONE Var will determine if done and hold key
while(!done){ //while done == 0
if (Button(&PORTA, MENU, 1, 0))
done = MENU;
if (Button(&PORTA, UP, 1, 0))
done = UP;
if (Button(&PORTA, DOWN, 1, 0))
done = DOWN;
}
return done; //Return our done/key var
}
void MainMenu(void){
unsigned char POS = 0; //Used for cursor ONLY!
unsigned char done = 0;
unsigned char x;
unsigned char ITEM=0;
unsigned char PAGE=0;
Lcd_Cmd(_LCD_CLEAR);
while(!done){
for(x=0;x<2;x++){
if(x == POS)
Lcd_Out((x+1),1,">");
else
Lcd_Out((x+1),1," ");
Lcd_Out((x+1),2,MainMenuLIST[(x+PAGE)]);
}
switch(WaitForInput()){
case UP:
if(POS>0){
POS--;
ITEM--;
} else {
if(PAGE>0){
POS++;
ITEM++;
PAGE=0;
}
}
break;
case DOWN:
if(POS<1){
POS++;
ITEM++;
} else {
if(PAGE<1){
PAGE = 1;
POS--;
ITEM--;
}
}
break;
case MENU:
done = 0xFF;
break;
}
}
// ITEM contains what item is selected
// POS isnt used incase larger then 2 menu...
ITEM+=PAGE;
switch(ITEM){
case 0:
Delay_ms(2000);
break;
case 1:
Delay_ms(2000);
break;
}
}
void main() {
CMCON |= 7; // Disable Comparators
TRISA = 0b00011100; // RA5,RA4,RA3,RA2 are set to input
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 3, "Waiting");
do {
switch(WaitForInput()){
case MENU:
Delay_ms(100);
MainMenu();
break;
}
} while (1);
}