📄 mainloop.c
字号:
#include <stdio.h>
#include <string.h>
#include <reg51.h> /* special function register declarations */
#include "mainloop.h"
#include "isr.h"
#include "protozlg.h"
/*
//*************************************************************************
// Public static data
//*************************************************************************
*/
extern EPPFLAGS bEPPflags;
extern unsigned char idata GenEpBuf[];
extern unsigned char idata EpBuf[];
extern unsigned int data d12_addr;
extern unsigned int data D12_DATA;
extern unsigned int data D12_COMMAND;
sfr CKCON = 0x8F;//87C52x2用
sbit clksel = P2^0;
//D12中断服务
usb_isr() interrupt 0
{
DISABLE;
fn_usb_isr();//调用D12中断服务子程序
ENABLE;
}
void delayy(short i)
{
int j=0;
int k=0;
k=i*DELAY_VALUE;
while (j<k) j++;
}
unsigned char keyscan()
{
if (PINDRVKEY1==FALSE) //P1_0 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY1==FALSE) //again P1_0 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY1==FALSE) //still p1_0 is 0
return 26;}
if (PINDRVKEY2==FALSE) //P1_1 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY2==FALSE) //again P1_1 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY2==FALSE) //still p1_1 is 0
return 27;}
if (PINDRVKEY3==FALSE) //P1_2 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY3==FALSE) //again P1_2 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY3==FALSE) //still p1_2 is 0
return 28;}
if (PINDRVKEY4==FALSE) //P1_3 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY4==FALSE) //again P1_3 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY4==FALSE) //still p1_3 is 0
return 29;}
if (PINDRVKEY5==FALSE) //P1_4 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY5==FALSE) //again P1_4 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY5==FALSE) //still p1_4 is 0
return 30;}
if (PINDRVKEY6==FALSE) //P1_5 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY6==FALSE) //again P1_5 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY6==FALSE) //still p1_5 is 0
return 31;}
if (PINDRVKEY7==FALSE) //P2_0 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY7==FALSE) //again P2_0 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY7==FALSE) //still p2_0 is 0
return 32;}
if (PINDRVKEY8==FALSE) //P2_1 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY8==FALSE) //again P2_1 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY8==FALSE) //still p2_1 is 0
return 33;}
if (PINDRVKEY9==FALSE) //P2_2 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY9==FALSE) //again P2_2 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY9==FALSE) //still p2_2 is 0
return 34;}
if (PINDRVKEY10==FALSE) //P2_3 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY10==FALSE) //again P2_3 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY10==FALSE) //still p2_3 is 0
return 35;}
if (PINDRVKEY11==FALSE) //P2_4 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY11==FALSE) //again P2_4 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY11==FALSE) //still p2_4 is 0
return 36;}
if (PINDRVKEY12==FALSE) //P2_5 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY12==FALSE) //again P2_5 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY12==FALSE) //still p2_5 is 0
return 37;}
if (PINDRVKEY13==FALSE) //P2_6 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY13==FALSE) //again P2_6 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY13==FALSE) //still p2_6 is 0
return 38;}
if (PINDRVKEY14==FALSE) //P2_7 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY14==FALSE) //again P2_7 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY14==FALSE) //still p2_7 is 0
return 39;}
if (PINDRVKEY15==FALSE) //P3_0 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY15==FALSE) //again P3_0 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY15==FALSE) //still p3_0 is 0
return 40;}
if (PINDRVKEY16==FALSE) //P3_1 IS 0
delayy(DELAY_VALUE); //DELAY
if (PINDRVKEY16==FALSE) //again P3_1 IS 0
{delayy(DELAY_VALUE); //delay again
if (PINDRVKEY16==FALSE) //still p3_1 is 0
return 41;}
return 42;
}
void main(void)
{
P0 = 0xFF;//初始化I/O口
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
// CKCON = 0x00;
CKCON = 0x00;
// if(clksel == 1)
// CKCON = CKCON | 0x01;
D12_DATA = 0xff02; //定义数据地址
D12_COMMAND = 0xff03; //定义命令地址
MCU_D12CS = 0x0;
D12SUSPD = 0x0;
IT0 = 0;//初始化中断
EX0 = 1;
PX0 = 0;
EA = 1;
MCU_D12CS = 0x1;
MCU_D12CS = 0x0;
D12_SetDMA(0x0);
bEPPflags.value = 0;
reconnect_USB();//联接USB总线
/* Main program loop */
while( TRUE ){
if(bEPPflags.bits.configuration)
check_key();//连接正常,调用按键和LED控制处理
usbserve();//USB服务数据处理
} // Main Loop
}
void check_key(void)
{
static unsigned char c, last_key =42;
c =keyscan();
if (c != last_key) {
D12_WriteEndpoint(3, 1, &c);//按键状态改变,发送信息给主机
}
last_key = c;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -