導航:首頁 > 操作系統 > 單片機按鍵掃描子程序定義出錯

單片機按鍵掃描子程序定義出錯

發布時間:2023-07-12 11:40:39

❶ 關於C51單片機 按鍵 編程的問題

#include<reg51.h>
uchar key_scan(); //按鍵掃描子程序
void delay10ms(); //延時程序
uchar key_free(); //等待按鍵釋放程序
void key_deal();
sysem_initial(); //初始化程序
void main()
{
sysem_initial();
while(1)
{
key_scan();
uchar key_free();
key_deal();
}
}
void sysem_initial()
{
PCON=0x00;
SCON=0x18; //選擇串列工作方式0
ES=0; //禁止串列口中斷
}
uchar key_scan()
{
unsigned char key,Rankcode;
int i,j;
SBUF=0x00; //使掃描鍵盤的74LS164輸出為00H,所有列線低電平
while(TI!=1); //串列輸出完否
TI=0; //清零
P1=0x03; //所有行線為高電平
if(P1&0x03!=1) //如果有鍵按下
{
delay10ms();
for(i=0;i<8;i++)
{
if(P1&0x03!=1) //確實有鍵按下
{
Rankcode=0xFE; //掃描第一列
SBUF=Rankcode; //輸出列值
while(TI!=1);
TI=0;
if(P1&0x03==0x01) //如果第一行有鍵閉合
{
j=0;
}
else if(P1&0x03==0x02) //如果第二行有鍵閉合
{
j=1;
}
key=j*8+i;
}
if(j==0||j==1) //掃描按鍵
break; //退出
Rankcode=(Rankcode<<1)|0x01; //否則,開始掃描下一列
}
}
return(key); //返回鍵值
}
uchar key_free()
{
key=key_scan();
SBUF=0x00;
P1=0x03;
while(TI!=1);
TI=0;
while(P1&0x03!=0x03); //如果仍有鍵按下,等待按鍵釋放
return(key);
}
void delay10ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<120;j++);//你的問題出在這里{}之間需要;,可以不要直接加;
}
//還有你上面所有等待的while() 後面都需要;這才是空等待,否則是帶後面的語句指令一起執行

❷ 單片機調試的時候出錯了 求大神

就這個程序而言,就純在這幾個錯誤,只要是有錯誤就無法編譯成功


錯誤一、按鍵檢測函數內,賦值語句被你寫成判斷語句了,如下圖這里

解決辦法是,將temp的變數聲明語句移到函數外,使其成為全局變數


錯誤三、既然程序的前端有各個函數的定義部分,那就要吧主函數放在最上端,不需要經常修改的函數放在最下端,雖然這不是強制性的,但這是一個良好的編程習慣


先改正以上錯誤吧!

❸ 51單片機 計算器程序 不能成功 按鍵按下沒反應 附上程序 看哪裡錯誤

看不太懂,不過發現好象按鍵掃描程序有誤
象 P1=0xf0; 你的目的可能是讓高4 位作為輸出,低4 位作嫌拿為輸入
按鍵按下時,高4 位的1傳到低4 位上,芹鍵搭這樣是不行的
對於51單片機,由於是弱上拉,只有0將1拉低,1不可能將0填高
就是說讓 P1=0xf0,讀取P1,低4 位永遠亮段是0
if(P1==0xf1) if (P1==0xf2).......等條件永遠不具備

閱讀全文

與單片機按鍵掃描子程序定義出錯相關的資料

熱點內容
手動添加dns伺服器加什麼數字 瀏覽:558
單片機中三位數碼管原件 瀏覽:140
pdf可以刪除其中一頁 瀏覽:216
清dns緩存的命令 瀏覽:103
免費pdf在線轉換 瀏覽:768
堆貨演算法 瀏覽:878
vsc編譯vc程序 瀏覽:197
centos55命令 瀏覽:709
美國干編程有什麼條件 瀏覽:505
阿里雲伺服器遠程鏈接 瀏覽:251
墨鏡慧眼怎麼下載廠商的app 瀏覽:63
iphone加密專線 瀏覽:493
aes產生加密文件 瀏覽:416
編程實現藍牙通信 瀏覽:770
怎麼恢復掉簽的app 瀏覽:849
伺服器部署ip地址 瀏覽:323
涉密場所周邊安全防護距離演算法 瀏覽:674
安卓fpse模擬器怎麼設置加速 瀏覽:948
建行app怎麼生成電子簽章 瀏覽:510
獲取當前時間javadate 瀏覽:75