📄 switch.c
字号:
#include <stdio.h>
#include <ctype.h>
#include "standard.h"
#include "i2c.h"
#include "queue.h"
// 8 Switch address
#define I2C_PCF8574A_ID1 0x72
Queue xdata switch_buff;
u8 I2C_Read_Switch()
{
u8 Result = 0;
I2C_Send_Start(); // Generate START condition
// Send SLAVE address with read request
if (I2C_Write_Byte(I2C_PCF8574A_ID1 | I2C_READ))
{
printf("Switch Error (slave doesn't ack)\n");
return 0;
}
Result = I2C_Read_Byte(); // Read switch content
// Don't perform a MASTER ACK
I2C_Send_Stop();
return(Result);
}
void ScanSwitch (void) small using 3
{
u8 sw1,sw2,sw3,sw4,sw5,sw6,sw7,sw8;
bit releaseSW; // Do not repeat storing switch if hold press
switch (I2C_Read_Switch()) {
//case 0xff: printf("No Push\n");
case 0xfe: sw1++;
sw2=0;sw3=0;sw4=0;sw5=0;sw6=0;sw7=0;sw8=0;
if ((sw1>=10)&releaseSW) {
AddQueue('1',&switch_buff);
sw1=0;
releaseSW=0;
}
//printf("Press SW1\n");
break;
case 0xfd: sw2++;
sw1=0;sw3=0;sw4=0;sw5=0;sw6=0;sw7=0;sw8=0;
if ((sw2>=10)) {
AddQueue('2',&switch_buff);
sw2=0;
//releaseSW=0;
}
//printf("Press SW2\n");
break;
case 0xfb: sw3++;
sw1=0;sw2=0;sw4=0;sw5=0;sw6=0;sw7=0;sw8=0;
if ((sw3>=10)&releaseSW) {
AddQueue('3',&switch_buff);
sw3=0;
releaseSW=0;
}
//printf("Press SW3\n");
break;
case 0xf7: sw4++;
sw1=0;sw2=0;sw3=0;sw5=0;sw6=0;sw7=0;sw8=0;
if ((sw4>=10)&releaseSW) {
AddQueue('4',&switch_buff);
sw4=0;
releaseSW=0;
}
//printf("Press SW4\n");
break;
case 0xef: sw5++;
sw1=0;sw2=0;sw3=0;sw4=0;sw6=0;sw7=0;sw8=0;
if ((sw5>=10)&releaseSW) {
AddQueue('5',&switch_buff);
sw5=0;
releaseSW=0;
}
//printf("Press SW5\n");
break;
case 0xdf: sw6++;
sw1=0;sw2=0;sw3=0;sw4=0;sw5=0;sw7=0;sw8=0;
if ((sw6>=10)) {
AddQueue('6',&switch_buff);
sw6=0;
//releaseSW=0;
}
//printf("Press SW6\n");
break;
case 0xbf: sw7++; //Decrease volumn allow to hold key
sw1=0;sw2=0;sw3=0;sw4=0;sw5=0;sw6=0;sw8=0;
if (sw7>=10) {
AddQueue('7',&switch_buff);
sw7=0;
}
//printf("Press SW7\n");
break;
case 0x7f: sw8++; //Increase volumn allow to hold key
sw1=0;sw2=0;sw3=0;sw4=0;sw5=0;sw6=0;sw7=0;
if (sw8>=10) {
AddQueue('8',&switch_buff);
sw8=0;
}
//printf("Press SW8\n");
break;
default: sw1=0;sw2=0;sw3=0;sw4=0;sw5=0;sw6=0;sw7=0;sw8=0;
releaseSW=1;
break;
}
}
#if 0
// Keypad address
#define I2C_PCF8574A_ID0 0x70
//#define ROWCOL P1
void I2C_Write_Keypad(u8 content)
{
I2C_Send_Start(); // Generate START condition
// Send SLAVE address with write request
if (I2C_Write_Byte(I2C_PCF8574A_ID0 | I2C_WRITE))
{
printf("Keypad Error Wr address (slave doesn't ack)\n");
return;
}
// Send content to memory address
if (I2C_Write_Byte(content))
{
printf("Keypad Error Wr content (slave doesn't ack)\n");
return;
}
I2C_Send_Stop();
return;
}
u8 I2C_Read_Keypad()
{
u8 Result = 0;
I2C_Send_Start(); // Generate START condition
// Send SLAVE address with read request
if (I2C_Write_Byte(I2C_PCF8574A_ID0 | I2C_READ))
{
printf("Keypad Error Rd address (slave doesn't ack)\n");
return 0;
}
Result = I2C_Read_Byte(); // Read switch content
// Don't perform a MASTER ACK
I2C_Send_Stop();
return(Result);
}
Queue xdata key_buff;
u16 xdata oldscan=0xFFFF;
u16 xdata newscan=0xFFFF;
u16 xdata newpush=0;
u16 xdata newrelease=0;
u8 xdata rowcnt=0;
u8 xdata k=0;
u8 xdata l=0;
u8 xdata n=0;
bit numkey=0;
bit big=1;
bit scrollmode=0;
bit scrollup=0;
bit scrolldown=0;
bit scrollhome=0;
bit scrollend=0;
bit scrollpup=0;
bit scrollpdown=0;
bit scrollleft=0;
bit scrollright=0;
bit next=0;
bit previous=0;
bit enter=0;
bit backsp=0;
bit menu=0;
bit standby=0;
bit tempk=0;
bit surek=0;
u8 xdata tempkey;
u8 xdata surekey;
u8 xdata fastkey=0;
u8 code *smallkeys[] =
{
"+-.?!&1", "abc2", "def3", "#", "ghi4", "jkl5", "mno6", "$", "pqrs7", "tuv8", "wxyz9", "%", "^", " 0", "@", "_"
};
void storekey(u16 newp_l, u8 c0, u8 c1, u8 c2, u8 c3, u8 c4, u8 c5, u8 c6, u8 c7, u8 c8, u8 c9, u8 c10, u8 c11, u8 c12, u8 c13, u8 c14, u8 c15) using 3
{
u16 a;
u8 b;
if(newp_l) {
tempk=0;
a=1;
for (b=0;b<16;b++) {
if (newp_l&a) {
switch(b) {
case 0: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c0;
AddQueue(c0,&key_buff);
} else {
surekey=toupper(c0);
AddQueue(toupper(c0),&key_buff);
}
}
break;
case 1: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c1;
AddQueue(c1,&key_buff);
} else {
surekey=toupper(c1);
AddQueue(toupper(c1),&key_buff);
}
}
break;
case 2: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c2;
AddQueue(c2,&key_buff);
} else {
surekey=toupper(c2);
AddQueue(toupper(c2),&key_buff);
}
}
break;
case 3: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c3;
AddQueue(c3,&key_buff);
} else {
surekey=toupper(c3);
AddQueue(toupper(c3),&key_buff);
}
menu=1;
}
break;
case 4: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c4;
AddQueue(c4,&key_buff);
} else {
surekey=toupper(c4);
AddQueue(toupper(c4),&key_buff);
}
}
break;
case 5: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c5;
AddQueue(c5,&key_buff);
} else {
surekey=toupper(c5);
AddQueue(toupper(c5),&key_buff);
}
}
break;
case 6: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c6;
AddQueue(c6,&key_buff);
} else {
surekey=toupper(c6);
AddQueue(toupper(c6),&key_buff);
}
}
break;
case 7: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c7;
AddQueue(c7,&key_buff);
} else {
surekey=toupper(c7);
AddQueue(toupper(c7),&key_buff);
}
}
break;
case 8: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c8;
AddQueue(c8,&key_buff);
} else {
surekey=toupper(c8);
AddQueue(toupper(c8),&key_buff);
}
}
break;
case 9: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c9;
AddQueue(c9,&key_buff);
} else {
surekey=toupper(c9);
AddQueue(toupper(c9),&key_buff);
}
}
break;
case 10: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c10;
AddQueue(c10,&key_buff);
} else {
surekey=toupper(c10);
AddQueue(toupper(c10),&key_buff);
}
}
break;
case 11: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c11;
AddQueue(c11,&key_buff);
} else {
surekey=toupper(c11);
AddQueue(toupper(c11),&key_buff);
}
}
break;
case 12: if (!scrollmode) {
surek=1;
surekey=c12;
AddQueue(c12,&key_buff);
//AddQueue(0x08,&key_buff);
//surekey=0x08;
}
break;
case 13: if (!scrollmode) {
surek=1;
if (!big) {
surekey=c13;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -