下面是我打的C编程, 但有一点是有问题, 使用两位数码管
当红:蓝是40:40时, 红队赢一球, 红队加分不是显示"A:40", 是显示"19:40"(下面红队加分的第二个if), 然后当蓝队再赢一球, 红队是可以正常由"19:40" 变回"40:40", 问题是出在哪呢?
怎样改才可以当40:40时, 再赢一球是显示"A"
谢谢大大们啊
if(key_red_add==1) 红队加分
{
key_red_add=0;
if(red_mark==0x28 && blue_mark == 0x77)
{
blue_mark = 0x28;
}
else
if(red_mark==0x28 && blue_mark==0x28)
{
red_mark = 0x77;
}
else
if(red_mark==0x77 &&blue_mark==0x28)
{
red_mark == 0x00;
blue_mark == 0x00;
}
else
if(red_mark==0x28 && blue_mark<0x28)
{
red_mark == 0x00;
blue_mark == 0x00;
}
else
if(red_mark==0x1e)
{
red_mark+=10;
}
else
if(red_mark<0x1e)
{
red_mark+=15;
}
}
if(key_red_mul==1) 红队减分
{
key_red_mul=0;
if(red_mark==0x77)
{
red_mark = 0x28;
}
else
if(red_mark==0x28)
{
red_mark-=10;
}
else
if(red_mark==0x1e)
{
red_mark-=15;
}
if(red_mark<0x1e)
{
red_mark-=15;
}
}
if(key_blue_add==1)//蓝队加分
{
key_blue_add=0;
if(blue_mark==0x28 && red_mark==0x77)
{
red_mark = 0x28;
}
else
if(blue_mark==0x28&& red_mark==0x28)
{
blue_mark = 0x77;
}
else
if(blue_mark==0x28 && red_mark<0x28)
{
red_mark==0x00;
blue_mark==0x00;
}
else
if(blue_mark==0x77 &&red_mark==0x28)
{
red_mark == 0x00;
blue_mark == 0x00;
}
else
if(blue_mark==0x1e)
{
blue_mark+=10;
}
else
if(blue_mark<0x1e)
{
blue_mark+=15;
}
}
if(key_blue_mul==1)//蓝队减分
{
key_blue_mul=0;
if(blue_mark==0x77)
{
blue_mark = 0x28;
}
else
if(blue_mark==0x28)
{
blue_mark-=10;
}
else
if(blue_mark==0x1e)
{
blue_mark-=15;
}
if(blue_mark<0x1e)
{
blue_mark-=15;
}
}
0x28是40,0x1e是30,小于30,得分+15 ,等于 30 ,得分+10 ,都是40时,得分变为 A
但你的 A 是 0x77,也就是 119,所以恰好显示出了后两位,就是 19 了,呵呵
我建议你这里别用十六进制,直接用十进制写吧,方便阅读和修改
你的编码数组必须包含 A 的编码,比如
uchar code tab [] = {0,1,2,3,4,5,6,7,8,9,A,不显示};
显示的时候,先显示十位 red_mark / 10 ,再显示个位 red_mark % 10
显示A时,只要显示 tab[10] 就行了,有一位不显示,也就是显示 tab[11]
if(key_red_add==1) //红队加分显示的时候再做处理
if( red_mark == 50 ) 显示A,就是十位显示 tab[10] ,个位不显示( 显示 tab[11] )
else 先显示十位 tab [ red_mark / 10 ] ,再显示个位 tab [ red_mark % 10 ]
蓝方同理
我没有改你的算法,但是我觉得你的算法有点复杂