导航:首页 > 操作系统 > 单片机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时间锁 浏览:660
后宫app视频怎么下载 浏览:525
如何把图片转换从PDF格式 浏览:259
重写和重载的区别java 浏览:233
expressvpnandroid 浏览:84
储存卡被加密怎么解除 浏览:169
地球怎么压缩直径 浏览:780
金铲铲之战服务器爆满怎么进 浏览:160
同仁堂pdf 浏览:935
如何编译原理课程教材 浏览:730
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382
android检查是否安装 浏览:375
苹果手机编辑pdf文件 浏览:460
android系统名字 浏览:971
安卓手机如何进去有求必应屋 浏览:434