专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DG128的3×3矩阵扫描求帮忙
2019-03-26 07:55
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
NXP MCU
8940
4
1482
DG128的3×3矩阵扫描求帮忙。这几天头都痛了。。。上拉电阻怎么用?3×3扫描程序失败好多次。新生求教。
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
quxiangyu
1楼-- · 2019-03-26 16:46
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <mc9s12dg128.h>
#define C8LED PORTA
#define P3 PORTB
#pragma MESSAGE DISABLE C4000
byte LED_num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};byte key=0;
void delayms (int m) {int x,y;for(x=0;x<m;x++) for(y=0;y<4000;y++);}
void display(key) C8LED=LED_num[key];
void matrixkeyscan()
{
byte temp;
P3=0x01;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x11:
key=1;
break;
case 0x21:
key=2;
break;
case 0x41:
key=3;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0x02;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x12:
key=4;
break;
case 0x22:
key=5;
break;
case 0x42:
key=6;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0x04;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x14:
key=7;
break;
case 0x24:
key=8;
break;
case 0x44:
key=9;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main(void)
{
DDRA=0xff;
DDRB=0x0f;PUCR=0X02;
while(1)
{
void matrixkeyscan()
;}
}
加载中...
quxiangyu
2楼-- · 2019-03-26 20:16
各位帮忙改下程序,指教我这个新手,谢谢
加载中...
quxiangyu
3楼-- · 2019-03-26 22:56
程序改完了,不过我想实现数码管四位都亮。一个口就不能控制所有的段选型号和位选信号。
PA0—PA7为数码管a b c d e f g dg
PB1—PB6为矩阵键盘 123行456列
位选信号即数码管1234连VCC高电平
功能:四位数码管同时显示对应按键
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <mc9s12dg128.h>
#define C8LED PORTA
#define P3 PORTB
#define display(key) C8LED=LED_num[key]
#pragma MESSAGE DISABLE C4000
byte LED_num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};int key=0;
void delayms (int m) {int x,y;for(x=0;x<m;x++) for(y=0;y<4000;y++);}
void matrixkeyscan()
{
byte temp;
P3=0xe0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=1;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=3;
break;
}
}
}
P3=0xd0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=4;
break;
case 0x0b:
key=5;
break;
case 0x07:
key=6;
break;
}
}
}
P3=0xb0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=7;
break;
case 0x0b:
key=8;
break;
case 0x07:
key=9;
break;
}
}
}
display(key);
}
void main(void)
{
DDRA=0xff;
DDRB=0xf0;
while(1)
{
matrixkeyscan();
}
}
加载中...
quxiangyu
4楼-- · 2019-03-27 00:14
我想变化的实现按键控制,怎么办。我想用K口控制,可是没调好。求大家指点。
加载中...
一周热门
更多
>
相关问题
相关文章
IMX6UL定时器按键消抖实验
0个评论
IMX6UL 裸机C语言IO 输入中断编程
0个评论
Cortex-A7 IO 输入中断系统分析
0个评论
IMX6UL裸机实现C语言按键输入实验
0个评论
IMX6UL裸机实现C语言蜂鸣器实验
0个评论
通过结构体的方式来定义和使用寄存器地址
0个评论
IMX6UL裸机实现C语言LED点亮与闪烁
0个评论
I.MX6U处理器LED灯点亮汇编程序之命令行方式编译与链接
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "derivative.h" /* derivative-specific definitions */
#include <mc9s12dg128.h>
#define C8LED PORTA
#define P3 PORTB
#pragma MESSAGE DISABLE C4000
byte LED_num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};byte key=0;
void delayms (int m) {int x,y;for(x=0;x<m;x++) for(y=0;y<4000;y++);}
void display(key) C8LED=LED_num[key];
void matrixkeyscan()
{
byte temp;
P3=0x01;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x11:
key=1;
break;
case 0x21:
key=2;
break;
case 0x41:
key=3;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0x02;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x12:
key=4;
break;
case 0x22:
key=5;
break;
case 0x42:
key=6;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
P3=0x04;
temp=P3;
temp=temp&0xf0;
if(temp!=0x00)
{
delayms(50);
if(temp!=0x00)
{
temp=P3;
switch(temp)
{
case 0x14:
key=7;
break;
case 0x24:
key=8;
break;
case 0x44:
key=9;
break;
}
while(temp!=0x00)
{
temp=P3;
temp=temp&0xf0;
}
display(key);
}
}
}
void main(void)
{
DDRA=0xff;
DDRB=0x0f;PUCR=0X02;
while(1)
{
void matrixkeyscan()
;}
}
PA0—PA7为数码管a b c d e f g dg
PB1—PB6为矩阵键盘 123行456列
位选信号即数码管1234连VCC高电平
功能:四位数码管同时显示对应按键
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <mc9s12dg128.h>
#define C8LED PORTA
#define P3 PORTB
#define display(key) C8LED=LED_num[key]
#pragma MESSAGE DISABLE C4000
byte LED_num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};int key=0;
void delayms (int m) {int x,y;for(x=0;x<m;x++) for(y=0;y<4000;y++);}
void matrixkeyscan()
{
byte temp;
P3=0xe0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=1;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=3;
break;
}
}
}
P3=0xd0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=4;
break;
case 0x0b:
key=5;
break;
case 0x07:
key=6;
break;
}
}
}
P3=0xb0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delayms(50);
temp=temp&0x0f;
if(temp!=0x0f)
{
switch(temp)
{
case 0x0d:
key=7;
break;
case 0x0b:
key=8;
break;
case 0x07:
key=9;
break;
}
}
}
display(key);
}
void main(void)
{
DDRA=0xff;
DDRB=0xf0;
while(1)
{
matrixkeyscan();
}
}
一周热门 更多>