我直言不諱的說
妳這個 代碼 能調試通過 才鬼了
語法都不對
難道 單片機C語言中 case value 是在冒號之後?
//switch?模板switch?(key)?{
case?0:
break;
default:
break;
}
除了switch case語句語法是錯誤的外,還有壹個變量打錯了。
//case?語法錯誤?//s1nunm?變量與之前寫的?s1num?有差異
case?:7s1nunm?=?0;
而且妳寫這麽多 if 和 switch 邏輯亂的,都不知道妳要幹嘛
if switch?嵌套超過3個?說明妳這個代碼風格 很有問題。
幫妳改了下格式,如果妳的外部變量和函數定義沒問題應該沒有問題。#include?"DS12887.h"#include?"LCD1602display.h"
#include?<at89x52.h>
#define?uchar?unsigned?char
uchar?s1num?=?0;
void?keyscan()?{
uchar?test;
P3?=?0xff;
if?(P3?!=?0xff)?{
delayms(5);
if?(P3?!=?0xff)?{
test?=?P3;
while?(P3?!=?0xff)
switch?(test)?{
case?0x7f:
s1num++;
switch?(s1num)?{
case?1:
ds_write(0xb,?0x86);
LCDwrite_cmd(0xc0?+?11);
LCDwrite_cmd(0x0f);
break;
case?2:
LCDwrite_cmd(0xc0?+?8);
break;
case?3:
LCDwrite_cmd(0xc0?+?5);
break;
case?4:
LCDwrite_cmd(0x80?+?12);
case?5:
LCDwrite_cmd(0x80?+?9);
break;
case?6:
LCDwrite_cmd(0x80?+?6);
break;
case?7:
s1num?=?0;
LCDwrite_cmd(0x0c);
ds_write(0x0b,?0x06);
break;
}
break;
default:
break;
}
}
}
}