标题:
怎么通过编程实现单片机按键扫描显示0到15,急需大神求解
[打印本页]
作者:
钟宇大傻逼
时间:
2019-2-22 14:59
标题:
怎么通过编程实现单片机按键扫描显示0到15,急需大神求解
怎么通过编程实现单片机按键扫描显示0到15,比如按下按键1显示1,按下按键2显示2.....按下按键11显示11
这是我的原程序,只能实现单数,不知道怎么实现双数,求大家帮帮忙
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P2^5;
sbit cs1=P2^6;
sbit cs2=P2^7;
uchar code table[]={0xc0,
0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88};
void dms(uint);
uchar num;
void display(num)
{
cs1=1;
P0=0xfe;
wr=0;
wr=1;
cs1=0;
cs2=1;
P0=table[num];
wr=0;
wr=1;
cs2=0;
}
void m()
{
uchar tp,k;
P3=0xfe;
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
dms(10);
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
tp=P3;
switch(tp)
{
case 0xee:
k=0;
break;
case 0xde:
k=1;
break;
case 0xbe:
k=2;
break;
case 0x7e:
k=3;
break;
}
while(tp!=0xf0)
{
tp=P3;
tp=tp&0xf0;
}
display(k);
}
}
P3=0xfd;
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
dms(10);
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
tp=P3;
switch(tp)
{
case 0xed:
k=4;
break;
case 0xdd:
k=5;
break;
case 0xbd:
k=6;
break;
case 0x7d:
k=7;
break;
}
while(tp!=0xf0)
{
tp=P3;
tp=tp&0xf0;
}
display(k);
}
}
P3=0xfb;
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
dms(10);
tp=P3;
tp=tp&0xf0;
if(tp!=0xf0)
{
tp=P3;
switch(tp)
{
case 0xeb:
k=8;
break;
case 0xdb:
k=9;
break;
case 0xbb:
k=10;
break;
case 0x7b:
k=11;
break;
}
while(tp!=0xf0)
{
tp=P3;
tp=tp&0xf0;
}
display(k);
}
}
}
void dms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
m();
}
}
作者:
wulin
时间:
2019-2-22 20:50
你的程序只写了一位数码管显示,怎能显示两位数?程序没有任何注释,别人怎么准确知道你的硬件电路连接?
作者:
static
时间:
2019-2-22 23:43
上电路图,不方便的话上坛子看视频
作者:
2583715224
时间:
2019-2-23 15:07
你忘了,显示都是按16进制来显示的,而且你一次只扫描一次
作者:
dxn396396396
时间:
2019-2-24 20:45
先检测按下第几行在检测按的是哪个,没思路的话可以参考一下网上的
作者:
wysh_2012
时间:
2019-2-24 22:01
程序要有详细的注释和关于数码管接线的说明,还有变量名函数名的命名要规范和见名知义,这样别人也容易看得懂为你解答。
作者:
菜用鸡
时间:
2019-3-4 10:43
如果是数码管的话可以先取整显示,在取余显示,
作者:
菜用鸡
时间:
2019-3-4 10:45
如果不想显示一位数时带个0在前面(如09,08,11)再加一个判断条件
作者:
黛angle
时间:
2019-3-4 15:04
在编制键盘输入程序时常常要用到一个键的扫描码或ASC码,如用到 Foxpro 的 inkey() 函数,以及用到 BIOS 的 INT 16H时,但找一个编码表不太容易,有时候找到的编码表又不全,无法查到组合键的编码,本程序就是一个随时用来显示按键的ASC码及扫描码的程序,可以用 16 进制和 10 进制同时显示一个键按下和放开的扫描码,以及ASC码,同样也支持组合键。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1