level 9
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#include <graphics.h>
#define LEN sizeof(struct rainDrop)
int rainDropNumber=60;
int downSpeed=20;
struct rainDrop *head;
struct rainCircle
{
int x;
int y;
int r;
int curR;
int rainCircleStep;
};
struct rainDrop
{
int startX;
int startY;
int endY;
int curX;
int curY;
int rainColor;
int rainLineStep;
int rainLineLength;
int status;
struct rainCircle water;
struct rainDrop *next;
};
void initgraphics(void)
{
int gmode,gdriver;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
}
struct rainDrop *creatDrop(void)
{
struct rainDrop *p;
p=(struct rainDrop *)malloc(LEN);
p->startX=rand()%640;
p->startY=rand()%430;
p->endY=430+rand()%50;
p->curX=p->startX;
p->curY=p->startY;
p->rainLineStep=8;
p->rainColor=rand()%15+1;
p->rainLineLength=rand()%10+10;
p->status=0;
p->water.x=p->startX;
p->water.y=p->endY;
p->water.r=rand()%40;
p->water.curR=rand()%2;
p->water.rainCircleStep=rand()%2+1;
p->next=NULL;
return(p);
}
void recreatDrop(struct rainDrop *p)
{
p->startX=rand()%640;
p->startY=rand()%430;
p->endY=430+rand()%50;
p->curX=p->startX;
p->curY=p->startY;
p->rainLineStep=8;
p->rainColor=rand()%15+1;
p->rainLineLength=rand()%10+10;
p->status=0;
p->water.x=p->startX;
p->water.y=p->endY;
p->water.r=rand()%40;
p->water.curR=rand()%2;
p->water.rainCircleStep=rand()%2+1;
}
void creatRain(void)
{
struct rainDrop *p1,*p2;
int i;
p1=p2=creatDrop();
head=p1;
for(i=0;i<rainDropNumber;i++)
{
p2=creatDrop();
p1->next=p2;
p1=p2;
}
}
void updateRainLineData(struct rainDrop *p)
{
if(p->rainLineStep%5==0)
p->rainLineStep++;
p->curY+=p->rainLineStep;
p->startY=p->curY-p->rainLineLength;
}
void drawRainLine(struct rainDrop *p)
{
setcolor(p->rainColor);
line(p->startX,p->startY,p->curX,p->curY);
}
void clearRainLine(struct rainDrop *p)
{
setcolor(BLACK);
line(p->startX,p->startY,p->curX,p->curY);
}
void rainDropDown(struct rainDrop *p)
{
if(p->curY>=p->endY)
{
clearRainLine(p);
p->status=1;
}
else
{
clearRainLine(p);
updateRainLineData(p);
drawRainLine(p);
}
}
void updateRainCircleData(struct rainDrop *p)
{
p->water.curR+=p->water.rainCircleStep;
}
void drawRainCircle(struct rainDrop *p)
{
setcolor(p->rainColor);
circle(p->water.x,p->water.y,p->water.curR);
}
void clearRainCircle(struct rainDrop *p)
{
setcolor(BLACK);
circle(p->water.x,p->water.y,p->water.curR);
}
void fallToWater(struct rainDrop *p)
{
if(p->water.curR>=p->water.r)
{
clearRainCircle(p);
recreatDrop(p);
}
else
{
clearRainCircle(p);
updateRainCircleData(p);
drawRainCircle(p);
}
}
void rain(void)
{
struct rainDrop *p;
p=head;
while(!kbhit())
{
if(p==NULL)
p=head;
else
{
if(p->status==0)
rainDropDown(p);
else
fallToWater(p);
}
delay(downSpeed);
p=p->next;
}
}
void clearAll(void)
{
struct rainDrop *p,*pf;
p=head;
while(p!=NULL)
{
pf=p;
p=p->next;
free(pf);
}
closegraph();
}
main()
{
printf("Input rainDrop Number:");
scanf("%d",&rainDropNumber);
printf("Input down speed:");
scanf("%d",&downSpeed);
randomize();
initgraphics();
creatRain();
rain();
clearAll();
}
2009年07月15日 19点07分
2
level 9
#include "config.h"
#define BEEPCON 1<<7
void __irq IRQ_Eint3(void)
{ uint32 i;
i=IO0SET;
if((i&BEEPCON)==0)
{
IO0SET=BEEPCON;
}
else
{
IO0CLR=BEEPCON;
}
EXTINT=1<<3;
VICVectAddr=0;
}
int main(void)
{ PINSEL1=3<<8;
IO0DIR=BEEPCON;
EXTMODE=1<<3;
EXTPOLAR=0x00;
VICIntSelect=0x000000000;
VICVectCntl0=0x20|17;
VICVectAddr0=(int)IRQ_Eint3;
EXTINT=1<<3;
VICIntEnable=1<<17;
while(1);
return(0);
}
2009年07月15日 19点07分
3
level 9
#include "config.h"
#define BEEPCON 1<<7
void __irq IRQ_Time0&1(void)
{
if((IO0SET&BEEPCON)==0)
{ IO0SET=BEEPCON;
}
else
{ IO0CLR=BEEPCON;
}
T0IR=0x01;
VICVectAddr=0x00;
if((IO1SET&BEEPCON)==0)
{ IO1SET=BEEPCON;
}
else
{
IO1CLR=BEEPCON;
}
T1IR=0x01;
VICVectAddr=0x00
}
void Time0&1Init (void)
{
Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz
Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz
T0PR = 99;
T0MCR = 0x03;
T0MR0 = 110592/2;
T0TCR = 0x03;
T0TCR = 0x01;
T1PR = 99;
T1MCR = 0x02;
T1MR0 = 110592/2;
T1EMR = 0x30;
T1TCR = 0x03;
T1TCR = 0x01;
VICIntSelect = 0x00;
VICVectCntl0 = 0x24;
VICVectAddr0 = (uint32)IRQ_Exception;
VICIntEnable = 0x00000010;
}
int main (void)
{
PINSEL0=0x00000000;
IO0DIR=BEEPCON;
Time0Init();
PINSEL1=0x00000000;
IO1DIR=BEEPCON;
Time1Init();
while(1);
return 0;
}
2009年07月15日 19点07分
4
level 9
TIMER EQU 01H
ORG 0
LJMP 0F30H
ORG 000BH
LJMP INT_T0
ORG 0F30H
LJMP JG4B6
ORG 04B6H
JG4B6: MOV SP,#53H
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#4BH
MOV R0,#00H
MOV TIMER,#20H
MOV SCON,#00H
CLR TI
CLR RI
SETB TR0
SETB ET0
SETB EA
SJMP $
INT_T0: PUSH ACC
PUSH PSW
CLR EA
CLR TR0
MOV TL0,#00H
MOV TH0,#4BH
SETB TR0
DJNZ TIMER,EXIT
MOV TIMER,#20H
MOV DPTR,#CDATA
MOV A,R0
MOVC A,@A+DPTR
CLR TI
CPL A
MOV SBUF,A
INC R0
CJNE R0,#0AH,EXIT
MOV R0,#00H
EXIT: SETB EA
POP PSW
POP ACC
RETI
CDATA: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H
END
2009年07月15日 19点07分
5
level 9
#include<stdio.h>
#define port 0x3f8
Int ch[15];
Main()
{
Int a;
Int i,j;
Int b[6]={88,15,38,26,20,0}
Char c;
Clrscr()
Outportb(port
+3
,0x80);
Outportb(port,0x0C);
Outportb(port+1,0x00);
Outportb(port+3,0x03);
Outportb(port+1,0x00);
Inportb(port+5); /
for(;;){
printf(“\t\tsned data or receive data:(s or r?)\n\n\n”);
c=getchar();
swithch©{
case’s’:
case’S’:{
while(!(inportb(port+5)&0x20));
outportb(port,0x01;
for(i=0;i<6;i++){
a=b[i];
while(!(inportb(port+5)&0x20))delay(100);
outportb(port,a);
printf(“%d\n”,a);
while(!(inportb(port+5)&1))
ch[i]=import(port);
}
delay(10);
for(j=0;j<8;j++); printf(“\n%d\n”,ch[j]);
getchar();
break;
}
Case’r’:
Case’S’:{
while(!(inportb(port+5)&0x20));
outportb(port,0x02;
for(j=0;j<9;j++){
while(!(inportb(port+5)&1));
ch[j]=inportb(import);
}
for(j=0;j<9;j++); printf(“\n%d\n”,ch[j]);
getchar();
break;
}
}
}
}
2009年07月15日 19点07分
6
level 9
#pragma SRC
#include <stdio.h>
#include<reg51.h>
#define TRUE 1
#define FALSE 0
#define LampComm P0_0
#define SelectComm1 P0_1
#define SelectComm2 P0_2
#define SelectComm3 P0_3
#define SelectComm4 P0_4
#define SelectComm5 P0_5
#define SelectComm6 P0_6
#define MACHINECOMM_OK 0x11
#define MACHINECOMM_RET 0x88
#define MACHINECOMM_DATAHEAD 0x5a
#define MACHINECOMM_DATAEND 0xa5
#define DELAY_VALUE 3
s丨bit P0_0=P0^0;
s丨bit P0_1=P0^1;
s丨bit P0_2=P0^2;
s丨bit P0_3=P0^3;
s丨bit P0_4=P0^4;
s丨bit P0_5=P0^5;
s丨bit P0_6=P0^6;
s丨bit P0_7=P0^7;
s丨bit P1_0=P1^0;
s丨bit P1_1=P1^1;
s丨bit P1_2=P1^2;
s丨bit P1_3=P1^3;
s丨bit P1_4=P1^4;
s丨bit P1_5=P1^5;
s丨bit P1_6=P1^6;
s丨bit P1_7=P1^7;
s丨bit P2_0=P2^0;
s丨bit P2_1=P2^1;
s丨bit P2_2=P2^2;
s丨bit P2_3=P2^3;
s丨bit P2_4=P2^4;
s丨bit P2_5=P2^5;
s丨bit P2_6=P2^6;
s丨bit P2_7=P2^7;
s丨bit P3_2=P3^2;
s丨bit P3_3=P3^3;
bit EvRcv=FALSE;
unsigned char rcvdata=0;
void send (char *temp,int j);
void initial (void);
void delay (short i);
void main(void)
{
unsigned char datacomm[6],datarecv[6];
unsigned char count=0,datahand;
datahand= MACHINECOMM_RET;
datacomm[0]= MACHINECOMM_DATAHEAD;
datacomm[5]= MACHINECOMM_DATAEND;
datacomm[1]= ‘w’;
datacomm[2]= ‘o’;
datacomm[3]=’r’;
datacomm[3]=’k’;
initial();
SelectComm6=1;
While(1)
{
If (EvRcv)
{
If(rcvdata== MACHINECOMM_OK)
{ LampComm=TRUE;
delay(DELAY_VALUE);
LampComm=FALSE;
}
2009年07月15日 19点07分
7
level 9
EvRcv=FALSE;
beak;
}
send(&datahand,1);
break;
}
for(;;){while(1)
{if (EvRcv) {
datarecv[count]=rcvdata;
count++;
EvRcv=FALSE;
}
If (count==5) break;
}
If(datarecv[0]==MACHINECOMM_DATAHEAD&&datarecv[5]==MACHINECOMM_DATAEND)
Send (datacomm,6);
}
}
void initial()
{
IP=0x10;
IE=0x97;
TCON=0x05;
TMOD=0x20H;
PCON=80H;
SCON=50H;
TH1=0xF3H;
TL1=0xF3H;
PCON=0x80|PCON;
TR1=1;
SelectComm6=0;
SelectComm5=0;
SelectComm4=0;
SelectComm3=0;
SelectComm2=0;
SelectComm1=0;
}
void send (unsigned char *temp,int j)
{
Int i=0;
LampComm=TRUE;
EA=0;
for (i=0;i<=j-1;i++)
{
ACC=* (temp+i);
TB=P;
S丨BUF=ACC;
While (TI==0);
TI=0;
}
EA=1;
LampComm=FALSE;
}
Void Rcv_INT(void) interrup1
{
LampComm=TRUE;
If (RI)
{
ACC=S丨BUF
If (P==B8)
{
Rcvdata=ACC;
Evrcv=TRUE;
}
RI=0;
}
LampComm=FALSE;
}
Void delay (int i)
{
Int j=0;
I=i*DELAY_VALUE;
While (j<i) j++;
}
2009年07月15日 19点07分
8
level 9
DATA SEGMENT
ORG 3000H
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
BUF DB 01H,02H,03H,04H
SEL DB 0EOH,0D0H,0B0H,070H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,89H
OUT 63,AL
MOV CX,4
LEA SI,SEL
LEA DI,BUF
SHOW: MOV AL,[SI]
OUT 60H,AL
MOV AL,[DI]
MOV BX,OFFSET TAB
XLAT TAB
OUT 61H,AL
CALL DELAY
INC SI
INC DI
LOOP SHOW
;
DELAY: PUSH AX
PUSH CX
MOV CX,0040H
T1: MOV AX,0300H
T2: DEC AX
JNZ T2
LOOP T1
POP CX
POP AX
RET
;
CODE ENDS
END START
2009年07月15日 19点07分
9
level 9
DATA SEGMENT
ORG 3000H
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
SEL DB 07H,0BH,0BH,0EH
VAR1 DB 3FH,3FH,3FH,3FH,3FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,89H
OUT 63H,AL
CHECK: MOV AL,0
OUT 61H,AL
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ KEY
CALL DISP
JMP CHECK
KEY: CALL DELAY
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ KEY11
JMP CHECK
KEY11: MOV AL,07H
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY12
CALL KEY6
JMP SLACK
KEY12: TEST AL,10H
JNZ KEY21
CALL KEY1
JMP SLACK
KEY21: MOV AL,0BH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY22
CALL KEY4
JMP SLACK
KEY22: TEST AL,10H
JNZ KEY31
CALL KEY3
2009年07月15日 20点07分
10
level 9
JMP SLACK
KEY31: MOV AL,0DH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY32
CALL KEY2
JMP SLACK
KEY32: TEST AL,10H
JNZ KEY41
CALL KEY5
JMP SLACK
KEY41: MOV AL,0EH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY42
CALL KEY0
JMP SLACK
KEY42: TEST AL,10H
JNZ KEYOVER
CALL KEY7
KEYOVER:JMP SLACK
;
;---------------------------------
KEY0: CALL LP1
MOV AL,3FH
MOV [SI+3],AL
CALL DISP
RET
;---------------------------------
KEY1: CALL LP1
MOV AL,06H
MOV [SI+3],AL
CALL SHOW
RET
;----------------------------------
KEY2: CALL LP1
MOV AL,5BH
MOV [SI+3],AL
CALL DISP
RET
;-----------------------------------
KEY3: CALL LP1
2009年07月15日 20点07分
11
level 9
MOV AL,4FH
MOV [SI+3],AL
CALL DISP
RET
;-----------------------------------
KEY4: CALL LP1
MOV AL,66H
MOV [SI+3],AL
CALL DISP
RET
;-------------------------------------
KEY5: CALL LP1
MOV AL,6DH
MOV [SI+3],AL
CALL DISP
RET
;--------------------------------------
KEY6: CALL LP1
MOV AL,7DH
MOV [SI+3],AL
CALL DISP
RET
;-------------------------------------
KEY7: CALL LP1
MOV AL,07H
MOV [SI+3],AL
CALL DISP
RET
;----------------------------------------
LP1: MOV CX,0003H
LEA SI,VAR1
LP2: MOV AL,[SI+2]
MOV [SI+3],AL
DEC SI
LOOP LP2
RET
;-----------------------------------------
DISP: LEA SI,SEL
2009年07月15日 20点07分
12
level 9
LEA DI,VAR1
MOV DL,[DI+3]
CMP DL,3FH
JNZ DIR3
MOV DL,[DI+2]
CMP DL,3FH
JNZ DIR2
MOV DL,[DI+1]
CMP DL,3FH
JNZ DIR1
JNZ DIR0
DIR3: MOV CX,0004H
JMP DIR
DIR2: MOV CX,0003H
JMP DIR
DIR1: MOV CX,0002H
JMP DIR
DIR0: MOV CX,0001H
DIR: MOV AL,[SI]
OUT 61H,AL
MOV AL,[DI]
OUT 60H,AL
CALL DELAY
INC SI
INC DI
LOOP DIR
RET
;-----------------------------------------
DELAY: PUSH AX
PUSH CX
DELAY1:MOV CX,0001H
MOV AX,0040H
DELAY2:DEC AX
JNZ DELAY2
LOOP DELAY1
POP CX
POP AX
RET
;-----------------------------------------
SLACK: CALL DISP
MOV AL,00H
OUT 61H,AL
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ SLACK
JMP CHECK
CODE ENDS
END START
2009年07月15日 20点07分
13
level 9
DATA SEGMENT
ORG 3000H
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
SEL DB 07H,0BH,0BH,0EH
VAR1 DB 3FH,3FH,3FH,3FH,3FH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,89H
OUT 63H,AL
CHECK: MOV AL,0
OUT 61H,AL
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ KEY
CALL DISP
JMP CHECK
KEY: CALL DELAY
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ KEY11
JMP CHECK
KEY11: MOV AL,07H
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY12
CALL KEY6
JMP SLACK
KEY12: TEST AL,10H
JNZ KEY21
CALL KEY1
JMP SLACK
KEY21: MOV AL,0BH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY22
CALL KEY4
JMP SLACK
KEY22: TEST AL,10H
JNZ KEY31
CALL KEY3
2009年07月15日 20点07分
14
level 9
JMP SLACK
KEY31: MOV AL,0DH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY32
CALL KEY2
JMP SLACK
KEY32: TEST AL,10H
JNZ KEY41
CALL KEY5
JMP SLACK
KEY41: MOV AL,0EH
OUT 61H,AL
IN AL,62H
TEST AL,08H
JNZ KEY42
CALL KEY0
JMP SLACK
KEY42: TEST AL,10H
JNZ KEYOVER
CALL KEY7
KEYOVER:JMP SLACK
;
;---------------------------------
KEY0: CALL LP1
MOV AL,3FH
MOV [SI+3],AL
CALL DISP
RET
;---------------------------------
KEY1: CALL LP1
MOV AL,06H
MOV [SI+3],AL
CALL SHOW
RET
;----------------------------------
KEY2: CALL LP1
MOV AL,5BH
MOV [SI+3],AL
CALL DISP
RET
;-----------------------------------
KEY3: CALL LP1
2009年07月15日 20点07分
15
level 9
MOV AL,4FH
MOV [SI+3],AL
CALL DISP
RET
;-----------------------------------
KEY4: CALL LP1
MOV AL,66H
MOV [SI+3],AL
CALL DISP
RET
;-------------------------------------
KEY5: CALL LP1
MOV AL,6DH
MOV [SI+3],AL
CALL DISP
RET
;--------------------------------------
KEY6: CALL LP1
MOV AL,7DH
MOV [SI+3],AL
CALL DISP
RET
;-------------------------------------
KEY7: CALL LP1
MOV AL,07H
MOV [SI+3],AL
CALL DISP
RET
;----------------------------------------
LP1: MOV CX,0003H
LEA SI,VAR1
LP2: MOV AL,[SI+2]
MOV [SI+3],AL
DEC SI
LOOP LP2
RET
;-----------------------------------------
DISP: LEA SI,SEL
2009年07月15日 20点07分
16
level 9
LEA DI,VAR1
MOV DL,[DI+3]
CMP DL,3FH
JNZ DIR3
MOV DL,[DI+2]
CMP DL,3FH
JNZ DIR2
MOV DL,[DI+1]
CMP DL,3FH
JNZ DIR1
JNZ DIR0
DIR3: MOV CX,0004H
JMP DIR
DIR2: MOV CX,0003H
JMP DIR
DIR1: MOV CX,0002H
JMP DIR
DIR0: MOV CX,0001H
DIR: MOV AL,[SI]
OUT 61H,AL
MOV AL,[DI]
OUT 60H,AL
CALL DELAY
INC SI
INC DI
LOOP DIR
RET
;-----------------------------------------
DELAY: PUSH AX
PUSH CX
DELAY1:MOV CX,0001H
MOV AX,0040H
DELAY2:DEC AX
JNZ DELAY2
LOOP DELAY1
POP CX
POP AX
RET
;-----------------------------------------
SLACK: CALL DISP
MOV AL,00H
OUT 61H,AL
IN AL,62H
AND AL,18H
CMP AL,18H
JNZ SLACK
JMP CHECK
CODE ENDS
END START
2009年07月15日 20点07分
17