欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
Proteus仿真單片機C語言,按設置鍵while跳不出去
[打印本頁]
作者:
2248373991
時間:
2022-3-23 11:26
標題:
Proteus仿真單片機C語言,按設置鍵while跳不出去
批注 2022-03-23 112611.png
(27.7 KB, 下載次數: 42)
下載附件
2022-3-23 11:26 上傳
void SetFun(void) //進入設置參數子函數
{
if(SetKey==0) //設置按鍵
{
if(Set1<2) Set1++; //設置按鍵次數累計
else Set1=0;
}
switch(Set1) //根據設置按鍵次數,指向對應設置位置
{
case 0:
wr_com(0x80);
wr_dat(' ');
wr_com(0x88);
wr_dat(' ');
break;//清除設置符號
case 1:
wr_com(0x80);
wr_dat('>');
wr_com(0x88);
wr_dat(' ');
break;//指向設置下限
case 2:
wr_com(0x80);
wr_dat(' ');
wr_com(0x88);
wr_dat('>');
break;//指向設置上限
}
while(SetKey==0);//等待按鍵松開
}
/*主函數*/
uchar global_state = 0;
uchar count_num = 0; //輸入的數字個數
void main()
{
uchar i;
uchar passwd;
uchar key_value = 0;
uchar temp_key_value = 0xff;
Lock = 1; //剛上電 鎖是需要保持閉合
Timer0_init(); //定時器初始化
lcd_init(); //LCD1602初始化
while(1) //進入不斷循環
{
temp_key_value = Calkey_scan(); //讀取矩陣按鍵的鍵值
if(temp_key_value != 0xff)
{
key_value = temp_key_value;
}
switch(global_state)
{
case 0: //初始化狀態
display1(); //顯示歡迎語句 -- "welcome"
display5(); //顯示Current T=
Read_Temperature(); //讀取溫度值
display7(); //顯示溫度
if(SetKey==0) //設置鍵
{
if(SetKey==0)
{
while(1)
{
display5(); //顯示Current T=
display6(); //顯示上下限
Read_Temperature(); //讀取溫度值
display7(); //顯示溫度
display8(); //顯示上下限溫度
SetFun(); //指針>
if(SetKey==0) //再次點擊設置鍵
{
if(SetKey==0) break;
}
}
}
}
if(key_value == 13) //存包按鍵被按下
{
key_value = 0xff; //將按鍵值清除
Lock = 0; //開鎖
clear(); //清屏,準備下一屏的顯示
display3(); //顯示關門提示語 -- "close door!"
delay(1900); //等待關門 大約3秒
Lock = 1; //關門
clear(); //清屏,準備下一屏的顯示
global_state = 1; //切換運行狀態
passwd = TL0; //采用定時器寄存器的值作為密碼
genPasswd[0] = passwd/100; //存儲密碼
genPasswd[1] = passwd%100/10;
genPasswd[2] = passwd%10;
genPasswd[3] = (genPasswd[1]+genPasswd[2])%10;
}
if(key_value == 14) //取包按鍵被按下
{
key_value = 0xff; //將按鍵值清除
clear(); //清屏,準備下一屏的顯示
global_state = 2; //切換運行狀態
count_num = 0; //清除數字按鍵變量
for(i = 0;i < 4;i++) //清空輸入的密碼數組
inpPasswd[i] = ' '-0x30;
}
break;
case 1: //密碼生成狀態
display2(); //顯示密碼生成界面
delay(1900); //等待大約3秒
global_state = 0; //返回到初始界面
clear(); //清屏,準備下一屏的顯示
break;
case 2: //輸入密碼狀態
display4(); //顯示輸入密碼界面
if((key_value >= 0) && (key_value <= 9)) //如果按下的為0-9的數字按鍵
{
if(count_num <= 3) //如果按鍵次數小于4次
{
inpPasswd[count_num] = key_value; //將按鍵值存入數組,并顯示
count_num++;
}
key_value = 0xff; //將按鍵值清除
}
if(key_value == 15) //清除按鍵被按下
{
key_value = 0xff; //將按鍵值清除
for(i = 0;i < 4;i++)
inpPasswd[i] = ' '-0x30; //清除剛剛輸入的密碼
count_num=0;
}
if(key_value == 16) //確認按鍵被按下
{
key_value = 0xff; //將按鍵值清除
for(i = 0;i < 4;i++)
{
if(inpPasswd[i] != genPasswd[i])
break;
}
if(i == 4) //密碼輸入正確
{
LEDRED = 1; //紅燈熄滅
LEDGREEN = 0; //綠燈亮
Lock = 1; //開鎖
delay(1900); //等待大約3秒
Lock = 0; //關鎖
LEDGREEN = 1; //綠燈熄滅
}
else //密碼輸入錯誤
{
LEDRED = 0; //紅燈亮
LEDGREEN = 1; //綠燈熄滅
Lock = 0; //關鎖
delay(1900); //等待大約3秒
LEDRED = 1; //紅燈熄滅
}
clear(); //清屏,準備下一屏的顯示
global_state = 0; //返回到初始界面
}
break;
}
}
}
復制代碼
作者:
lkc8210
時間:
2022-3-23 16:25
不要用while(1)套while(1)
作者:
huskyhong
時間:
2022-3-23 16:37
你這程序都不全,SetKey這個值在哪里改變?沒有中斷或者rtos的話怎么可能跳的出去?
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1