?? 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; //訪問片內(nèi)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電平觸發(fā),低電平有效
EX0 = 1; //允許外部中斷
IP1 = 0;
IP0 = 0; //IP 清0,所有中斷都為最低優(yōu)先級
EA = 1; //總中斷開關(guān),狀態(tài):開
}
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++;
}
} */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -