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

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

發布時間: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).......等條件永遠不具備

閱讀全文

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

熱點內容
本機tcp伺服器地址 瀏覽:426
切換pdf 瀏覽:92
iturns下載的app在哪裡 瀏覽:639
雲起書院App在哪裡 瀏覽:614
怎麼對hex文件進行加密 瀏覽:284
pdf少年時 瀏覽:953
兩個同名文件夾同步 瀏覽:630
拍照文件夾哪個好用 瀏覽:91
文件夾和書包 瀏覽:511
解壓歸檔拿登記證 瀏覽:225
去體驗解壓房 瀏覽:613
單片機一鍵中斷響應 瀏覽:646
唐浩明pdf 瀏覽:845
程序員土木 瀏覽:73
android如何與web伺服器交互 瀏覽:611
蘋果小風扇app怎麼下 瀏覽:958
杭州it程序員對身體好不好 瀏覽:537
高新區編程加盟找哪家 瀏覽:33
伺服器什麼樣的好賣 瀏覽:152
單片機原理及應用第二版例題答案 瀏覽:973