矩阵键盘扫描法和线反转法的电路图有什么不同

a006045 2010-05-22 08:52:59
下面是线反转法的程序。。我把这个函数用在程序中但是运行起来出错了。高四位引脚总是保持在低电平。按了键也没反应
这两个电路图的接法有什么不同啊。。



/*请问这个程序有什么问题没??怎么我调用了这个函数按了键没反应呢。*/
void keyScan5()
{
UCHAR i, j;
while(1)
{
P2=0x0F;
if((P2&0x0F)!=0x0F)
{
switch(P2)
{
case 0x07: i=3; break;
case 0x0b: i=2; break;
case 0x0d: i=1; break;
case 0x0e: i=0; break;
default: break;
}
}
delay(10);//软件去抖动
P2=0xF0;//反转行和列上的电平
if((P2&0xF0)!=0xF0)
{
switch(P2)
{
case 0x70: j=3; break;
case 0xb0: j=2; break;
case 0xd0: j=1; break;
case 0xe0: j=0; break;
default: break;
}
//P1=num[j][i];//P1输出对应的按键值
*下面的语句我是为了测试下按键扫描的程序是否有问题
本来按下第一行第二个键灯就应该会亮的。但是我按了不亮
*/

if(i == 0 && j == 1)
{
P1 = 0x00;
while(1);
}
}
}
}

void main()
{
while(1)
{
keyScan5();
}
}


我画的电路画
...全文
1500 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenggaott 2011-06-15
  • 打赏
  • 举报
回复
原理图看不了
afei8856 2010-10-10
  • 打赏
  • 举报
回复
标记一下 呵呵
Peasant_Lee 2010-05-23
  • 打赏
  • 举报
回复
不客气,呵呵
a006045 2010-05-23
  • 打赏
  • 举报
回复
可以了。。谢谢
Peasant_Lee 2010-05-23
  • 打赏
  • 举报
回复
暂时看不出其他错误了,你可以先试试改过后的代码,看运行正常不。

原理图没什么错误,不过在实际应用中,记得要两边都加上上拉电阻,避免IO直接接VCC,
a006045 2010-05-23
  • 打赏
  • 举报
回复


电路图画的有问题。。这里更正下。
a006045 2010-05-23
  • 打赏
  • 举报
回复

void keyScan5()
{
UCHAR i, j;
while(1)
{
P2=0x0F;
if((P2&0x0F)!=0x0F)
{
switch(P2 & 0x0f)
{
case 0x07: i=3; break;
case 0x0b: i=2; break;
case 0x0d: i=1; break;
case 0x0e: i=0; break;
default: break;
}
}
delay(10);//软件去抖动
P2=0xF0;//反转行和列上的电平
if((P2&0xF0)!=0xF0)
{
switch(P2 & 0xf0)
{
case 0x70: j=3; break;
case 0xb0: j=2; break;
case 0xd0: j=1; break;
case 0xe0: j=0; break;
default: break;
}

//P1=num[j][i];//P1输出对应的按键值
if(i == 0 && j == 1 )
P1 = 0x00;while(1);
}
//while(P2 & 0xf0 != 0xf0);
}
}

改成这样还有无错误 ?
Peasant_Lee 2010-05-23
  • 打赏
  • 举报
回复
第一个:
switch(P2&0x0F)

第二个:
switch(P2&0xF0)
a006045 2010-05-23
  • 打赏
  • 举报
回复
请问应该怎么屏蔽啊??
[Quote=引用 2 楼 peasant_lee 的回复:]
线反转,顾名思义,就是根据双方的互相检测电平来确定这个矩阵中的位置,也就是两线确定交叉点。

楼主你的代码有 错,如下:

if((P2&0x0F)!=0x0F)
{
switch(P2)
//在这里,很明显,看下面的0x07,0x0b等,你应该是想判断读出P2口低4bit的电平状态,但是你忘了屏蔽其高位,上面有一个屏蔽高4bit的操作,可能你误以为已经屏蔽了高b……
[/Quote]
Peasant_Lee 2010-05-23
  • 打赏
  • 举报
回复
线反转,顾名思义,就是根据双方的互相检测电平来确定这个矩阵中的位置,也就是两线确定交叉点。

楼主你的代码有 错,如下:

if((P2&0x0F)!=0x0F)
{
switch(P2)
//在这里,很明显,看下面的0x07,0x0b等,你应该是想判断读出P2口低4bit的电平状态,但是你忘了屏蔽其高位,上面有一个屏蔽高4bit的操作,可能你误以为已经屏蔽了高bit,实际没有。所有,很多情况下,P2的值是大于0x0f,也就是高4bit,有任何一bit为1,那么你的判断无效。同理,下面的反转后,也要屏蔽。
{
case 0x07: i=3; break;
case 0x0b: i=2; break;
case 0x0d: i=1; break;
case 0x0e: i=0; break;
default: break;
}
}

a006045 2010-05-22
  • 打赏
  • 举报
回复
大家帮帮忙啊。。。线反转法这个问题困扰了我很长时间了。。
《单片机原理及应用课程设计》报告 ——数码管显示4*4矩阵键盘的键盘号设计 专 业: 班 级: 姓 名: 学 号: 2013年1月 1.课程设计目的 1.1巩固和加深对单片机原理和接口技术知识的理解; 1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力; 1.3学会方案论证的比较方,拓宽知识,初步掌握工程设计的基本方; 1.4掌握常用仪器、仪表的正确使用方,学会软、硬件的设计和调试方; 1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算 机绘制电路图和流程图。 2.课程设计要求 单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘 中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示"1" , 14号键按下时,数码管显示"E"等等。 3. 硬件设计 3.1 设计思想 分析本任务的要求,使设计能够完成当4*4矩阵键盘中的某一按键按下时,数码管上 显示对应的键盘号。则本系统主要由以下几大模块构成: 显示模块,共阴极LED数码管; 输入模块,4*4矩阵键盘; 3.2主要元器件介绍 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键 盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。 这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 数码管不同位显示的时间间隔可以通过调整延时程序的延时长短来完成。数码管显示 的时间间隔也能够确定数码管显示时的亮度,若显示的时间间隔长,显示时数码管的亮 度将亮些,若显示的时间间隔短,显示时数码管的亮度将暗些。若显示的时间间隔过长 的话,数码管显示时将产生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显 示时数码管的亮度,又要数码管显示时不产生闪烁现象。 3.3 原理图及功能电路介绍 矩阵键盘电路 数码管电路 4. 软件设计 4.1 设计思想 按键采用线反转先把列线置成低电平,行线置成输入状态,读行线;再把行线置成 低电平,列线输入状态,读列线。当有键按下时,由两次所读状态即可确定所按键的位 置,不需扫描,键盘响应速度大大加快。 4.2软件流程图 4.3 源程序 org 0000h mov p2,#0ffh ljmp main org 0100h main:acall keyscan mov a,30h mov dptr,#table movc a,@a+dptr mov p2,a acall delay sjmp main keyscan:mov p3,#0fh mov a,p3 anl a,#0fh mov b,a mov p3,#0f0h mov a,p3 anl a,#0f0h orl a,b cjne a,#0ffh,keypro ret keypro:mov b,a mov dptr,#keyvalue mov r3,#0ffh key1:inc r3 mov a,r3 movc a,@a+dptr cjne a,b,key2 mov a,r3 mov 30h,a ret key2:cjne a,#00h,key1 ret delay:mov r0,#20 next1:mov r1,#20 next2:mov r2,#248 djnz r2,$ djnz r1,next2 djnz r0,next1 ret keyvalue:db 77h,7bh,7dh,7eh db 0b7h,0bbh,0bdh,0beh db 0d7h,0dbh,0ddh,0deh db 0e7h,0ebh,0edh,0eeh db 00h table:db 0c0h,0f9h,0a4h,0b0h db 99h,92h,82h,0f8h db 80h,90h,88h,83h db 0c6h,0a1h,86h,8eh end 5. 调试运行 依次按下开关,八段数码管会对应显示出0—f的16个数字 6. 设计心得体会 经过这次课程设计,我对51单片机有了更高程度的理解。更加明白了做设计是一项很考 验心智的一件事儿,需要时间、精力和耐心。 参考书目: 肖金球. 单片机原理与接口技术.[M].北京:清华大学出版社,2004.12 ----------------------- 单片机课程设计——数码管显示4×4矩阵键盘全文共7页,当前为第1页。 单片机课程设计——数码管显示4×4矩阵键盘全文共7页,当前为第2页。 单片机课程设计——数码管显示4×4矩阵键盘全文共7页,当前为第3页。 开始 初始化 先把列线置成低电平,行线置成输入状态,读行线 再把行线置成低电平,列线输入状态,读列线 有键按下时 按键的位置 结束,返回 结束,返回 单片机课程设计—
计算机视觉(Computer Vision)又称为机器视觉(Machine Vision),顾名思义是一门“教”会计算机如何去“看”世界的学科。在机器学习大热的前景之下,计算机视觉与自然语言处理(Natural Language Process, NLP)及语音识别(Speech Recognition)并列为机器学习方向的三大热点方向。在如今互联网时代,人工智能发展迅速,计算机视觉领域应用非常广泛,对人才的需求也是非常大,计算机视觉在IT领域的工资水平非常高,初级就能达到一个很好的薪资水平,学好计算机视觉,势在必得,增加自己的竞争力以及给自己一个好的薪水。 以下是计算机视觉部分应用场景,可以看到它的需求非常大:1.Google, MS, Facebook, Apple,华为,阿里,腾讯,百度等世界科技公司,无一没有建立自己的AI实验室,AI里面,计算机视觉或图像处理是非常重要的一块,当然它们研究方向就多了,几乎会涵盖所有方向。2.世界各大汽车公司,如特斯拉,宝马。汽车公司开始发力自动驾驶,而自动驾驶里面最核心的技术就是“教”汽车里的电脑如何通过摄像头实时产生的图片和视频自动驾驶。因此视觉和图像处理便是核心技术所在,如行人探测,道路识别,模式识别。3.Adobe,美图秀秀等照片、winrar、real player等视频处理、压缩软件。这个不多说,直观的应用,比如降噪,图像分割、图像压缩、视频压缩。4.AR(增强现实)最近由于Pockman GO的风靡全球又被推到第一线,而Google Class或者三星Gear眼镜等等,也无不和图像处理、计算机视觉的科研有关。预测这将是未来几年主推的东西。5.迪士尼等各大电影制片公司。3-D电影,以及各种炫酷的电影特效,当然里面不光有图像处理,还有计算机图形学的东西在里面。6.地平线,大疆无人机等机器人公司。和自动驾驶一个道理,机器人要通过摄像头“判断”并躲开前方障碍物,核心技术都在视觉和图像处理。7.医疗器械设备公司。医学图像处理,核磁共振,断层扫描等等,众所周知医疗行业都是暴利阿。8.工业级摄像头;包括高速路上的摄像头,机场火车站安检摄像头,工业流水线上的摄像头,嵌入了人脸或次品识别的芯片,智能地识别罪犯、次品,等等。 基于SpringBoot+Python多语言文档扫描处理和OCR识别系统,将以基础知识为根基,带大家完成一个强大的文档扫描处理和OCR识别系统,该系统将包含算部分,算服务,算商业化api部分等。应用场景可以为:爬虫图片文字识别、文档图片自动整理和输出文字、实时扫描输出系统、PDF文档转换系统等等,算可以商业化,系统同时实现了商业化api功能,商业价值非常高,大家可以基于课程项目的基础上进一步完善,做到商用,学到知识的同时,给自己额外增加收入。 本课程包含的技术: 开发工具为:IDEA、WebStorm、PyCharmPythonAnconaOpencvDjangoSpringBootSpringCouldVue+ElementUI+NODEJS等等 课程亮点: 1.与企业接轨、真实工业界产品2.强大的计算机视觉库OPENCV3.从基础到案例,逐层深入,学完即用4.市场主流的前后端分离架构和人工智能应用结合开发5.多语言结合开发,满足多元化的需求6.商业化算api实现7.多Python环境切换8.微服务SpringBoot9.集成SpringCloud实现统一整合方案 10.全程代码实操,提供全部代码和资料 11.提供答疑和提供企业技术方案咨询
单片机课程设计—简易计算器 物理与电气工程学院课程设计报告 设计名称:简易计算器 院 部:物理与电气工程学院 专业班级:12级电信三班 学生姓名:孔维铮 080212092 刘慧 080212096 吴阳慧 080212101 指导老师:王陈宁 完成时间:2014年6月8日 评阅意见: 评阅教师 日期 评阅意见: 评阅教师 日期 单片机课程设计—简易计算器全文共21页,当前为第1页。 单片机课程设计—简易计算器全文共21页,当前为第1页。 摘 要 单片机课程设计是单片机原理课程的实践性环节。是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STC89C52单片机、数码管,键盘等模块组成。本计算器是将键盘输入信息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计算功能通过软件实现,用汇编语言对单片机可编程芯片进行编程,实现对计算器的设计。 关键词:单片机;计算器;汇编语言;键盘;数码管 单片机课程设计—简易计算器全文共21页,当前为第2页。 单片机课程设计—简易计算器全文共21页,当前为第2页。 目录 一.课程设计的目的和要求 1 1.1课程设计的目的 1 1.2课程设计要求 1 二、方案的论证和比较: 1 2.1 按键电路设计 1 2.2 4*4键盘扫描电路(扫描式,反转式) 1 三.课程设计简述及整体方框图 2 3.1 方案 2 3.2、硬件电路设计 2 3.2.1主控电路设计 2 3.2.2键盘电路设计 3 3.2.3数码管显示电路 3 3.3软件设计简述 4 3.3.1键盘扫描子程序设计 4 3.3.2数码管显示电路 6 3.3.3运算子程序设计 6 3.4程序主框图 7 四.仿真软件图 8 五.系统功能测试与整体指标 9 5.1 软件调试步骤 9 5.2 程序调试步骤 9 5.3 测试结果 10 六、总结与思考及致谢 10 附录主程序: 10 单片机课程设计—简易计算器全文共21页,当前为第3页。 单片机课程设计—简易计算器全文共21页,当前为第3页。 一.课程设计的目的和要求 1.1课程设计的目的 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本次设计是设计一个简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STC89C52单片机、数码管,键盘等模块组成。本计算器是将键盘输入信息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计算功能通过软件实现,用汇编语言对单片机可编 芯片进行编程,实现对计算器的设计。 1.2课程设计要求 4*4键盘输入,数码管显示。 完成两位整数的加减 由于键盘只有16个按键,安排如下: +---------------+ "0 " 1 " 2 " 3 " " 4" 5 " 6 " 7 " " 8" 9 "+ " - " "=" c" " " +---------------+ 二、方案的论证和比较: 2.1 按键电路设计 方案一:计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。 方案二:矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。 单片机课程设计—简易计算器全文共21页,当前为第4页。2.2 4*4键盘扫描电路(扫描式,反转式) 单片机课程设计—简易计算器全文共21页,当前为第4页。 方案一扫描:对键盘上的某一行送低电平,其他行为高电平,然后读取列值。若列值中有一位是低,则表明该行与低电平对应列的键被按下;否则,扫描下一行。 方案二:反转:先将所有行扫描线输出低电平,读列值。若列值有一位是低,则表明有键按下,读列值;然后所有列扫描线输出低电平,再读行值。根据读到的值组合就可以查表得到的键码。此设计中我们用反转。 三.课程设计简述及整体方框图 3.1 方案 按照设计要求,提出方案 。此方案首先通过键盘得到数据,并通过程序对数据进行处理,最后通过数码管显示出来。结构框图如图1 STC89C52数码管显示 键盘 STC89C52 数码管显示 键盘 图(1) 3.2、硬件电路设计 简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。 3.2.1主控电路设计 单片机课程设计—简易计算器全文共

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧