#pragma num_alias_table_entries 14
#pragma enable_multiple_baud
#include
IO_0 output bitshift numbits(8) clockedge(+) io_com_data;
IO_2 output bit en;
IO_5 input bit up;
IO_6 input bit down;
IO_7 input bit enter;
IO_8 input bit esc;
int item = 1;
int cur_pos = 1;
char display[20];
char menu1[20], menu2[20], menu3[20], menu4[20], menu5[20], menu6[20];
char menu1_1[20], menu1_2[20], menu1_3[20], menu1_4[20], menu1_5[20];
void command(int cmd)
{
io_out(en, 1);
io_out(io_com_data, 0b00000000UL);
switch(cmd)
{
case 0:
io_out(io_com_data, 0b00000001UL); //clear
break;
case 1:
io_out(io_com_data, 0b00111000UL); //datainterface
break;
case 20:
io_out(io_com_data, 0b00001000UL); //displayoff
break;
case 21:
io_out(io_com_data, 0b00001100UL); //displayon
break;
case 30:
io_out(io_com_data, 0b00000100UL); //autoforward off
break;
case 31:
io_out(io_com_data, 0b00000110UL); //autoforward on
break;
}
io_out(en, 0);
delay(0);
}
void writecmd(int cmd)
{
io_out(en, 1);
io_out(io_com_data, 0b00000000UL);
io_out(io_com_data, cmd);
io_out(en, 0);
delay(0);
}
void writechr(char chr)
{
io_out(en, 1);
io_out(io_com_data, 0b10000000UL);
io_out(io_com_data, chr);
io_out(en, 0);
delay(0);
}
void writestr(char str[20])
{
int chr_num;
for(chr_num = 0; str[chr_num] != '~'; chr_num = chr_num + 1)
{
writechr(str[chr_num]);
}
}
void syb(int symbol)
{
switch(symbol)
{
case 0:
writechr(0b01111110UL); //symbol ->
break;
case 1:
writechr(0b00111111UL); //symbol ?
break;
case 2:
writechr(0b00100001UL); //symbol !
break;
}
}
void cur_posit(int position)
{
switch(position)
{
case 0:
writecmd(0b11000110UL); //cursor go to central of line 2
break;
case 1:
writecmd(0b10010101UL); //cursor go to central of line 3
break;
case 10:
writecmd(0b10000000UL); //cursor go to first bit of line 1
break;
case 11:
writecmd(0b10000001UL); //cursor go to second bit of line 1
break;
case 20:
writecmd(0b11000000UL); //cursor go to first bit of line 2
break;
case 21:
writecmd(0b11000001UL); //cursor go to second bit of line 2
break;
case 30:
writecmd(0b10010100UL); //cursor go to first bit of line 3
break;
case 31:
writecmd(0b10010101UL); //cursor go to second bit of line 3
break;
case 40:
writecmd(0b11010100UL); //cursor go to first bit of line 4
break;
case 41:
writecmd(0b11010101UL); //cursor go to second bit of line 4
break;
}
}
void menu_display(int a)
{
if(a == 0)
{
item = 6;
strcpy(menu1, "Lighting~");
strcpy(menu2, "Air Condition~");
strcpy(menu3, "Menu 3~");
strcpy(menu4, "Menu 4~");
strcpy(menu5, "Menu 5~");
strcpy(menu6, "Menu 6~");
strcpy(menu1_1, "Lamp 1~");
strcpy(menu1_2, "Lamp 2~");
strcpy(menu1_3, "Lamp 3~");
strcpy(menu1_4, "Lamp 4~");
}
else if(a == 1)
{
cur_posit(11);
strcpy(display, menu1);
writestr(display);
cur_posit(21);
strcpy(display, menu2);
writestr(display);
cur_posit(31);
strcpy(display, menu3);
writestr(display);
cur_posit(41);
strcpy(display, menu4);
writestr(display);
}
else if(a == 2)
{
cur_posit(11);
strcpy(display, menu2);
writestr(display);
cur_posit(21);
strcpy(display, menu3);
writestr(display);
cur_posit(31);
strcpy(display, menu4);
writestr(display);
cur_posit(41);
strcpy(display, menu5);
writestr(display);
}
else if(a == 3)
{
cur_posit(11);
strcpy(display, menu3);
writestr(display);
cur_posit(21);
strcpy(display, menu4);
writestr(display);
cur_posit(31);
strcpy(display, menu5);
writestr(display);
cur_posit(41);
strcpy(display, menu6);
writestr(display);
}
else if(a == 11)
{
cur_posit(10);
writestr(menu1);
cur_posit(21);
strcpy(display, menu1_1);
writestr(display);
cur_posit(31);
strcpy(display, menu1_2);
writestr(display);
cur_posit(41);
strcpy(display, menu1_3);
writestr(display);
}
else if(a == 12)
{
cur_posit(10);
writestr(menu1);
cur_posit(21);
strcpy(display, menu1_2);
writestr(display);
cur_posit(31);
strcpy(display, menu1_3);
writestr(display);
cur_posit(41);
strcpy(display, menu1_4);
writestr(display);
}
}
void roll(int a, int b)
{
switch(a)
{
case 1:
if(b == 6)
{
cur_posit(40); //point to bit 1 at line 4
writechr(' ');
cur_posit(30); //point to bit 1 at line 3
syb(0); //display cursor
}
else if(b == 5)
{
cur_posit(30); //point to bit 1 at line 3
writechr(' ');
cur_posit(20); //point to bit 1 at line 2
syb(0); //display cursor
}
else if(b == 4)
{
cur_posit(20); //point to bit 1 at line 2
writechr(' ');
cur_posit(10); //point to bit 1 at line 1
syb(0); //display cursor
}
else if(b == 3)
{
menu_display(2);
cur_posit(10);
syb(0); //display cursor
}
else if(b == 2)
{
command(0);
menu_display(1);
cur_posit(10);
syb(0); //display cursor
}
break;
case 2:
if(b == 1)
{
cur_posit(10); //point to bit 1 at line 1
writechr(' ');
cur_posit(20); //point to bit 1 at line 2
syb(0); //display cursor
}
else if(b == 2)
{
cur_posit(20); //point to bit 1 at line 2
writechr(' ');
cur_posit(30); //point to bit 1 at line 3
syb(0); //display cursor
}
else if(b == 3)
{
cur_posit(30); //point to bit 1 at line 3
writechr(' ');
cur_posit(40); //point to bit 1 at line 4
syb(0); //display cursor
}
else if(b == 4)
{
command(0);
menu_display(2);
cur_posit(40);
syb(0); //display cursor
}
else if(b == 5)
{
command(0);
menu_display(3);
cur_posit(40);
syb(0); //display cursor
}
break;
}
}
when(reset)
{
delay(600); //delay 15ms
command(1); //datainterface 1
delay(160); //delay 4.1ms
command(1); //datainterface 2
delay(2); //delay 100us
command(1); //datainterface 3
delay(160); //delay 4.1ms
command(1); //datainterface 4
command(20); //displayoff
command(0); //clear
delay(63); //delay 1650us
command(21); //displayon
command(31); //autoforward
cur_posit(0); //cursor go to central of line 2
strcpy(display, "71301-3D~");
writestr(display); //display 71301-3D
cur_posit(1); //cursor go to central of line 3
strcpy(display, "Final Year Project~");
writestr(display); //display Final Year Project
delay(33333);
command(0); //clear
menu_display(0); //inital menu page
menu_display(1); //menu
cur_posit(10); //cursor to bit 1 at line 1
syb(0); //select cursor
}
when(io_changes(up)to 0)
{
if(cur_pos > 1)
{
roll(1, cur_pos);
cur_pos = cur_pos - 1;
}
}
when(io_changes(down)to 0)
{
if(cur_pos < 6)
{
roll(2, cur_pos);
cur_pos = cur_pos + 1;
}
}
               (
geocities.com/hk/cloud_fan_school/Program/LCD)                   (
geocities.com/hk/cloud_fan_school/Program)                   (
geocities.com/hk/cloud_fan_school)                   (
geocities.com/hk)