导航:首页 > 操作系统 > 单片机扫描

单片机扫描

发布时间:2022-04-27 07:41:44

❶ 谁能详细说下单片机按键扫描呀

#include"regx52.h"
sbit KeyOne = P1^0 ;
sbit KeyTwo = P1^1 ;
sbit KeyThree = P1^2 ;
sbit KeyFour = P1^3 ;
#define uint16 unsigned int
#define uint8 unsigned char
#define NOKEY 0xff
#define KEY_WOBBLE_TIME 500 //去抖动时间(待定)
#define KEY_OVER_TIME 15000
//等待进入连击时间(待定),该常数要比正常
//按键时间要长,防止非目的性进入连击模式
#define KEY_QUICK_TIME 1000 //等待按键抬起的连击时间(待定)
void v_KeyInit_f( void )
{ KeyOne = 1 ; //按键初始化(相应端口写1)
KeyTwo = 1 ;
KeyThree = 1 ;
KeyFour = 1 ;
}
uint8 u8_ReadKey_f(void)
{ static uint8 LastKey = NOKEY ; //保存上一次的键值
static uint16 KeyCount = 0 ; //按键延时计数器
static uint16 KeyOverTime = KEY_OVER_TIME ; //按键抬起时间
uint8 KeyTemp = NOKEY ; //临时保存读到的键值
KeyTemp = P1 & 0x0f ; //读键值
if ( KeyTemp == 0x0f )
{ KeyCount = 0 ;
KeyOverTime = KEY_OVER_TIME ;
return NOKEY ; //无键按下返回NOKEY
}
else
{
If ( KeyTemp == LastKey ) //是否第一次按下
{
if( ++KeyCount == Y_WOBBLE_TIME )
//不是第一次按下则判断//抖动是否结束
{
return KeyTemp ;
//去抖动结束,返回键值
}
else
{
if( KeyCount > KeyOverTime )
{
KeyCount = 0 ;
KeyOverTime = KEY_QUICK_TIME ;
}
return NOKEY ;
}
}
else
//是第一次按下则保存键值,以便下次执行此函数时与读到的键值作比较
{
LastKey = KeyTemp ; //保存第一次读到的键值
KeyCount = 0 ; //延时计数器清零
KeyOverTime = KEY_OVER_TIME ;
return NOKEY ;
}
}
}

❷ C51单片机按键扫描

1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机P01引脚,故可采用以下程序实现按键扫描
if(P01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(P01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处P01==0均改为P01==1。

❸ 单片机控制的LED动态扫描显示原理

现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。 1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。 2、动态扫描显示原理如下: (1)P23、P22、P21、P20输出高电平,关闭所有数码管; (2)显示个位——把要显示的数据送到P10~P17,P23送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P23送高电平; (3)显示十位——把要显示的数据送到P10~P17,P22送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P22送高电平; (4)显示百位——把要显示的数据送到P10~P17,P21送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P21送高电平; (5)显示千位——把要显示的数据送到P10~P17,P20送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P20送高电平。 (6)以此顺序循环,把它做成子程序,在主循环中调用。

❹ 单片机中 扫描周期是什么啊

单片机的扫描周期就是单片机开机后进入运行状态后,单片机运行主程序所需的时间,因为主程序是一个“死循环”,循环完成一次所需要的时间就是该单片机系统的扫描周期。一般在ms级别。

❺ 单片机实现一个键盘扫描的过程中要注意哪些事项

摘要 键盘由行线列线交叉而成。列线接有上拉电阻。对第一行的行线置0,然后读取列线码,如果所有列线都是1说明买有被按下的键,继续扫描下一行。直到能读到0为止,读到0时所扫描的行就是该键的行码,而0所在的位是列码。一般的键盘扫描都做成中断形式,把列线所有线相与,只要有一个0就输出0,将这个信号送给中断,就可以实现在有键被按下时开启扫描了。

❻ 单片机 按键扫描,下面完成什么功能求注释一下,一定采纳

getk: clr p2.4 ;将P2.4口 清0(置0)
mov p0,#0ffh;给P0口传递数据FFH,1111 1111 即把P0口全部置1,用于扫描按键因为51 单片机的IO只能检测低电平,所以要先将IO置为1,才能检测按键按下后对0导通
nop ;这个不用解释了吧,空操作占用1个机器周期,用于简单的延时一下,以便让P0口电平
nop ;稳定
mov a,p0 ;将P0口的状态传递给A寄存器。这期间如果P0口有按键按下他的状态会变成0比
如P0.0的按键按下,那传给A的状态就是1111 1110,16进制的#0FEH
cpl a ;将A寄存器取反原来为1的现在为0 如上行所示就变成了0000 0001,16进制的#01H
anl a,#1fh;与操作,用于保留A寄存器的低5位数据,防止别的信号影响到结果(同时也说 明按键接在P0口的低5位。另外结果实际保存在了A寄存器中)
setb p2.4 ;在将P2.4置位,即让P2.4口输出1高电平
ret ;子程序返回
这段程序用于扫描P0的低5位的按键,哪个按下,最后变为那个位为1输出。结果保存在A寄存器中,另外A寄存器的高3位即位7,6,5这3位恒为0.因为 这句anl a,#1fh;已经把高位清零了。
至于P2.4口应该如楼上所说的用于控制244,373等锁存器用途。因为P0口的低5位应该同时还接又别的器件。用锁存器防止干扰

❼ 单片机扫描电路原理

单片机行列式键盘扫描原理如下:

1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。

2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。

3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。

4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

(7)单片机扫描扩展阅读

单片机学习方法

1、基础理论知识学习

基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。

2、单片机实践

准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。

❽ 单片机在扫描是否有键按下时,为什么要做这么多次的判断有什么作用,寻找大侠~我是菜鸟~

是为了防止键盘抖动,键盘抖动的时间是很短的,通过延时一段时间后,如果再判断键盘是按下的,这是才真正能说明键盘按下了,相反,则是抖动,不能说明键盘按下!
所以,软件中一般都需要两次判断键盘按下!
第一次之后,加段延时,之后再判断

❾ 单片机扫描程序

你把key的初始化(第一行 unsigned char key=0)不要放在循环里面,因为每次都要执行这条语句,所以key的值始终未0,所以只能显示第一位
你把 unsigned char key=0;这条语句放到 while(1)循环外边就可以了

❿ 单片机行列式键盘扫描原理

单片机行列式键盘扫描原理如下:

1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。

2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。

3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。

4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

(10)单片机扫描扩展阅读

单片机学习方法

1、基础理论知识学习

基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。

2、单片机实践

准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。

阅读全文

与单片机扫描相关的资料

热点内容
手机文档解压之后解压包去哪儿了 浏览:923
java中网络编程重要吗 浏览:683
如何登录别人的服务器 浏览:626
调度系统软件python 浏览:205
微信大转盘抽奖源码 浏览:497
压缩机损坏的表现 浏览:862
同步数据服务器怎么用 浏览:634
163邮箱服务器的ip地址 浏览:50
服务器跟域是什么 浏览:128
rails启动命令 浏览:465
logistic命令怎么用 浏览:738
c语言点滴pdf 浏览:747
linuxrtc编程 浏览:258
linux打包并压缩命令 浏览:644
aes加密的证书格式 浏览:99
oracledbcalinux 浏览:844
酬勤任务app怎么被特邀 浏览:199
android应用文件夹 浏览:1002
平面设计法则pdf 浏览:339
3d圆角命令怎么用 浏览:569