if(x_bit<8) //该点位于高八位 { if(clour==0) //画点 { data_H=read_H|(1<<(7-x_bit)); //把1左移7-x_bit位 } else { data_H=read_H&~(1<<(7-x_bit)); }
data_L=read_L; } else //该点位于低八位 { data_H=read_H; if(clour==0) { data_L=read_L|(1<<(15-x_bit)); } else { data_L=read_L&~(1<<(15-x_bit)); } } Write_Cmd(0x80+y_pos); Write_Cmd(0x80+x_pos); Write_Data(data_H); //写高八位数据 Write_Data(data_L); //写低八位数据
Write_Cmd(0x30); //回到基本指令集 Write_Cmd(0x0c); }
/*------------------------------------------------------------------------------------------------------------ 在整个屏幕上画一条直线
-------------------------------------------------------------------------------------------------------------*/
void Draw_zhi(uchar X1,uchar X2,uchar Y) //X1代表线首横坐标,X2代表线尾横坐标,Y代表纵坐标 { uchar i,temp ;
if(X1>X2) //X轴上,起点大于终点,交换数据 {
temp=X2; X2=X1;
X1=temp; }
for(i=X1;i<=X2;i++) {
Draw_Point(i,Y,0); } }
/*------------------------------------------------------------------------------------------------------------ 在整个屏幕上画一条竖线
-------------------------------------------------------------------------------------------------------------*/ void Draw_shu(uchar X,uchar Y1,uchar Y2) //Y1代表线首纵坐标,Y2代表线尾纵坐标,X代表横坐标 {
uchar i ,temp;
if(Y1>Y2) //X轴上,起点大于终点,交换数据 {
temp=Y2; Y2=Y1;
Y1=temp; } for(i=Y1;i<=Y2;i++) {
Draw_Point(X,i,0); } }
/*------------------------------------------------------------------------------------------------------------ 在整个屏幕上画一条线
-------------------------------------------------------------------------------------------------------------*/ void Draw_line(uchar x0,uchar y0,uchar x1,uchar y1) //只能是横线或者是竖线,(x0,y0)为线首坐标。(x1,y1)为线尾坐标 { int dx,dy; //定义X.Y轴上增加的变量值
dx=x1-x0; //X轴方向上的增量 dy=y1-y0; //Y轴方向上的增量 if(dx==0) Draw_shu(x0,y0,y1);
if(dy==0) Draw_zhi(x0,x1,y0); }
/*------------------------------------------------------------------------------------------------------------ 画边界函数
-------------------------------------------------------------------------------------------------------------*/ void Draw_all_lines() {
uchar i;
for(i=0;i /*------------------------------------------------------------------------------------------------------------ 开始点,蛇头 -------------------------------------------------------------------------------------------------------------*/ void Stat_Point() { if(c[0]==0) { a[0]=a[0]+1; //如果向右,直线长度加1 } else if(c[0]==1) { b[0]=b[0]+1; } else if(c[0]==2) { a[0]=a[0]-1; } else { b[0]=b[0]-1; } } /*------------------------------------------------------------------------------------------------------------ 最后点,蛇尾 -------------------------------------------------------------------------------------------------------------*/ void Last_Point() { if(c[flag-1]==0) //如果第一次拐之前,方向向右 { a[flag]=a[flag]+1; //蛇尾横坐标加1 } else if(c[flag-1]==1) { b[flag]=b[flag]+1; } else if(c[flag-1]==2) { a[flag]=a[flag]-1; } else { b[flag]=b[flag]-1; } if((a[flag]==a[flag-1])&&(b[flag]==b[flag-1])) { flag--; } } /*------------------------------------------------------------------------------------------------------------ 加点,如果吃到食物,就产生新的食物,并画上该点,把该点作为蛇头 -------------------------------------------------------------------------------------------------------------*/ void Add_Point() { if(c[0]==0) { if((a[0]+1)==x&&(b[0]==y)) { a[0]=x; pointstatus=1; allpoints++; } } else if(c[0]==1) { if((b[0]+1)==y&&(a[0]==x)) { b[0]=y; pointstatus=1; allpoints++; } } else if(c[0]==2) { if((a[0]-1)==x&&(b[0]==y)) { a[0]=x; pointstatus=1; allpoints++; } } else { if((a[0])==x&&(b[0]-1)==y) { b[0]=y; pointstatus=1; allpoints++; } } Draw_Point(x,y,0); //画上一个点,即产生食物 if(pointstatus) { beep=0; Delayms(10); beep=1; pointstatus=0;