问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C51 4*4键盘扫描程序(c语言)

发布网友 发布时间:2022-05-20 01:29

我来回答

3个回答

热心网友 时间:2023-10-22 01:12

键盘为4*4矩阵式连接,一共有16个按键。 工作原理为。P1端的低四位为列,高四位行。所先置低四位为低,高四位为高,当有按键按下时高四位就会有某位被拉低。只要判断高四位不为全高就说明有按键按下。判断有按键按下后就要判断是某位按下的,方法为,选将高四位的某一位置低。判断低四位是否有低电平出现。依次对高四位的每位置低并判断低四位出现的低电平。如高四位某位置低后低四某也有出现低电平。这样就能判断出低四位与高四位相连的位某位按键被按下了。通过定义好的编码就可以查出是某个按键被按下了,程序将按键值通过查表并发送到LED上显示。 6位LED为动态扫描方式 。先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) /*键扫描函数*/{uchar j; uchar sccode,recode; P2=0x0f; /*发0行扫描码*/ if((P2 & 0x0f)!= 0x0f) /*若有键按下*/ { dlms(); if((P2&0x0f)!= 0x0f) /*逐行扫描初值*/ { sccode=0xfe; for(j=4;j>0;j--) { while((sccode&0x10)!=0) { P2=sccode; /*输出行扫描码*/ if((P2&0xf0)!=0xf0) /*本行有键按下*/ { recode=(P2&0xf0)|0x0f; return((~sccode)+(~recode)); /*返回特征字节码*/ } else sccode=(sccode<<1)|0x01; /*行扫描码做移一位*/ } } } } return(0); /*无键按下,返回0值*/}参考链接: http://www.picavr.com/news/2008-07/6869.htm

热心网友 时间:2023-10-22 01:13

unsigned char readkey()
{
static data unsigned char old_key;
unsigned char new_key;

new_key = NOT_KEY ;

c1 = 0 ;
if( !r1 ) new_key= 1;
if( !r2 ) new_key= 4;
if( !r3 ) new_key= 7;
if( !r4 ) new_key= 0x0b;
c1 = 1;

c2 = 0 ;
if( !r1 ) new_key= 2;
if( !r2 ) new_key= 5;
if( !r3 ) new_key= 8;
if( !r4 ) new_key= 0x0a;
c2 = 1;

c3 = 0 ;
if( !r1 ) new_key= 3;
if( !r2 ) new_key= 6;
if( !r3 ) new_key= 9;
if( !r4 ) new_key= 0x0c;
c3 = 1;

if( new_key != NOT_KEY)
{
if( new_key == old_key)
{

old_key=NOT_KEY;
return new_key;
}
else
{
old_key=new_key;
return NOT_KEY;
}
}
return NOT_KEY;
}

看法 [tongliangl] 2005-7-21 22:13:23
我把汇编的改成c语言的,可是效果不好。汇编的效果很棒的,我也围着个问题发愁那!反转
法扫描

热心网友 时间:2023-10-22 01:13

代码
字符
代码
字符
代码
字符
代码
字符
代码
字符

32

52
4
72
H
92
\
112
p

33
!
53
5
73
I
93
]
113
q

34

54
6
74
J
94
^
114
r

35
#
55
7
75
K
95
_
115
s

36
$
56
8
76
L
96
`
116
t

37
%
57
9
77
M
97
a
117
u

38
&
58
:
78
N
98
b
118
v

39

59
;
79
O
99
c
119
w

40
(
60
<
80
P
100
d
120
x

41
)
61
=
81
Q
101
e
121
y

42
*
62
>
82
R
102
f
122
z

43
+
63
?
83
S
103
g
123
{

44
,
64
@
84
T
104
h
124
|

45
-
65
A
85
U
105
i
125
}

46
.
66
B
86
V
106
j
126
~

47
/
67
C
87
W
107
k

48
0
68
D
88
X
108
l

49
1
69
E
89
Y
109
m

50
2
70
F
90
Z
110
n

51
3
71
G
91
[
111
o

对照相应的ASCII码输出就可以了
C51 4*4键盘扫描程序(c语言)

先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) /*键扫描函数*/{uchar j; uchar sccode,recode; P2=0x0f; /*发0行扫描码*/ if((P2 &amp; 0x0f)!= 0x0f) /*若有键按...

关于一个c51单片机的4*4矩阵键盘扫描程序,我用keil运行,总是有错误...

功能: P1外接4×4按键, 按照扫描法读出键值 输出: 按键值0~15/如无键按下, 返回16 / uchar Keyscan(void){ uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};for(j = 0; j &lt; 4; j++) { //循环四次 P1 = Buffer[j]; //在P1高四位分别输出一个低电平 te...

C51单片机用IO口做为几个按键的控制,现在想用4X4键盘控制,请问下面显示...

这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、...

按键扫描的keil.c51程序

//第一部份,用扫描来读取键盘,j=0xfe;key=0xff;//设定初值 for (i=0;i&lt;4;i++){ P0=j;//P0口低4位循环输出0,扫描键盘 //leday();if ((P0&amp;0xf0)!=0xf0){//如果有键按下,P0口高4位不会全为1,key=P0;//读取P0口,退出循环,否则循环下次 break;} j=_crol_(j,1);/...

C51单片机,C语言编程四位共阳极数码管静态显示1234 求程序和proteus仿真...

用51单片机组成四位共阳极数码管显示1234 ,proteus仿真图如下所示,P0口输出段码,P2口输出位码。

请问大家:C语言和C51有什么区别?

(1)含义不同:1、C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。2、C51是nVIDIA公司推出的首款K8平台整合芯片组的产品系列代号,使用C51系列芯片组的北桥芯片分为两个版本:GeForce6150和GeForce6100,它们与Nforce 400系列的南桥芯片...

怎么用C语言/C51程序实现单片机按键长按开机与长按关机?

软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。运行期间,按键再次按下并符合长按,那木...

用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...

用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。用proteus做的时钟 可以显示年月日时分秒 可调整时间 有图 / includereg52.h

C51和标准C语言的主要差别是什么?

c51是标准c的扩展,使用专用的编译器,如keil与franklin等;c51特有的有以下几点,可能不全:bit型变量,bdatacodexdatapdataidata存储类型控制字,interrupt中断函数,最主要的是c51主要面向的是硬件,程序的编写思路与标准c差别很大。

用KIEL-C51的C语言编写一个键盘的管理程序,每个按键必须占用一根I/O线...

void main(){ if((S0==0)&amp;(S1!=0)&amp;(S2!=0)) function_SE();else if ((S0!=0)&amp;(S1==0)&amp;(S2!=0)) function_SR();else if ((S0!=0)&amp;(S1!=0)&amp;(S2==0)) function_ST();} void function_SE(){ } void function_SR(){ } void function_ST(){ } ...

4×4键盘c语言扫描程序 4×4矩阵键盘扫描程序c语言 按键扫描程序c语言 4X4矩阵键盘C语言程序 c语言键盘扫描函数 键盘扫描子程序 键盘扫描程序怎样使用 按键扫描程序 新型按键扫描程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
tclp301m手机存储为什么只有0.88gb TCL P301m的防盗密码忘了怎么办 TCL P301M有防盗锁怎么解啊 ...请问怎样解锁(开机后显示输入PIN码),我的手机是TCLP301M_百度... 你好我的P301M 手机上了PIN防盗锁,密码忘记了 怎么解锁啊 你好:TCL P301M 手势密码忘记了怎么能解掉呢?谢谢! 我觉得乔治中英文学校挺好的啊,不知道为什么网上总是有些差评呢?... 榴莲蜜是什么 榴莲菠萝蜜榴莲蜜的区别是什么 tclp301m手机怎么校准屏幕 oppo右上角水滴图标怎么取消 百尺楼旁晚景幽,渔翁歌处数灯浮。光摇瀚海随星动,掩映蓬山十二楼。 怎么查看品牌奶茶店的开店数量 极海云电子邮箱怎么注册 转转分24期什么意思 为什么存在内存卡的图片会花,音乐,视频会卡顿 图库,滑动图片是明显卡顿的吗 硬盘扇区有问题 玩游戏的时候有卡顿现象附图片 怎么解决? 玩WOW的时候帧数还好但是卡 求一张让电脑很卡的图片 PS拖动图片很卡,有严重的卡顿现象 屏幕老化红屏对眼睛有影响? 玩“希望”游戏的朋友进 我家光纤网为什么只能上QQ打不开网页 急··· 金庸群侠传X0.4网页打不开,白屏 X0.3也打不开,是黑屏!求助 杀毒后exe文件无法打开 我电脑里有病毒,应该用什么杀虫剂好? 铁喷罐里的盖子用什么打开 我买了杀虫剂用完了照着百度做辣椒喷雾防身用 但是铁喷罐打不开啊 榄菊杀虫气雾剂怎么打开? 杀虫剂盖子打不开怎么办 厨房喷杀虫剂天然气报警器响了几分钟后燃气灶就再也打不着火了是什么原因? 为什么打了蟑螂药不能开火 极海geohey用的是什么坐标系 单片机中用C语言按键检测的小程序? 求基于8051单片机用C语言编写的双矩阵键盘扫描程序(5个IO口控制25个按键) C语言按键扫描求详解... 用stc89c52的单片机编写c语言的键盘扫描程序,为什么键盘扫描不成功呢??有没有哪位帮我看看?好的追加分 c语言编写一段2×3的矩阵键盘扫描的子程序。 51单片机c语言编程中怎么解决扫描键盘同时显示的问题? 需要一个STC89C52芯片的矩阵按键扫描程序,要求:每一个按键(共16个)对应数码管0~F显示出来 c51单片机P1.0-P1.7控制列,P2.0-P2.3控制行,8*4的矩阵键盘扫描,程序思路都好,求大虾帮忙!!!!c语言 51单片机矩阵键盘如何实现两个键同时按下的时候显示其他数字,用c语言程序实现, 关于单片机用8255完成键盘扫描的C语言程序的疑惑 求解释单片机键盘扫描的一段程序(关键是松手那块不明白) 求一段51单片机按键C语言程序详解 怎么实现 当运行中的一个程序按下的某一个按键时,执行我自己编的另一个程序 用c语言解释最好了!!!谢谢 8051单片机5x5键盘扫描程序 茶文化主要学习的是什么? 梦到掉门牙还流血怎么办 梦到自己牙齿流血脱落代表什么? 柬埔寨禁赌后靠什么维持经济发展? 想在柬埔寨金边投资,那边的市场怎么样?有什么经济支撑?