51单片机汇编程序问题。4*4矩阵键盘设计。求高手帮忙。

5.18修改答案:
完整的已发至您邮箱。C语言部分程序代码:
能再发给我一下吗?我的644152331@qq.com
如果我想编一些IC的程序,还要了解那些方面的?

这个是一个动态扫描的过程~ 4*4 就是说 当你给第一行的一个低电平其他三行是高电平的时候,可以检测4个按键,编号1.2.3.4 如果1按键按下就返回1如果2按键按下就是2 类推 3.4 当你控制给第二行一个低电平其他三行是高电平的时候 按键1按下就是5 ,按键2按下就是6, 类推7.8 同理;类推第三行 第四行 这样就是原理了~~ 代码如下: 一个简单的按下哪个键 数码管就亮几 是2*4的键盘 原理一样 再在代码中加上两个判断就好了

#include<reg52.h>
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //数码管数字编码
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
char temp;
int num;

void delay(int h) //延时函数 约1ms
{
int x,y;
for(x=0;x<h;x++)
for(y=0;y<110;y++);
}

void main()
{
while(1)
{
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //有键按下了
{
delay(5);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //确实有键按下了
{
temp=P3;
switch(temp)
{
case 0xeb: num=3;
break;
case 0xdb: num=2;
break;
case 0xbb: num=1;
break;
case 0x7b: num=0;
break;
}
// P0=table[num];
}

// while(temp!=0xf0) //松手检测
// {
// temp=P3;
// temp=temp&0xf0;
// }

//}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //只检测按下的一下
{
temp=P3;
switch(temp)
{
case 0xe7: num=7;
break;
case 0xd7: num=6;
break;
case 0xb7: num=5;
break;
case 0x77: num=4;
break;
}

// while(temp!=0xf0)
// {
//temp=P3;
//temp=temp&0xf0;
//}
// P0=table[num];
}

P0=table[num];
delay(3);
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-20
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//段码
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
sbit BEEP=P3^7;
//上次按键和当前按键的序号,该矩阵中序号范围 0~15,16表示无
uchar Pre_KeyNo=16,KeyNo=16;
//延时
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//矩阵键盘扫描
void Keys_Scan()
{
uchar Tmp;
P1=0x0f; //高4 位置0,放入 4 行
DelayMS(1);
Tmp=P1^0x0f;//按键后0f变成 0000XXXX,X中一个为 0,3 个仍为 1,通过异或把 3 个1 变为0,唯
一的 0 变为1
switch(Tmp) //判断按键发生于 0~3 列的哪一列
{
case 1: KeyNo=0;break;
case 2: KeyNo=1;break;
case 4: KeyNo=2;break;
case 8: KeyNo=3;break;
default:KeyNo=16; //无键按下
}
P1=0xf0; //低 4 位置0,放入 4 列
DelayMS(1);
Tmp=P1>>4^0x0f;//按键后 f0 变成 XXXX0000,X中有 1 个为 0,三个仍为 1;高4 位转移到低 4位并
异或得到改变的值
switch(Tmp) //对0~3 行分别附加起始值 0,4,8,12
{
case 1: KeyNo+=0;break;
case 2: KeyNo+=4;break;
case 4: KeyNo+=8;break;
case 8: KeyNo+=12;
}
}
//蜂鸣器
void Beep()
C 100 -
{
uchar i;
for(i=0;i<100;i++)
{
DelayMS(1);
BEEP=~BEEP;
}
BEEP=0;
}
//主程序
void main()
{
P0=0x00;
BEEP=0;
while(1)
{
P1=0xf0;
if(P1!=0xf0) Keys_Scan(); //获取键序号
if(Pre_KeyNo!=KeyNo)
{
P0=~DSY_CODE[KeyNo];
Beep();
Pre_KeyNo=KeyNo;
}
DelayMS(100);
}
}
第2个回答  2011-10-20
??

89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...

设计4*4键盘,能实现键盘的锁定和长按键解锁。
数码管用CD8888做译码器,矩阵键盘编个8个引脚的汇编程序。其实实现这个功能用88绰绰有余,ARM硬件成本有点高

高分:51单片机汇编程序问题,为什么没调用的程序会对原程序产生影响
因为程序编译代码会超过0100h,覆盖了seg的数据 使得乱码 而删除show1234段使得程序代码短了,seg段就正常了

北京市应届毕业生单片机就业方向求助
机的程序你是不是就傻了?书上的东西我们必须要会运用。单片机编程用C语言或汇编语言都可以,但是我 建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C 语言也挺简单,只是一门工具而已,我劝你最好学会,将来肯定用得着,要不你以后也得学,你...

编写一个数据采集与处理程序!!!求助啊~~~
②开启“管理员批准模式”。按键盘上的Windows键+R键打开运行,输入“gpedit.msc”打开组策略编辑器,在左侧依次向下找到“计算机配置”→“Windows设置”→“安全设置”→“本地策略”→“安全选项”,然后在右侧找到“用户账户控制:用于内置管理员账户的管理员批准模式”,双击将其设置为“已启用”并...

高等院校通用教材·计算机组成与嵌入式系统目录
4.1.2 存储系统的组成 4.1.3 存储器的分类 4.2 半导体存储器 4.3 MCS51单片机的存储器结构 实验8 堆栈 4.3.1 程序存储器 4.3.2 数据存储器 4.3.3 外部存储器的访问 4.3.4 寻址方式 4.3.5 堆栈 基本要求和思考题 第5章 汇编语言程序设计 5.1 汇编程序 5.1.1 汇编语言的特点...

单片机原理及应用技术的目录
单片机的结构及工作原理2.1 AT89s51单片机的主要特性2.2 单片机的硬件结构2.2.1 中央处理器2.2.2 存储器2.2.3 I\/0接口2.2.4 特殊功能部件2.3 51系列单片机的引脚及功能2.3.1 51单片机的引脚分类2.3.2 三总线结构2.4 单片机的存储器配置2.4.1 程序存储器2.4.2 数据存储器2.5 时钟...

单片机两位数码管显示两位数
next3:jnb 01h,next4set led1clr led2mov leddata,#0a4hnext4:sjmp main 本回答由提问者推荐 举报| 答案纠错 | 评论 1 0 tx_bird 采纳率:67% 擅长: 物理学 汇编语言 家电 化学 其他编程语言 其他回答 不太 明白 chulishe | 发布于2013-01-13 举报| 评论 0 0 为您推荐: 单片机两位数的...

两道c语言题,谢谢帮帮忙
我给你第一题的答案:include<stdio.h> include<math.h> void getit(int);bool haveit=false;void main(){ while(true){ int a,i;printf("请输入一个整数\\n这个数以下的完全平方数将全部输出>:");scanf("%d",&a);getit(a);printf(haveit==true? "输出完毕!\\n":"%d 以下没有完全...

高手帮忙
keyboard 键盘 latency time 等待时间 library 库、程序库 linkage 连接 to load 装入、寄存、写入、加载 location 存储单元 logger 登记器、记录器 loop 循环 machine language 机器语言 magnetic storage 磁存储器 magnetic tape 磁带 matrix 矩阵 memory 存储器 message 信息、报文 microcomputer 微型计算机 module ...

相似回答
大家正在搜