📄 main.c
字号:
#include "ds89c4xx.h"
#include "mytype.h"
#include "chapter9.h"
#include "d12ci.h"
#include "uart0.h"
#include "key.h"
void SysInit(void);
void InterruptInit(void);
void ep1_txdone(void);
void ep1_rxdone(void);
//void main_txdone(void);
//void main_rxdone(void);
uint8 xdata *pt;
code uint8 billow[11][60] = {
"*********************************************************\r\n",
"***** author:billowtust *****\r\n",
"***** date: ",__DATE__," *****\r\n",
"***** time: ",__TIME__," *****\r\n",
"***** CPU: DS89C450MNG *****\r\n",
"***** Tianjin University of Science & Technology. *****\r\n",
"*********************************************************\r\n"};
void main(void)
{
uint8 idata i;
uint16 idata inter;
//PMR |= 0x01; //访问片内1KB SRAM
bEPPflags.value = 0;
SysInit();
UartInit0();
KeyInit();
for(i=0;i<11;i++)
{
PutString0(billow[i],200);
}
PutString0("System is running......\r\n",200);
readchipid();
reconnect_USB(); //先断开USB,再连接
D12_SetEndpointEnable(1);
while(1)
{
if(!P32)
{
inter = D12_ReadInterruptRegister();
if(inter & D12_INT_BUSRESET)
{
bEPPflags.bits.bus_reset = 1;
#ifdef debug
PutString0("usb bus reset\r\n",50);
#endif
}
//if(inter & D12_INT_EOT)
// dma_eot();
if(inter & D12_INT_SUSPENDCHANGE)
{
bEPPflags.bits.suspend = 1;
#ifdef debug
PutString0("suspend status changed\r\n",50);
#endif
}
if(inter & D12_INT_ENDP0OUT) //输出中断 OUT中断
{
ep0_rxdone();
if(bEPPflags.bits.setup_packet)
{
bEPPflags.bits.setup_packet = 0;
control_handler();
}
}
if(inter & D12_INT_ENDP0IN) //输入中断 IN中断
ep0_txdone();
if(inter & D12_INT_ENDP1IN)
ep1_txdone();
if(inter & D12_INT_ENDP1OUT)
ep1_rxdone();
//if(inter & D12_INT_ENDP2IN)
//main_txdone();
//if(inter & D12_INT_ENDP2OUT)
//main_rxdone();
}
}
}
void SysInit(void)
{
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
pt = 0x0000;
}
void InterruptInit(void)
{
EA = 0;
IT0 = 0; //外部中断0电平触发,低电平有效
EX0 = 1; //允许外部中断
IP1 = 0;
IP0 = 0; //IP 清0,所有中断都为最低优先级
EA = 1; //总中断开关,状态:开
}
void ep1_txdone(void)
{
uint8 idata temp[3]={0x55,0xaa,0x5a};
D12_ReadLastTransactionStatus(3);
KeyChangeable = 0; //禁止修改按键值
if(KeyPress) //如果有按键按下
{
if(KeyPress&(KEY1)) //左Ctrl键
{
temp[0] = 0x01;
}
else
{
temp[0] = 0x10;
}
if(KeyPress&(KEY2)) //左shift键
{
temp[1] = 0x02;
}
else
{
temp[1] = 0x20;
}
}
if(KeyUp||KeyDown)
{
KeyUp=0;
KeyDown=0;
D12_WriteEndpoint(3,2,temp);
}
KeyChangeable = 1; //允许修改按键值
}
void ep1_rxdone(void)
{
uint8 idata len;
D12_ReadLastTransactionStatus(2);
len = D12_ReadEndpoint(2,16,pt);
if(len != 0)
{
P2 = ~(*pt);
}
}
/*uint8 idata InBuffer[8];
void main_txdone(void)
{
uint8 idata i;
D12_ReadLastTransactionStatus(5);
KeyChangeable = 0; //禁止修改按键值
if(KeyPress) //如果有按键按下
{
if(KeyPress&(KEY1)) //左shift键
{
InBuffer[0] |= 1 << 1;
}
else
{
InBuffer[0] &= ~(1 << 1);
}
i=2;
if(KeyPress&(KEY2))
{
InBuffer[i++] = 0x04; //a键
}
if(KeyPress&(KEY3))
{
InBuffer[i++] = 0x05; //b键
}
if(KeyPress&(KEY4))
{
InBuffer[i++] = 0x06; //c键
}
if(KeyPress&(KEY5))
{
InBuffer[i++] = 0x07; //d键
}
if(KeyPress&(KEY6))
{
InBuffer[i++] = 0x08; //e键
}
if(KeyPress&(KEY7))
{
InBuffer[i++] = 0x09; //f
}
if(KeyPress&(KEY8))
{
InBuffer[i++] = 0x39; //Caps Lock键
}
for(;i<8;i++)
{
InBuffer[i] = 0; //多余的清0
}
}
else //如果无按键按下,则返回0
{
for(i=0;i<8;i++)
{
InBuffer[i] = 0;
}
}
if(KeyUp||KeyDown)
{
KeyUp=0;
KeyDown=0;
D12_WriteEndpoint(5,8,InBuffer);
}
KeyChangeable = 1; //允许修改按键值
}
void main_rxdone(void)
{
uint8 len;
static uint8 idata flag1 = 0;
D12_ReadLastTransactionStatus(4);
len = D12_ReadEndpoint(4,64,pt);
if(len != 0)
{
P2 = ~(*pt);
}
if(flag1 == 0)
{
D12_WriteEndpoint(5,0,0);
flag1++;
}
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -