#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;
network input SNVT_count nvi_size = 20;
network input SNVT_count nvi_no_lighting = 4;
network input SNVT_count nvi_no_blind = 4;
network input SNVT_switch nvi_lighting[4];
network input SNVT_switch nvi_blind[4];
network output SNVT_count nvo_no_lighting;
network output SNVT_count nvo_no_blind;
network output SNVT_switch nvo_lighting[4];
network output SNVT_switch nvo_blind[4];
int item = 1;
int cur_pos = 1;
int mnu_pos = 1;
char display[20];
SNVT_switch lighting_level[4];
eeprom unsigned int no_lighting = 4;
eeprom unsigned int no_blind = 4;
void writecmd(int a)
{
io_out(en, 1);
io_out(io_com_data, 0b00000000UL);
io_out(io_com_data, a);
io_out(en, 0);
delay(0);
}
void command(int a)
{
io_out(en, 1);
io_out(io_com_data, 0b00000000UL);
switch(a)
{
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);
if(a == 2)
{
delay(63);
}
else
{
delay(0);
}
}
void chr(char a)
{
io_out(en, 1);
io_out(io_com_data, 0b10000000UL);
io_out(io_com_data, a);
io_out(en, 0);
delay(0);
}
void str(char a[20])
{
int chr_num;
for(chr_num = 0; a[chr_num] != '~'; chr_num = chr_num + 1)
{
chr(a[chr_num]);
}
}
void name(int a)
{
switch(a)
{
case 1:
strcpy(display, " Lighting~");
str(display);
break;
case 11:
strcpy(display, " Lamp 1~");
str(display);
break;
case 12:
strcpy(display, " Lamp 2~");
str(display);
break;
case 13:
strcpy(display, " Lamp 3~");
str(display);
break;
case 14:
strcpy(display, " Lamp 4~");
str(display);
break;
case 2:
strcpy(display, " Blind~");
str(display);
break;
case 21:
strcpy(display, " Blind 1~");
str(display);
break;
case 22:
strcpy(display, " Blind 2~");
str(display);
break;
case 23:
strcpy(display, " Blind 3~");
str(display);
break;
case 24:
strcpy(display, " Blind 4~");
str(display);
break;
case 3:
strcpy(display, " Air Condition~");
str(display);
break;
case 4:
strcpy(display, " Other~");
str(display);
break;
}
}
void dec_num(unsigned int a)
{
unsigned int b, c, d;
b = a / 200;
if(b == 0)
{
c = a / 20;
d = (a % 20) / 2;
}
else
{
c = 0;
d = 0;
}
chr(48 + b);
chr(48 + c);
chr(48 + d);
chr('%');
}
void move(int a, int b)
{
if(a == 1)
{
writecmd(127 + b);
}
else if(a == 2)
{
writecmd(128 + 63 + b);
}
else if(a == 3)
{
writecmd(128 + 19 + b);
}
else if(a == 4)
{
writecmd(128 + 83 + b);
}
}
void menu(int a)
{
int b, c;
switch(a)
{
case 1:
command(0);
for(b = 1; b <= 4; b = b + 1)
{
move(b, 1);
name(b);
}
move(item, 1);
chr(126);
cur_pos = item;
break;
case 21:
command(0);
for(b = 1; b <= no_lighting; b = b + 1)
{
move(b, 1);
name(b + 10);
if(nvi_lighting[b - 1].state == 1)
{
move(b, nvi_size - 8);
strcpy(display, " On~");
str(display);
move(b, nvi_size - 3);
dec_num(nvi_lighting[b - 1].value);
}
else if(nvi_lighting[b - 1].state == 0)
{
move(b, nvi_size - 8);
strcpy(display, "Off~");
str(display);
move(b, nvi_size - 3);
strcpy(display, "000%~");
str(display);
}
}
if(mnu_pos != 31)
{
move(1, 1);
chr(126);
cur_pos = 1;
}
break;
case 22:
command(0);
for(b = 1; b <= no_blind; b = b + 1)
{
move(b, 1);
name(b + 20);
}
if(mnu_pos != 32)
{
move(1, 1);
chr(126);
cur_pos = 1;
}
break;
case 31:
command(0);
move(2, 8);
strcpy(display, "Level~");
str(display);
move(3, 9);
if(mnu_pos == 21)
{
dec_num(nvi_lighting[item - 1].value);
}
else
{
dec_num((cur_pos - 1) * 40);
}
break;
case 32:
command(0);
move(1, 8);
strcpy(display, "Motion~");
str(display);
move(2, 9);
strcpy(display, "Up~");
str(display);
move(3, 8);
chr(126);
strcpy(display, "Stop~");
str(display);
move(4, 9);
strcpy(display, "Down~");
str(display);
break;
}
}
void roll_cur(int a)
{
int b;
if(mnu_pos == 21)
{
b = no_lighting;
}
else if(mnu_pos == 22)
{
b = no_blind;
}
switch(a)
{
case 1:
if(cur_pos > 1)
{
if(cur_pos == 2)
{
move(2, 1);
chr(' ');
move(1, 1);
chr(126);
}
else if(cur_pos == 3)
{
move(3, 1);
chr(' ');
move(2, 1);
chr(126);
}
else if(cur_pos == 4)
{
move(4, 1);
chr(' ');
move(3, 1);
chr(126);
}
item = item - 1;
cur_pos = cur_pos - 1;
}
break;
case 2:
if(cur_pos < 4)
{
if(cur_pos == 1)
{
move(1, 1);
chr(' ');
move(2, 1);
chr(126);
}
else if(cur_pos == 2)
{
move(2, 1);
chr(' ');
move(3, 1);
chr(126);
}
else if(cur_pos == 3)
{
move(3, 1);
chr(' ');
move(4, 1);
chr(126);
}
item = item + 1;
cur_pos = cur_pos + 1;
}
break;
case 22:
if(cur_pos < 4 && cur_pos < b)
{
if(cur_pos == 1)
{
move(1, 1);
chr(' ');
move(2, 1);
chr(126);
}
else if(cur_pos == 2)
{
move(2, 1);
chr(' ');
move(3, 1);
chr(126);
}
else if(cur_pos == 3)
{
move(3, 1);
chr(' ');
move(4, 1);
chr(126);
}
item = item + 1;
cur_pos = cur_pos + 1;
}
break;
case 31:
if(mnu_pos == 31)
{
if((lighting_level[item - 1].value % 40) == 0)
{
if(cur_pos < 6)
{
cur_pos = cur_pos + 1;
menu(31);
}
}
else
{
cur_pos = (lighting_level[item - 1].value / 40) + 2;
lighting_level[item - 1].value = cur_pos * 40;
menu(31);
}
}
else if(mnu_pos == 32)
{
move(cur_pos, 8);
chr(' ');
move(2, 8);
chr(126);
cur_pos = 2;
nvo_blind[item - 1].value = 200;
nvo_blind[item - 1].state = 1;
}
break;
case 32:
if(mnu_pos == 31)
{
if((lighting_level[item - 1].value % 40) == 0)
{
if(cur_pos > 1)
{
cur_pos = cur_pos - 1;
menu(31);
}
}
else
{
cur_pos = (lighting_level[item - 1].value / 40) + 1;
lighting_level[item - 1].value = (cur_pos - 1) * 40;
menu(31);
}
}
else if(mnu_pos == 32)
{
move(cur_pos, 8);
chr(' ');
move(4, 8);
chr(126);
cur_pos = 4;
nvo_blind[item - 1].value = 0;
nvo_blind[item - 1].state = 1;
}
break;
}
}
when(nv_update_occurs(nvi_no_lighting))
{
no_lighting = nvi_no_lighting;
nvo_no_lighting = nvi_no_lighting;
if(mnu_pos == 21)
{
menu(21);
}
}
when(nv_update_occurs(nvi_no_blind))
{
no_blind = nvi_no_blind;
nvo_no_blind = nvi_no_blind;
if(mnu_pos == 22)
{
menu(22);
}
}
when(nv_update_occurs(nvi_lighting))
{
int a;
if(mnu_pos == 21)
{
for(a = 0; a <= 3; a = a + 1)
{
if(a + 1 <= no_lighting)
{
if(nvi_lighting[a].state == 1)
{
move(a + 1, nvi_size - 8);
strcpy(display, " On~");
str(display);
move(a + 1, nvi_size - 3);
dec_num(nvi_lighting[a].value);
}
else if(nvi_lighting[a].state == 0)
{
move(a + 1, nvi_size - 8);
strcpy(display, "Off~");
str(display);
move(a + 1, nvi_size - 3);
strcpy(display, "000%~");
str(display);
}
}
}
}
else if(mnu_pos == 31)
{
move(3, 9);
dec_num(nvi_lighting[item - 1].value);
cur_pos = (nvi_lighting[item - 1].value / 40) + 1;
}
lighting_level[item - 1].value = nvi_lighting[item - 1].value;
lighting_level[item - 1].state = nvi_lighting[item - 1].state;
}
when(reset)
{
delay(600);
command(1);
delay(160);
command(1);
delay(2);
command(1);
delay(160);
command(1);
command(20);
command(0);
command(21);
nvo_no_lighting = no_lighting;
nvo_no_blind = no_blind;
menu(1);
}
when(io_changes(up)to 0)
{
if(mnu_pos == 1 || mnu_pos == 21|| mnu_pos == 22)
{
roll_cur(1);
}
else if(mnu_pos == 31 || mnu_pos == 32)
{
roll_cur(31);
}
}
when(io_changes(down)to 0)
{
if(mnu_pos == 1)
{
roll_cur(2);
}
else if(mnu_pos == 21 || mnu_pos == 22)
{
roll_cur(22);
}
else if(mnu_pos == 31 || mnu_pos == 32)
{
roll_cur(32);
}
}
when(io_changes(enter)to 0)
{
if(mnu_pos == 1 && item == 1)
{
menu(21);
cur_pos = 1;
item = 1;
mnu_pos = 21;
}
else if(mnu_pos == 1 && item == 2)
{
menu(22);
cur_pos = 1;
item = 1;
mnu_pos = 22;
}
else if(mnu_pos == 21)
{
if(nvi_lighting[item - 1].state == 1)
{
cur_pos = (nvi_lighting[item - 1].value / 40) + 1;
menu(31);
mnu_pos = 31;
}
else
{
cur_pos = 1;
menu(31);
mnu_pos = 31;
}
}
else if(mnu_pos == 22)
{
cur_pos = 3;
menu(32);
mnu_pos = 32;
}
else if(mnu_pos == 31)
{
if((lighting_level[item - 1].value % 40) == 0)
{
nvo_lighting[item - 1].value = (cur_pos - 1) * 40;
if(nvo_lighting[item - 1].value == 0)
{
nvo_lighting[item - 1].state = 0;
}
else
{
nvo_lighting[item - 1].state = 1;
}
}
else
{
nvo_lighting[item - 1].value = lighting_level[item - 1].value;
nvo_lighting[item - 1].state = lighting_level[item - 1].state;
}
menu(21);
move(item, 1);
chr(126);
cur_pos = item;
mnu_pos = 21;
}
else if(mnu_pos == 32)
{
move(cur_pos, 8);
chr(' ');
move(3, 8);
chr(126);
cur_pos = 3;
nvo_blind[item - 1].value = 0;
nvo_blind[item - 1].state = 0;
}
}
when(io_changes(esc)to 0)
{
if(mnu_pos == 21)
{
mnu_pos = 1;
cur_pos = 1;
item = 1;
menu(1);
}
else if(mnu_pos == 22)
{
mnu_pos = 1;
cur_pos = 2;
item = 2;
menu(1);
}
else if(mnu_pos == 31)
{
menu(21);
move(item, 1);
chr(126);
cur_pos = item;
mnu_pos = 21;
lighting_level[item - 1].value = nvi_lighting[item - 1].value;
lighting_level[item - 1].state = nvi_lighting[item - 1].state;
}
else if(mnu_pos == 32)
{
if(cur_pos == 3)
{
menu(22);
move(item, 1);
chr(126);
cur_pos = item;
mnu_pos = 22;
}
}
}
               (
geocities.com/hk/cloud_fan_school/Program/LCD)                   (
geocities.com/hk/cloud_fan_school/Program)                   (
geocities.com/hk/cloud_fan_school)                   (
geocities.com/hk)