導航:首頁 > 操作系統 > 單片機scan

單片機scan

發布時間:2022-08-07 02:56:13

單片機鍵盤掃描程序

2*3的鍵盤,太簡單了,不值得用循環,特別是雙重循環。

最簡明、高效的程序如下:

sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;

char scan_key(void)
{
P13 = 0;
if (!P10) return 0;
if (!P11) return 1;
if (!P12) return 2;
P13 = 1;

P14 = 0;
if (!P10) return 3;
if (!P11) return 4;
if (!P12) return 5;
}

本程序,使用的變數最少,也不涉及其它介面。
代碼最少,執行效率最高。

Ⅱ c語言中scan()什麼意思

你要問的是scanf()函數吧

scanf編輯

與printf函數一樣,都被定義在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。

函數原型編輯int scanf(const char *format,...);
函數 scanf() 是從標准輸入流stdio (標准輸入設備,一般是鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。[1]

其調用形式為: scanf("<格式說明字元串>",<變數地址>);變數地址要求有效,並且與格式說明的次序一致

scanf()函數返回成功賦值的數據項數,讀到文件末尾出錯時則返回EOF。

如:

scanf("%d %d",&a,&b);

如果a和b都被成功讀入,那麼scanf的返回值就是2

如果只有a被成功讀入,返回值為1

如果a和b都未被成功讀入,返回值為0

如果遇到錯誤或遇到end of file,返回值為EOF。

且返回值為int型.

例:使用scanf函數輸入數據。

#include<stdio.h>
int main(void)
{
int a,b,c;
printf("輸入a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
fflush(stdin);
return 0;
}

&a,&b,&c中的&是地址運算符,&a指a在內存中的地址。scanf的作用是:按照a,b,c的內存地址將輸入的數據存到a,b,c中去。變數a,b,c的地址是在編譯連續階段分配的(存儲順序由編譯器決定)。

這里注意:如果scanf中%d是連著寫的如「%d%d%d」,在輸入數據時,數據之間不可以加逗號,只能是空格或
tab鍵或者回車鍵——「2 3 4」 或
「2(按tab)3(按tab)4(按tab)」。若是「%d,%d,%d」,則在輸入數據時需要加「,」,如「2,3,4」.

Ⅲ 這是一個單片機鍵盤控制流水燈的程序,請問scan(),process()函數是什麼用意謝謝。

一口老血:

Ⅳ 單片機 此代碼scan_key老是提示缺少函數原型讓重新定義如何重新定義

解決辦法:

在#include <AT89X52.H>下增加一行

unsigned char scan_key(viod)

就可以了。

出錯原因:

函數調用前需要先申明此函數。

舉一反三:

函數多的時候建議做成頭文件,直接包含這個頭文件就可以了。例如此處可以新建一個頭文件:<driver.h>,內容如下:

#include <AT89X52.H>

unsigned char scan_key(viod);

unsigned char scan_key(viod)
{
unsigned char scan,col,rol,tmp;
bit flag=0;
scan=0xef;
for(col=0;col<4;col++)
{
P0=scan;
tmp=P0;
switch(tmp&0x0f)
{
case 0x0e:rol=0;flag=1;break;
case 0x0d:rol=1;flag=1;break;
case 0x0b:rol=2;flag=1;break;
case 0x07:rol=3;flag=1;break;
}
if(flag==1) break;
scan=(scan<<1)+1;
}
while(tmp!=0x0f)
{
P0=0x0f;
tmp=P0;

}
return(rol*4+col);
}

然後在你可以在主程序里包含此頭文件,主程序就會簡潔許多,內容如下:

#include <driver.h>
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
unsigned char tmp,key;
P1=0x00;
while(1);
{
while(tmp==0x0f)
{
P0=0x0f;
tmp=P0;
}
delay10ms();
P0=0x0f;
tmp=P0;
if(tmp==0x0f);

key = scan_key( );
P1 = table[key];
}
}

Ⅳ 51單片機動態掃描問題。。。

scan是用來控制哪個LED顯示的。
通過左移讓每個LED分時顯示,由於速度很快,肉眼看不出閃爍。
SCAN=1,就是00000001,需要取反後發送到P1。
就是p1=~scan,然後左移1位scan就變為00000010,接下一個循環。

Ⅵ c編的單片機程序出現問題,用keil編譯提示scan()調用函數missing return value,怎麼辦高分懸賞

函數要指定返回值的,寫成void
scan(),
或者
int
scan()//顯示掃描函數
{
char
k;
for(k=0;k<4;k++)
//四位LED掃描控制
{
Disdata=dis_7[display[k]];
if(k==1){DIN=0;}
discan=~scan_con[k];delay(90);discan=0x00;
return
0;
}

Ⅶ 關於51單片機鍵盤掃描函數。

是不是第一個函數調用後就進入死循環了,所以調用不了第二個函數

Ⅷ 單片機程序求救scankey16.h(5): error C129: missing ';' before 'scan0'

明顯 uchar 未定義

閱讀全文

與單片機scan相關的資料

熱點內容
打開其它app微信怎麼收不到 瀏覽:445
安卓游戲耳機怎麼戴 瀏覽:16
不越獄怎麼去除app廣告 瀏覽:176
ipadminipdf閱讀 瀏覽:504
文件夾無限制壓縮會不會降低內存 瀏覽:410
榮耀怎樣創建文件夾 瀏覽:629
如何用本機登陸遠程伺服器地址 瀏覽:680
黃小鴨解壓文具盒 瀏覽:670
女程序員的轉行方法 瀏覽:881
東風啟辰車聯網安裝文件夾 瀏覽:524
華為怎麼設置app時間鎖 瀏覽:660
後宮app視頻怎麼下載 瀏覽:525
如何把圖片轉換從PDF格式 瀏覽:259
重寫和重載的區別java 瀏覽:234
expressvpnandroid 瀏覽:84
儲存卡被加密怎麼解除 瀏覽:169
地球怎麼壓縮直徑 瀏覽:780
金鏟鏟之戰伺服器爆滿怎麼進 瀏覽:160
同仁堂pdf 瀏覽:935
如何編譯原理課程教材 瀏覽:730