Initial import

This commit is contained in:
Amrit committed 2018-03-27 04:31:46 -07:00
1 parent 4f2238603b
commit 9dee583247
15 files changed
+7923 -676

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
Copyright 2008, 2018 OpenKeyboard Developers, Neo-Desktop, et. al
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+12
View File
@@ -0,0 +1,12 @@
# OpenKeyboard for the Xbox360 Chatpad
This repository contains the OpenKeyboard031 sources for the Xbox360 Chatpad's processor (PIC16F883)
These files were obtained while looking through a mailing list archive from 2008. They appear to be the only surviving copy of this project.
The OpenKeyboard031 folder can be found in Ben Heck's video on the video titled "[Build a Retro Computer: BASIC 80's Pocket Computer](https://youtu.be/Hjdj14C_jAI?t=212)"
I'm currently in the process of hacking my own chatpads and therefore the code here hasn't been tested yet.
Feel free to open an issue if anything comes up
File diff suppressed because it is too large. Load diff
+518
View File
@@ -0,0 +1,518 @@
// FIRMWARE REPLACEMENT FOR CHATPAD's pic16f883
// see attached documents to learn more
// release 0.3.1 from jean : giancarlotodone at yahoo dot it
// for the Open Keyboard Project
// thanks alot to Gidi (who owns an half of my chatpad, call him "sponsor")
// and my sweethart piceta; they helped me handling
// cable knots while reversing and testing.
// Thanks as well to all people who demonstrated interest in this project!
#define CONFIG_BAUDRATE 1
#define CONFIG_SENDMODE 2
#define CONFIG_LIGHTMODE 3
#define CONFIG_LIGHTSTRENGTH 4
#define CONFIG_LIGHTFADEOFFTIME 5
#define CONFIG_REPEAT 6 // not used yet
#define CONFIG_ACCEPTCOMMANDS 7 // not used yet
#define CONFIG_MACROS 8 // not used yet
#define SENDMODE_SERIAL 0
#define SENDMODE_SCAN 1
#define SENDMODE_PS2 2 // not used yet
#define LIGHTMODE_ALWAYSOFF 0
#define LIGHTMODE_ALWAYSON 1
#define LIGHTMODE_FADE 2
#define LIGHTMODE_LASTMODE 2
#define BAUDRATE_300 1
#define BAUDRATE_1200 2
#define BAUDRATE_2400 3
#define BAUDRATE_4800 4
#define BAUDRATE_9600 5
#define BAUDRATE_19200 6
#define BAUDRATE_38400 7
#define BAUDRATE_57600 8
#define BAUDRATE_115200 9
const char scanMap[50] = { // i could output directly idx,
8, 9, 10, 40, 20, 30, 47, // but maybe a translation map
41, 42, 43, 39, 44, 38, 45, // can prove useful in future.
31, 32, 33, 35, 34, 36, 37, // starts from 1...think 0
21, 22, 23, 25, 24, 26, 27, // should be reserved for
11, 12, 13, 15, 14, 16, 17, // future use
1, 2, 3, 5, 4, 6, 7,
28, 18, 19, 0, 0, 29, 46 };
const char serialMap[4][49] = { // CHARACTER MAPPING MATRIX for "pure serial mode"
// normal char press
{56, 57, 48, 13, 112, 44, 0,
0, 0, 0, 46, 32, 109, 0,
0, 122, 120, 118, 99, 98, 110,
97, 115, 100, 103, 102, 104, 106,
113, 119, 101, 116, 114, 121, 117,
49, 50, 51, 53, 52, 54, 55,
107, 105, 111, 0, 0, 108, 8},
// shifted
{56, 57, 48, 13, 80, 44, 0,
0, 0, 0, 46, 32, 77, 0,
0, 90, 88, 86, 67, 66, 78,
65, 83, 68, 71, 70, 72, 74,
81, 87, 69, 84, 82, 89, 85,
49, 50, 51, 53, 52, 54, 55,
75, 73, 79, 0, 0, 76, 8},
// green alt
{56, 57, 48, 13, 41, 58, 0,
0, 0, 0, 63, 32, 62, 0,
0, 96, 39, 45, 187, 124, 60,
126, 154, 123, 168, 125, 47, 39,
33, 64, 128, 37, 35, 94, 38,
49, 50, 51, 53, 52, 54, 55,
91, 42, 40, 0, 0, 93, 8},
// red alt
{56, 57, 48, 13, 61, 59, 0,
0, 0, 0, 191, 32, 181, 0,
0, 230, 156, 95, 231, 43, 241,
225, 223, 240, 165, 163, 92, 34,
161, 229, 232, 254, 36, 253, 249,
49, 50, 51, 53, 52, 54, 55,
169, 236, 242, 0, 0, 248, 8}
}; ////////// END OF MAPPING MATRIX
unsigned char data[7] = {0,0,0,0,0,0,0};
unsigned char oldData[7] = {0,0,0,0,0,0,0};
unsigned char justPressed[7] = {0,0,0,0,0,0,0};
unsigned char newlyPressd = 0;
unsigned char AMask = 0;
unsigned char BMask = 0;
unsigned char somethingChanged = 0;
unsigned long int timer = 0xFFFF;
unsigned long int lightFadeOffTime = 0x8000;
// alternates (shift,green,red) mapping to translation map
// 0 1 2 3 4 5 6 7
unsigned char alts [] = {0, 1, 2, 2, 3, 3, 3, 3};
unsigned char alt;
void (*send)() = 0;
void (*lightHandler)() = 0;
unsigned char baudrate = 0;
unsigned char sendMode = 0;
unsigned char lightMode = 0;
unsigned char lightStrenght = 0;
unsigned char pwmRunning = 0;
void enterPowerSave(){
PORTA = 0;
INTCON.RBIE = 1; // enables PORTB on-change interrupt
asm{
sleep;
}
}
void exitPowerSave(){
INTCON.RBIE = 0; // disables PORTB on-change interrupt
}
void setupUsart(unsigned char br){
switch(br){ // done so, because you can't call USART_Init(variable); but only USART_Init(literal);
case BAUDRATE_300: USART_Init(300);
break;
case BAUDRATE_1200: USART_Init(1200);
break;
case BAUDRATE_2400: USART_Init(2400);
break;
case BAUDRATE_4800: USART_Init(4800);
break;
case BAUDRATE_9600: USART_Init(9600);
break;
case BAUDRATE_19200: USART_Init(19200);
break;
case BAUDRATE_38400: USART_Init(38400);
break;
case BAUDRATE_57600: USART_Init(57600);
break;
case BAUDRATE_115200: USART_Init(115200);
break;
default: EEprom_write(CONFIG_BAUDRATE, BAUDRATE_4800); // if no config found, set a default 4800
br = BAUDRATE_4800;
USART_Init(4800);
}
baudrate = br;
}
void turnBacklightOn(){
timer = lightFadeOffTime;
if (!pwmRunning) {
PWM1_Start();
PWM2_Start();
pwmRunning = 1;
}
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
}
void nop(){
}
void lightFade(){
unsigned char s;
if (newlyPressd) {
turnBacklightOn();
return;
}
if (timer>0) timer --;
else {
PWM1_Stop;
PWM2_Stop;
PORTC = 255;
pwmRunning = 0;
enterPowerSave();
}
if (timer<(~lightStrenght)){
PWM1_Change_Duty(~((unsigned char)timer));
PWM2_Change_Duty(~((unsigned char)timer));
}
}
void setupLightMode(unsigned char lm){
if (pwmRunning){
PWM1_Stop();
PWM2_Stop();
}
switch (lm){
case LIGHTMODE_ALWAYSOFF: lightHandler = &nop;
lightStrenght = 0xFF;
lightMode = LIGHTMODE_ALWAYSOFF;
break;
case LIGHTMODE_ALWAYSON: lightHandler = &nop;
turnBacklightOn();
lightMode = LIGHTMODE_ALWAYSON;
break;
case LIGHTMODE_FADE: lightHandler = &lightFade;
turnBacklightOn();
lightStrenght = 0x80; // restore middle luminosity
lightMode = LIGHTMODE_FADE;
break;
default : EEprom_write(CONFIG_LIGHTMODE, LIGHTMODE_ALWAYSOFF);
lightMode = LIGHTMODE_ALWAYSOFF;
lightHandler = &nop;
lightStrenght = 0xFF;
}
PORTC = 255;
// PWM init
if (lightMode != LIGHTMODE_ALWAYSOFF) {
PWM1_Init(40000);
PWM1_Change_Duty(lightStrenght);
PWM1_Start();
PWM2_Init(40000);
PWM2_Change_Duty(lightStrenght);
PWM2_Start();
pwmRunning = 1;
}
}
void doScan(){
unsigned char sc = 0;
newlyPressd = 0;
for (AMask=1; AMask<128; AMask<<=1){
oldData[sc] = data[sc]; // save old data
PORTA = ~AMask; // put a 0 on the line we want to inspect
data[sc] = PORTB; // read PORTB (pulled up)...if a line goes to 0, bingo!
data[sc] = data[sc] | PORTB; // antibounce
data[sc] = data[sc] | PORTB; // antibounce
data[sc] = ~data[sc]; // return to positive logic
justPressed[sc] = data[sc]&(~oldData[sc]);
newlyPressd = newlyPressd | justPressed[sc];
sc++;
}
}
void serialSend(){
unsigned char idx = 0;
unsigned char sc = 0;
for (AMask=1; AMask<128; AMask<<=1){
for (BMask=1; BMask<128; BMask<<=1){
if (justPressed[sc] & BMask) USART_Write(serialMap[alt][idx]);
idx++;
}
sc++;
}
alt = alts[data[2]&1|((data[1]&1)<<1)|((data[0]&64)>>4)]; // next scan can use alt retrieved here
}
void scanSend(){
unsigned char idx = 0;
unsigned char sc = 0;
unsigned char bs = 0;
for (AMask=1; AMask<128; AMask<<=1){
somethingChanged = data[sc] ^ oldData[sc];
bs = 0;
for (BMask=1; BMask<128; BMask<<=1){
if (someThingChanged & BMask)
USART_Write(scanMap[idx] | (((data[sc]&BMask)>>bs)<<6)); // | 64 if pressed
bs++;
idx++;
}
sc++;
}
}
void ps2Send(){
// not implemented yet
}
void setupSendMode(unsigned char sm){
switch (sm){
case SENDMODE_SCAN : send = &scanSend;
sendMode = SENDMODE_SCAN;
break;
case SENDMODE_SERIAL: send = &serialSend;
sendMode = SENDMODE_SERIAL;
break;
// case SENDMODE_PS2: send = &ps2send;
// sendMode = SENDMODE_PS2;
// break;
default : send = &serialSend;
EEprom_write(CONFIG_SENDMODE, SENDMODE_SERIAL);
sendMode = SENDMODE_SERIAL;
}
}
void config(){
timer = lightFadeOffTime;
if ((data[1]&4)&&(lightStrenght<0xff)) { // <
lightStrenght++;
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
if (lightMode==LIGHTMODE_ALWAYSOFF) lightMode = LIGHTMODE_FADE;
} // decrease light strenght
if ((data[1]&64)&&(lightStrenght>0)) { // >
lightStrenght--;
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
if (lightMode==LIGHTMODE_ALWAYSOFF) lightMode = LIGHTMODE_FADE;
} // increase light strenght
if (justPressed[5]&1){ // 1
// if (data[1]&1) // this buttion combination just doesn't work...think that's because of the buttons staying on the same matrix line.
// setupUsart(BAUDRATE_4800);
// else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 2<<8;
// }
}
if (justPressed[5]&2){ // 2
if (data[1]&1)
;//setupUsart(BAUDRATE_300); //all setupUsart commented out are to save code words space...otherwise i'm running into demo limit
else { //consider donating some money to me to purchase a full version of mikroC and continue development
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 4<<8; // more or less 5 sec
}
}
if (justPressed[5]&4){ // 3
if (data[1]&1)
;//setupUsart(BAUDRATE_1200);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 8<<8;
}
}
if (justPressed[5]&16){ // 4
if (data[1]&1)
;//setupUsart(BAUDRATE_2400);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 16<<8;
}
}
if (justPressed[5]&8){ // 5
if (data[1]&1)
setupUsart(BAUDRATE_4800);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 32<<8;
}
}
if (justPressed[5]&32){ // 6
if (data[1]&1)
setupUsart(BAUDRATE_9600);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 64<<8;
}
}
if (justPressed[5]&64){ // 7
if (data[1]&1)
;//setupUsart(BAUDRATE_19200);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 128<<8;
}
}
if (justPressed[0]&1){ // 8
if (data[1]&1)
;//setupUsart(BAUDRATE_38400);
else {
setupLightMode(LIGHTMODE_FADE);
lightFadeOffTime = 255<<8;
}
}
if (justPressed[0]&2){ // 9
if (data[1]&1)
;//setupUsart(BAUDRATE_57600);
else
setupLightMode(LIGHTMODE_ALWAYSON);
}
if (justPressed[0]&4){ // 0
if (data[1]&1)
;//setupUsart(BAUDRATE_115200);
else
setupLightMode(LIGHTMODE_ALWAYSOFF);
}
if (justPressed[3]&1){ // A
setupSendMode(SENDMODE_SCAN);
}
if (justPressed[3]&2){ // S
setupSendMode(SENDMODE_SERIAL);
}
Delay_5ms();
}
void saveConfig(){
EEprom_write(CONFIG_BAUDRATE, baudrate);
EEprom_write(CONFIG_SENDMODE, sendMode);
EEprom_write(CONFIG_LIGHTMODE, lightMode);
EEprom_write(CONFIG_LIGHTSTRENGTH, lightStrenght);
EEprom_write(CONFIG_LIGHTFADEOFFTIME, lightFadeOffTime>>8);
}
void interrupt() {
if (INTCON.RBIF) { // SOMETHING CHANGED ON PORTB...
exitPowerSave(); // just wakeup and so some scanning...
INTCON.RBIF = 0; // clear intr flag
}
// if (PIR1.RCIF) { // USART RECEIVE BUFFER () FULL...
//
// }
}
void main() {
OSCCON = 0x67; // 01100111 - 0110 stands for 4Mhz internal clock
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
PORTA = 0; // init port A
TRISA = 0; // 1 = input
PORTB = 0; // initialize PORTB
TRISB = 255; // designate PORTB as all input
PORTC = 0; // initialize PORTC
TRISC = 0; // designate PORTB 0-7 as output
OPTION_REG = 0; // pull-ups enabled on PORTB....no external pull-downs
// present, so we have to run negative logic...
//WPUB = 127; // weak pull-ups enabled on PORTB 0-6 // AAARGH!! this caused random Light-On
INTCON.RBIE = 0; // disables PORTB on-change interrupt
INTCON.RBIF = 0; // clear PORTB mismatch values
IOCB = 127; // pin 0-6 of PORTB configured to raise interrupt when changed
PIE1 = 32; // RCIE = 1; enables EUSART on-receive interrupt
INTCON.GIE = 1; // Global Interrupt Enable/disable
// SEND MODE ------------------
Delay_ms(20); // required for eeprom_read to work correctly
sendMode = EEprom_read(CONFIG_SENDMODE);
setupSendMode(sendMode);
// TODO: if in PS2 mode don't initialize usart
// USART ---------------
Delay_ms(20); // required for eeprom_read to work correctly
baudrate = EEprom_read(CONFIG_BAUDRATE);
setupUsart(baudrate); // Initalize USART (xxxx baud rate, 1 stop bit, no parity...)
// LIGHTS ----------------
Delay_ms(20); // required for eeprom_read to work correctly
lightFadeOffTime = EEprom_read(CONFIG_LIGHTFADEOFFTIME) << 8;
lightStrenght = EEprom_read(CONFIG_LIGHTSTRENGTH);
Delay_ms(20); // required for eeprom_read to work correctly
lightMode = EEprom_read(CONFIG_LIGHTMODE);
setUpLightMode(lightMode);
do {
doScan();
if (data[1]&2) {
config(); // people button pressed -> config mode
}else{
if (oldData[1]&2) saveConfig(); // ppl btn just released... save config
send();
}
lightHandler();
Delay_80us(); // without this delay, pic hangs on sleep...
} while (1); // endless loop
}
+481
View File
@@ -0,0 +1,481 @@
#line 1 "E:/Acer_D_Backup/DEVELOPMENT/PROJECTS/micros/openKeyboard03/openKeyboard.c"
#line 39 "E:/Acer_D_Backup/DEVELOPMENT/PROJECTS/micros/openKeyboard03/openKeyboard.c"
const char scanMap[50] = {
8, 9, 10, 40, 20, 30, 47,
41, 42, 43, 39, 44, 38, 45,
31, 32, 33, 35, 34, 36, 37,
21, 22, 23, 25, 24, 26, 27,
11, 12, 13, 15, 14, 16, 17,
1, 2, 3, 5, 4, 6, 7,
28, 18, 19, 0, 0, 29, 46 };
const char serialMap[4][49] = {
{56, 57, 48, 13, 112, 44, 0,
0, 0, 0, 46, 32, 109, 0,
0, 122, 120, 118, 99, 98, 110,
97, 115, 100, 103, 102, 104, 106,
113, 119, 101, 116, 114, 121, 117,
49, 50, 51, 53, 52, 54, 55,
107, 105, 111, 0, 0, 108, 8},
{56, 57, 48, 13, 80, 44, 0,
0, 0, 0, 46, 32, 77, 0,
0, 90, 88, 86, 67, 66, 78,
65, 83, 68, 71, 70, 72, 74,
81, 87, 69, 84, 82, 89, 85,
49, 50, 51, 53, 52, 54, 55,
75, 73, 79, 0, 0, 76, 8},
{56, 57, 48, 13, 41, 58, 0,
0, 0, 0, 63, 32, 62, 0,
0, 96, 39, 45, 187, 124, 60,
126, 154, 123, 168, 125, 47, 39,
33, 64, 128, 37, 35, 94, 38,
49, 50, 51, 53, 52, 54, 55,
91, 42, 40, 0, 0, 93, 8},
{56, 57, 48, 13, 61, 59, 0,
0, 0, 0, 191, 32, 181, 0,
0, 230, 156, 95, 231, 43, 241,
225, 223, 240, 165, 163, 92, 34,
161, 229, 232, 254, 36, 253, 249,
49, 50, 51, 53, 52, 54, 55,
169, 236, 242, 0, 0, 248, 8}
};
unsigned char data[7] = {0,0,0,0,0,0,0};
unsigned char oldData[7] = {0,0,0,0,0,0,0};
unsigned char justPressed[7] = {0,0,0,0,0,0,0};
unsigned char newlyPressd = 0;
unsigned char AMask = 0;
unsigned char BMask = 0;
unsigned char somethingChanged = 0;
unsigned long int timer = 0xFFFF;
unsigned long int lightFadeOffTime = 0x8000;
unsigned char alts [] = {0, 1, 2, 2, 3, 3, 3, 3};
unsigned char alt;
void (*send)() = 0;
void (*lightHandler)() = 0;
unsigned char baudrate = 0;
unsigned char sendMode = 0;
unsigned char lightMode = 0;
unsigned char lightStrenght = 0;
unsigned char pwmRunning = 0;
void enterPowerSave(){
PORTA = 0;
INTCON.RBIE = 1;
asm{
sleep;
}
}
void exitPowerSave(){
INTCON.RBIE = 0;
}
void setupUsart(unsigned char br){
switch(br){
case 1 : USART_Init(300);
break;
case 2 : USART_Init(1200);
break;
case 3 : USART_Init(2400);
break;
case 4 : USART_Init(4800);
break;
case 5 : USART_Init(9600);
break;
case 6 : USART_Init(19200);
break;
case 7 : USART_Init(38400);
break;
case 8 : USART_Init(57600);
break;
case 9 : USART_Init(115200);
break;
default: EEprom_write( 1 , 4 );
br = 4 ;
USART_Init(4800);
}
baudrate = br;
}
void turnBacklightOn(){
timer = lightFadeOffTime;
if (!pwmRunning) {
PWM1_Start();
PWM2_Start();
pwmRunning = 1;
}
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
}
void nop(){
}
void lightFade(){
unsigned char s;
if (newlyPressd) {
turnBacklightOn();
return;
}
if (timer>0) timer --;
else {
PWM1_Stop;
PWM2_Stop;
PORTC = 255;
pwmRunning = 0;
enterPowerSave();
}
if (timer<(~lightStrenght)){
PWM1_Change_Duty(~((unsigned char)timer));
PWM2_Change_Duty(~((unsigned char)timer));
}
}
void setupLightMode(unsigned char lm){
if (pwmRunning){
PWM1_Stop();
PWM2_Stop();
}
switch (lm){
case 0 : lightHandler = &nop;
lightStrenght = 0xFF;
lightMode = 0 ;
break;
case 1 : lightHandler = &nop;
turnBacklightOn();
lightMode = 1 ;
break;
case 2 : lightHandler = &lightFade;
turnBacklightOn();
lightStrenght = 0x80;
lightMode = 2 ;
break;
default : EEprom_write( 3 , 0 );
lightMode = 0 ;
lightHandler = &nop;
lightStrenght = 0xFF;
}
PORTC = 255;
if (lightMode != 0 ) {
PWM1_Init(40000);
PWM1_Change_Duty(lightStrenght);
PWM1_Start();
PWM2_Init(40000);
PWM2_Change_Duty(lightStrenght);
PWM2_Start();
pwmRunning = 1;
}
}
void doScan(){
unsigned char sc = 0;
newlyPressd = 0;
for (AMask=1; AMask<128; AMask<<=1){
oldData[sc] = data[sc];
PORTA = ~AMask;
data[sc] = PORTB;
data[sc] = data[sc] | PORTB;
data[sc] = data[sc] | PORTB;
data[sc] = ~data[sc];
justPressed[sc] = data[sc]&(~oldData[sc]);
newlyPressd = newlyPressd | justPressed[sc];
sc++;
}
}
void serialSend(){
unsigned char idx = 0;
unsigned char sc = 0;
for (AMask=1; AMask<128; AMask<<=1){
for (BMask=1; BMask<128; BMask<<=1){
if (justPressed[sc] & BMask) USART_Write(serialMap[alt][idx]);
idx++;
}
sc++;
}
alt = alts[data[2]&1|((data[1]&1)<<1)|((data[0]&64)>>4)];
}
void scanSend(){
unsigned char idx = 0;
unsigned char sc = 0;
unsigned char bs = 0;
for (AMask=1; AMask<128; AMask<<=1){
somethingChanged = data[sc] ^ oldData[sc];
bs = 0;
for (BMask=1; BMask<128; BMask<<=1){
if (someThingChanged & BMask)
USART_Write(scanMap[idx] | (((data[sc]&BMask)>>bs)<<6));
bs++;
idx++;
}
sc++;
}
}
void ps2Send(){
}
void setupSendMode(unsigned char sm){
switch (sm){
case 1 : send = &scanSend;
sendMode = 1 ;
break;
case 0 : send = &serialSend;
sendMode = 0 ;
break;
default : send = &serialSend;
EEprom_write( 2 , 0 );
sendMode = 0 ;
}
}
void config(){
timer = lightFadeOffTime;
if ((data[1]&4)&&(lightStrenght<0xff)) {
lightStrenght++;
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
if (lightMode== 0 ) lightMode = 2 ;
}
if ((data[1]&64)&&(lightStrenght>0)) {
lightStrenght--;
PWM1_Change_Duty(lightStrenght);
PWM2_Change_Duty(lightStrenght);
if (lightMode== 0 ) lightMode = 2 ;
}
if (justPressed[5]&1){
setupLightMode( 2 );
lightFadeOffTime = 2<<8;
}
if (justPressed[5]&2){
if (data[1]&1)
;
else {
setupLightMode( 2 );
lightFadeOffTime = 4<<8;
}
}
if (justPressed[5]&4){
if (data[1]&1)
;
else {
setupLightMode( 2 );
lightFadeOffTime = 8<<8;
}
}
if (justPressed[5]&16){
if (data[1]&1)
;
else {
setupLightMode( 2 );
lightFadeOffTime = 16<<8;
}
}
if (justPressed[5]&8){
if (data[1]&1)
setupUsart( 4 );
else {
setupLightMode( 2 );
lightFadeOffTime = 32<<8;
}
}
if (justPressed[5]&32){
if (data[1]&1)
setupUsart( 5 );
else {
setupLightMode( 2 );
lightFadeOffTime = 64<<8;
}
}
if (justPressed[5]&64){
if (data[1]&1)
;
else {
setupLightMode( 2 );
lightFadeOffTime = 128<<8;
}
}
if (justPressed[0]&1){
if (data[1]&1)
;
else {
setupLightMode( 2 );
lightFadeOffTime = 255<<8;
}
}
if (justPressed[0]&2){
if (data[1]&1)
;
else
setupLightMode( 1 );
}
if (justPressed[0]&4){
if (data[1]&1)
;
else
setupLightMode( 0 );
}
if (justPressed[3]&1){
setupSendMode( 1 );
}
if (justPressed[3]&2){
setupSendMode( 0 );
}
Delay_5ms();
}
void saveConfig(){
EEprom_write( 1 , baudrate);
EEprom_write( 2 , sendMode);
EEprom_write( 3 , lightMode);
EEprom_write( 4 , lightStrenght);
EEprom_write( 5 , lightFadeOffTime>>8);
}
void interrupt() {
if (INTCON.RBIF) {
exitPowerSave();
INTCON.RBIF = 0;
}
}
void main() {
OSCCON = 0x67;
ANSEL = 0;
ANSELH = 0;
PORTA = 0;
TRISA = 0;
PORTB = 0;
TRISB = 255;
PORTC = 0;
TRISC = 0;
OPTION_REG = 0;
INTCON.RBIE = 0;
INTCON.RBIF = 0;
IOCB = 127;
PIE1 = 32;
INTCON.GIE = 1;
Delay_ms(20);
sendMode = EEprom_read( 2 );
setupSendMode(sendMode);
Delay_ms(20);
baudrate = EEprom_read( 1 );
setupUsart(baudrate);
Delay_ms(20);
lightFadeOffTime = EEprom_read( 5 ) << 8;
lightStrenght = EEprom_read( 4 );
Delay_ms(20);
lightMode = EEprom_read( 3 );
setUpLightMode(lightMode);
do {
doScan();
if (data[1]&2) {
config();
}else{
if (oldData[1]&2) saveConfig();
send();
}
lightHandler();
Delay_80us();
} while (1);
}
Binary file not shown.
Binary file not shown.
+299
View File
@@ -0,0 +1,299 @@
:100000008A156B28FF3FFF3FFF00030E8301D900D5
:100010000408D8000A08DA008A017008E5000B1C01
:10002000132820200B10031383126508F0005A08D0
:100030008A0058088400590E8300FF0E7F0E0900C5
:100040008B11080003138312FB01FA01F9018030C0
:10005000F800FD01F11F3228F109F009F00A031937
:10006000F10AFD0AF51F3A28F509F409F40A031903
:10007000F50AFD0AF10CF00C031C47287408F90777
:1000800075080318750FFA070318FB0A0310F01F11
:100090004F287408FA070318FB0A7508FB07FB0CC6
:1000A000FA0CF90CF80C031C3A287D1C6228FB0999
:1000B000FA09F909F809F80A0319F90A0319FA0AF9
:1000C0000319FB0A7B08F3007A08F2007908F100B3
:1000D0007808F0000000080003138316071183124C
:1000E00012150C309704080003138316871083122F
:1000F00012150C309D040800031383161208013FEB
:10010000F000F1010318F10A83126408F400F5010C
:1001100022200630F2007008F4007108F500720821
:100120000319992803138312F50CF40CF513FF3F00
:100130009028031383127408F000F00D7010F00D76
:100140007010F00D7010F00D701030307005F3006D
:100150007408F0007508F100F10CF00CF113F10CCB
:10016000F00CF113700895000F3097057308970491
:100170000800031383161208013FF000F101031871
:10018000F10A83126408F400F50122200630F2001F
:100190007008F4007108F50072080319D6280313DB
:1001A0008312F50CF40CF513FF3FCD2803138312D3
:1001B0007408F000F00D7010F00D7010F00D70105C
:1001C000F00D701030307005F3007408F000750801
:1001D000F100F10CF00CF113F10CF00CF1137008BC
:1001E0009B000F309D0573089D04080003138316C0
:1001F000071583121211F0309705080003138316B8
:10020000871483121211F0309D0508000313831226
:100210002408A0002508A1002608A2002708A300A2
:100220002808031D17296C2074200130A80003132F
:1002300083122908E4007C202908E400B920080082
:100240000000031783168C1C2729000021290313A3
:1002500083125F0803178D000313600803178C00D7
:1002600083168C130C158B1355308D00AA308D001E
:100270008C148B170C1108000313831295011712AD
:1002800097120800031383129B011D129D12080090
:1002900003138316981690308312980083168717DD
:1002A0000713031383128C1E58291A08E3005129DF
:1002B000080003138312280803196029F620FE2082
:1002C0009D297D3003138312AA000530AB00003056
:1002D000AC000030FF30A900AD01AC297D30031324
:1002E0008312AA000530AB000030AC0000300621BC
:1002F0000130AD00AC297E3003138312AA00053013
:10030000AB000030AC00003006218030A900023084
:10031000AD00AC29033003138312DF00E00120217C
:1003200003138312AD017D30AA000530AB0000300D
:10033000AC000030FF30A900AC29031383125E0823
:10034000003A031961295E08013A03196E295E0813
:10035000023A03197B298A29FF300313831287008D
:100360002D08003A0319C6291830831692003C2143
:100370002908E4007C206C2018308316920042216A
:100380002908E400B92074200130A80008001A2AC6
:1003900003138316CF3003138316990018114821D5
:1003A000432ACF3003138316990018154821432A96
:1003B000673003138316990018154821432A3330F8
:1003C00003138316990018154821432A1930031383
:1003D0008316990018154821432A0C3003138316FD
:1003E000990018154821432A0630031383169900F3
:1003F00018154821432A0330031383169900181552
:100400004821432A01300313831699001815482107
:10041000432A013003138312DF000430E00020215F
:10042000043003138312DE0033308316990018154D
:100430004821432A03138312031383125E08013AEF
:100440000319C8295E08023A0319D1295E08033A44
:100450000319D8295E08043A0319DF295E08053A12
:100460000319E6295E08063A0319ED295E08073AE2
:100470000319F4295E08083A0319FB295E08093AB2
:100480000319022A092A031383125E08AE0008002A
:10049000712AC53003138312AF000530B00000305D
:1004A000B10000300130B2007E2A383003138312CD
:1004B000AF000630B0000030B1000030B2017E2A3B
:1004C000383003138312AF000630B0000030B100A3
:1004D00000300230DF00E001202103138312B2015B
:1004E0007E2A03138312031383125E08013A031951
:1004F000492A5E08003A0319552A602A0800073085
:1005000003138312FB00FF30FA00FB0B882A8B2AAF
:10051000FA0B882A852A7830FA00FA0B8D2A000017
:10052000000008000313831285018B156300080087
:1005300000300313831698180130F1007108003A57
:10054000031DA42A0000982A031383125E08990051
:100550000800083409340A34283414341E342F3483
:1005600029342A342B3427342C3426342D341F34A8
:1005700020342134233422342434253415341634E1
:100580001734193418341A341B340B340C340D342A
:100590000F340E3410341134013402340334053472
:1005A0000434063407341C34123413340034003459
:1005B0001D342E34003408000313831234088A00DB
:1005C0003508820008003834393430340D34703442
:1005D0002C3400340034003400342E3420346D3494
:1005E000003400347A3478347634633462346E34D0
:1005F0006134733464346734663468346A34713413
:100600007734653474347234793475343134323437
:10061000333435343434363437346B3469346F34EE
:10062000003400346C3408343834393430340D3408
:1006300050342C3400340034003400342E34203450
:100640004D34003400345A34583456344334423430
:100650004E344134533444344734463448344A34B5
:100660005134573445345434523459345534313478
:100670003234333435343434363437344B3449340B
:100680004F34003400344C34083438343934303486
:100690000D3429343A3400340034003400343F340B
:1006A00020343E3400340034603427342D34BB34DD
:1006B0007C343C347E349A347B34A8347D342F34FB
:1006C0002734213440348034253423345E342634B6
:1006D00031343234333435343434363437345B34B3
:1006E0002A342834003400345D3408343834393442
:1006F00030340D343D343B340034003400340034A5
:10070000BF342034B53400340034E6349C345F34D4
:10071000E7342B34F134E134DF34F034A534A3343E
:100720005C342234A134E534E834FE342434FD341E
:10073000F9343134323433343534343436343734B4
:10074000A934EC34F23400340034F83408340800AE
:1007500003138312FB01FA01F9018030F800F10C58
:10076000F00C031CBC2B7408F90775080318750FEF
:10077000FA070318FB0A0310F01FC42B7408FA07CA
:1007800075080318750FFB07FB0CFA0CF90CF80C35
:10079000031CAF2B7B08F3007A08F2007908F10004
:1007A0007808F0000800031383125B0803178D001C
:1007B00083168C130C1483120C08F000080003132A
:1007C0008312DB01B6010130B700803003138312BE
:1007D00037020318472C5B08383FF1005B083F3FA6
:1007E00084000008F0007108840070088000370958
:1007F00085005B083F3FF000700884000608800019
:100800005B083F3FF100710884000008F000060813
:10081000F00471088400700880005B083F3FF1001D
:10082000710884000008F0000608F00471088400D4
:10083000700880005B083F3FF100710884000008E9
:10084000F000F00971088400700880005B08463FE2
:10085000F2005B083F3F84000008F1005B08383F6E
:1008600084000008F000F0097108F00572088400A7
:10087000700880005B08463F84000008F0007008A4
:10088000B604DB0A03138312B70D3710E52B0800FB
:10089000031383122408A0002508A1002608A20043
:1008A0002708A300401D672CFF3029020318672C7E
:1008B00003138312A90A2908E4007C202908E40014
:1008C000B9202D08003A031D672C0230AD00031338
:1008D0008312401F7E2C2908003C03187E2C031332
:1008E0008312A9032908E4007C202908E400B92028
:1008F0002D08003A031D7E2C0230AD000130031399
:1009000083124B05F00003198E2C0230DE005921B2
:100910000030A4000230A500A601A7010313831232
:10092000CB1CA22C01304005F000031DA22C02308C
:1009300003138312DE0059210030A4000430A50007
:10094000A601A701031383124B1DB62C01304005ED
:10095000F000031DB62C023003138312DE00592170
:100960000030A4000830A500A601A70103138312DC
:100970004B1ECA2C01304005F000031DCA2C02306A
:1009800003138312DE0059210030A4001030A500AB
:10099000A601A70103138312CB1DE22C01304005F1
:1009A000F0000319D72C0430DE00C721E22C0230FE
:1009B00003138312DE0059210030A4002030A5006B
:1009C000A601A70103138312CB1EFA2C01304005A8
:1009D000F0000319EF2C0530DE00C721FA2C02309D
:1009E00003138312DE0059210030A4004030A5001B
:1009F000A601A701031383124B1F0E2D01304005E2
:100A0000F000031D0E2D023003138312DE00592166
:100A10000030A4008030A500A601A7010130031317
:100A200083124605F0000319252D01304005F00022
:100A3000031D252D023003138312DE0059210030DF
:100A4000A400FF30A500A601A70103138312C61C52
:100A5000332D01304005F000031D332D0130031309
:100A60008312DE00592103138312461D402D0130ED
:100A70004005F000031D402D03138312DE015921B0
:100A80000130031383124905F00003194A2D013088
:100A9000DE00482203138312C91C502DDE014822B8
:100AA0007F220800013003138312DF002E08E000CC
:100AB0002021023003138312DF003208E0002021DE
:100AC000033003138312DF002D08E00020210430DF
:100AD00003138312DF002908E000202105300313EF
:100AE0008312DF002508F0002608F1002708F20035
:100AF000F3017008E00020210800080003138312AE
:100B000036080319852D06210800031383122308D4
:100B1000003C031D952D2208003C031D952D210846
:100B2000003C031D952D2008003C0318A22D013028
:100B300003138312A002031CA102031CA202031CC4
:100B4000A302A82DFF30031383128700A80192226D
:100B5000031383122909F10000302302031DBA2D6B
:100B600000302202031DBA2D00302102031DBA2DD0
:100B7000710820020318C42D031383122009E40016
:100B80007C202009E400B920080003138312DB0154
:100B9000DC01DD010130B70080300313831237021E
:100BA0000318372E5C083F3F84000008CD005C0826
:100BB000383F84000008F0007008CD06DD010130E8
:100BC000CE008030031383124E0203182F2E4E08DE
:100BD0004D05F0000319262E5B08A93FF0000230F6
:100BE0000318013FF1007008B5007108B4000A084D
:100BF000B300DC22DE0033088A005C083F3F84003B
:100C00000008F0004E087005F2005D08F000720860
:100C1000F30070080319122E03138312F30CF3135D
:100C2000FF3F0A2E063003138312F2007308F00010
:100C300072080319212E03138312F00D7010FF3F69
:100C4000192E031383127008DE04982203138312F3
:100C5000DD0ADB0A03138312CE0D4E10E12D0313C0
:100C60008312DC0A03138312B70D3710CC2D080052
:100C700003138312DB01DC010130B7008030031362
:100C8000831237020318822E0130CE008030031306
:100C900083124E0203187A2E5C08463F8400000837
:100CA000F0004E08F0050319722E4F08F000F10114
:100CB0003130F4000030F500A823E330F0070230B3
:100CC0000318013FF1075B08F0070318F10A7008E9
:100CD000B5007108B4000A08B300DC22DE00330856
:100CE0008A00982203138312DB0A03138312CE0DAA
:100CF0004E10462E03138312DC0A03138312B70D22
:100D000037103E2E0130031383124105F4000130E9
:100D10004005F3007308F000F101F00DF10D7010C3
:100D20000030F5007008F4047108F50440303F0508
:100D3000F3007308F000F00CF013F00CF013F00C5B
:100D4000F013F00CF0130030F1007408F004750893
:100D5000F1047008503F84000008CF0008001930EB
:100D600003138312FA00FA0BB32E000000000800F0
:100D70000313831234088A00350882000800FF3FFD
:100D8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F73
:100D9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F63
:100DA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F53
:100DB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F43
:100DC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F33
:100DD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F23
:100DE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F13
:100DF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F03
:100E0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF2
:100E1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE2
:100E2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD2
:100E3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC2
:100E4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB2
:100E5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA2
:100E6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F92
:100E7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F82
:100E8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F72
:100E9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F62
:100EA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F52
:100EB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F42
:100EC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F32
:100ED000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F22
:100EE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F12
:100EF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F02
:100F0000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FF1
:100F1000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FE1
:100F2000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FD1
:100F3000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FC1
:100F4000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FB1
:100F5000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3FA1
:100F6000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F91
:100F7000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F81
:100F8000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F71
:100F9000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F61
:100FA000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F51
:100FB000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F41
:100FC000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F31
:100FD000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F21
:100FE000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F11
:100FF000FF3FFF3FFF3FFF3FFF3FFF3FFF3FFF3F01
:10100000003003138312BF000030C0000030C10065
:101010000030C2000030C3000030C4000030C50002
:101020000030B8000030B9000030BA000030BB001A
:101030000030BC000030BD000030BE000030C600F3
:101040000030C7000030C8000030C9000030CA00BE
:101050000030CB000030CC000030B6000030B700CC
:101060000030CE000030CD00FF30A000FF30A100E6
:101070000030A2000030A3000030A4008030A500A2
:101080000030A6000030A7000030D0000130D100B1
:101090000230D2000230D3000330D4000330D50038
:1010A0000330D6000330D7000030AF000030B0006E
:1010B0000030B1000030AA000030AB000030AC00BE
:1010C0000030AE000030B2000030AD000030A900AA
:1010D0000030A800080000206730031383168F003B
:1010E0000317880189010313831285018316850183
:1010F00083128601FF3083168600831287018316D0
:10110000870181018B110B107F30960020308C00FD
:101110008B171A30FB00FF30FA00FB0B9028932846
:10112000FA0B90288D28E730FA00FA0B952800007A
:1011300002308312DB008A11D3238A15700803134F
:10114000B2007008DE008A1148228A151A30FB00AE
:10115000FF30FA00FB0BAD28B028FA0BAD28AA2807
:10116000E730FA00FA0BB22800000130DB008A11E8
:10117000D3238A1570080313AE007008DE008A11AD
:10118000C7218A151A30FB00FF30FA00FB0BC92873
:10119000CC28FA0BC928C628E730FA00FA0BCE286B
:1011A00000000530DB008A11D3238A150830F100D6
:1011B00070080313A400A50171080319E62803139E
:1011C0008312A40DA50D2410FF3FDD28003003136A
:1011D0008312A600A7000430DB008A11D3238A15EE
:1011E00070080313A9001A30FB00FF30FA00FB0B54
:1011F000FA28FD28FA0BFA28F728E730FA00FA0B4C
:10120000FF2800000330DB008A11D3238A15700801
:101210000313AD007008DE008A1159218A158A1166
:10122000DF238A1503138312C01C1A298A1148244C
:101230008A15302903138312B91C21298A115225DA
:101240008A15031383122F08B5003008B4000A086A
:10125000B3008A11B8268A150313831233088A0053
:10126000031383122A08B5002B08B4000A08B30040
:101270008A11B8268A150313831233088A008A114B
:10128000AF268A150F294329FF3FFF3FFF3FFF3F4E
:04400E00C420FF3F8C
:00000001FF
File diff suppressed because it is too large. Load diff
Binary file not shown.
File diff suppressed because it is too large. Load diff
+41
View File
@@ -0,0 +1,41 @@
[DeviceName]
Value=P16F883
[DeviceClock]
Value=4
[MainUnit]
Value=ADC_USART.c
[DeviceFlags]
Count=12
Value0=_INTOSCIO = $3FFC
Value1=_WDT_OFF = $3FF7
Value2=_PWRTE_ON = $3FEF
Value3=_MCLRE_OFF = $3FDF
Value4=_CP_OFF = $3FFF
Value5=_CPD_OFF = $3FFF
Value6=_BOR_OFF = $3CFF
Value7=_IESO_OFF = $3BFF
Value8=_FCMEN_OFF = $37FF
Value9=_LVP_OFF = $2FFF
Value10=_DEBUG_OFF = $3FFF
Value11=_WRT_OFF = $3FFF
[BuildType]
bType=0
[ProjectFiles]
Count=1
Value0=openKeyboard.c
[HeaderFiles]
Count=0
[ObjLibFiles]
Count=0
[PLDFiles]
Count=0
[EEPROMinfo]
isused=0
[SearchPath]
Count=4
Value0=C:\Programmi\Mikroelektronika\mikroC\Defs\
Value1=C:\Programmi\Mikroelektronika\mikroC\Uses\p16\
Value2=D:\DEVELOPMENT\PROJECTS\micros\openKeyboard\
Value3=C:\Programmi\Mikroelektronika\mikroC\miei\
[IncludePath]
Count=0
@@ -0,0 +1,87 @@
interrupt
exitPowerSave
main
____DoICF
GlobalIniopenKeyboard
Delay_80us
serialSend
____DoICP
Mul_16x16_U
?table___serialMap
Usart_Write
scanSend
____DoICP
?table___scanMap
Usart_Write
lightFade
PWM2_Change_Duty
Mul_16x16_S
PWM1_Change_Duty
Mul_16x16_S
enterPowerSave
turnBacklightOn
PWM2_Change_Duty
Mul_16x16_S
PWM1_Change_Duty
Mul_16x16_S
PWM2_Start
PWM1_Start
nop
saveConfig
EEprom_write
config
Delay_5ms
setupSendMode
EEprom_write
setupUsart
Usart_Init
EEprom_write
setupLightMode
PWM2_Init
PWM1_Init
PWM2_Start
PWM2_Change_Duty
Mul_16x16_S
PWM1_Start
PWM1_Change_Duty
Mul_16x16_S
EEprom_write
turnBacklightOn
PWM2_Change_Duty
Mul_16x16_S
PWM1_Change_Duty
Mul_16x16_S
PWM2_Start
PWM1_Start
PWM2_Stop
PWM1_Stop
PWM2_Change_Duty
Mul_16x16_S
PWM1_Change_Duty
Mul_16x16_S
doScan
setupLightMode
PWM2_Init
PWM1_Init
PWM2_Start
PWM2_Change_Duty
Mul_16x16_S
PWM1_Start
PWM1_Change_Duty
Mul_16x16_S
EEprom_write
turnBacklightOn
PWM2_Change_Duty
Mul_16x16_S
PWM1_Change_Duty
Mul_16x16_S
PWM2_Start
PWM1_Start
PWM2_Stop
PWM1_Stop
setupUsart
Usart_Init
EEprom_write
setupSendMode
EEprom_write
EEprom_read