哪位大哥能帮忙对这段程序做一个注释啊?

哪位大哥能帮忙对这段程序做一个注释啊?,第1张

//总感觉这段代码应该编译不过去,有些地方写的好像也不是很合逻辑

//这段代码可以用吗?

//注释的不是很完全,不过希望对你有帮助

/////////////////////////////////

// 这个是C51单片机的程序 //

/////////////////////////////////

#include <reg51.h>//包含进51的头文件

#define uchar unsigned char

#define SNAKE 20

#define TIME 50

#define SPEED 71

//#define keyenable 1

//sbit up=P0^0

//----------定义引角地址 Start-----------------

sbit keyenable=P3^6

sbit keyy=P0^2

sbit up=P3^3

sbit down=P3^1

sbit right=P3^2

sbit left=P3^4

//----------定义引角地址 End-----------------

uchar x[SNAKE+1]

uchar y[SNAKE+1]

uchar time,n,i,e

//这是个延时子函数,单位为 毫秒,是通过单片机的指定执行时间实现的

void delay(char MS)

{

char us,usn

while(MS!=0)

{

usn = 0

while(usn!=0)

{

us=0xff

while (us!=0){us-}

usn-

}

MS-

}

}

//此按数用来判断,是否有按键被按下,如果没有按键按下返回0 ,否而返回1

bit knock()

{

bit k

k=0

if(x[1]>7||y[1]>7) k=0

return k

}

void turnkey()

{//up=1

if(keyenable)

{

if(left)

{

addy=0

if(addx!=1)

addx=1

else

addx=1

}

if(right)

{

addy=0

if(addx!=1)

addx=1

else

addx=1

}

if(up)

{

addx=0

if(addy!=1)

addy=1

else addy=1

}

if(down)

{

addx=0

if(addy!=1)

addy=1

else

addy=1

}

{

addy=0

if(keyx)

if(addx==1)

addx=1

else

addx=1

else

if(addx==1)

addx=1

else

addx=1

}

else

{

addx=1

if(keyx)

if(addy==1)

addy=1

else

addy=1

else

if(addy==1)

addy=1

else

addy=1

}

}

}

uchar mux(uchar temp)

{

if(temp==7)return 128

if(temp==6)return 64

if(temp==5)return 32

if(temp==4)return 16

if(temp==3)return 8

if(temp==2)return 4

if(temp==1)return 2

if(temp==0)return 1

return 0

}

void timer0(uchar k)

{

while(k--)

{

for(i=0i<SNAKE+1i++)

{

P2=mux(x[i])

P1=255-mux(y[i])

turnkey()

delay(TIME)//延时50ms

P2=0x00

P1=0xff

}

}

}

void main(void)

{

e=SPEED

P0=0x00

P1=0xff

P2=0x00

P3=0x00

while(1)

{

//初始化变量

//if(keyenable==1){P1=0x00P2=0xff}else{P1=0xffP2=0x00}

for(i=3i<SNAKE+1i++) x[i]=100

for(i=3i<SNAKE+1i++) y[i]=10

x[0]=4y[0]=4 x[1]=1y[1]=0

x[2]=0y[2]=0

addx=0addy=0

//k=1

//等待连接P3^6的按钮按下,如果按下跳出循环进行下一步 *** 作,这个应该是个"开始按钮"

while(1)

{

if(keyenable)break

timer0(1)

}

while(1)

{

timer0(e)

if(knock()){e=SPEEDbreak}

{

n++

if(n==SNAKE+1)

{

n=3e=e-10

for(i=3i<SNAKE+1i++)x[i]=10

for(i=3i<SNAKE+1i++)y[i]=100

}

x[0]=x[n-2]

y[0]=y[n-2]

}

for(i=n-1i>1i--){x[i]=x[i-1]y[i]=y[i-1]}

//x[n-1]=x[2]y[n-1]=y[2]

x[1]=x[2]+addxy[1]=y[2]+addy

}

}

}

分支定界法:把全部可行解空间反复的分割为越来越小的子集;并且对子集内的解集计算一个目标下界(最小值问题),称为定界。

算法过程:

假设:A问题是要求解的整数规划问题,与之对应的线性规划问题为B(即去除整数约束),z*是A的最优解,~z是任一可行解,z~是B的最优解。

(1) 分支,在B的最优解中任选一个不符合整数条件的变量xj,其值为bj,以[bj]表示不大于bj的整数。构造两个约束条件xj<=[bj]和xj>=[bj]+1,将这两个条件加入B问题,分支成为新的规划B1和B2问题

定界,以B1和B2问题求解,与其他问题的解的结果中,找到最优目标函数的最大值作为新的上界~z。从已符合整数条件的各个分支中,找到目标函数值为最大者为新的下界~z,若无作用~z=0

(2) 比较与剪支,各分支的最优目标函数中若有小于z~者,则剪去这一支,即以后不再考虑了。若大于~z,且不符合整数条件,则重复(1)步骤。直到最后得到z*=~z为止。

知道原理理解就好了。其实可以不去理解程序本身的,知道原理自己也可以编程的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11330313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存