51单片机,4*4矩阵键盘,八位数码管,仿真实例可以参考一下。
#include<reg51.h>
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按键了,扫描键盘编码值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判断是否按键
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}
追问谢谢大佬,要是共阳数码管怎么改程序?
51单片机,4*4矩阵键盘,八位数码管
include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};...
单片机4*4矩阵键盘显示到8位数码管 目前现象是八个数码管全亮 且不...
for(r = t; r > 0; r--) { \/\/从t最高位数码管开始写入数字 P0 = wei[r]; wela = 1; wela = 0;P0 = table[keydata[r]]; dula = 1; dula = 0;\/\/显示函数只送段选数据 } } \/\/显示每一位,应该有延时,然后再显示下一位。\/\/连续显示八位,没有延时,看起来,就...
单片机中的4×4矩阵键盘的键值怎么求?
既然是4x4,即4行4列了,共需要8个I\/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx。还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I\/O口电平状态,每个按键需要两个I\/O口,一端连接行(行4bit之一),一端连接列(列4bit之一);若此时按键的...
单片机中的4×4矩阵键盘的键值怎么求?
\/\/*** \/\/函数功能: \/\/单片机驱动4*4键盘,读入键盘值并使用数码管静态 \/\/显示按键键值,若没有数码管用8421码显示LED灯也可以的 \/\/读入原理:先令单片机端口输出11110000读一次,然后 \/\/再令单片机输出00001111读一次把两次的值相加,最后 \/\/获取一个高位和低位分别有0的值即可判断键值,...
数码管显示4×4键盘矩阵按键
数码管可以用来显示4×4键盘矩阵按键的状态。解释:1. 数码管的基本功能:数码管是一种电子显示设备,其基本功能是以数字形式展示信息。它可以显示多种数字或字符,常用于计算器、仪表板等场合。2. 4×4键盘矩阵的概念:4×4键盘矩阵表示一个包含16个按键的键盘布局,每个按键对应一个...
急求4*4矩阵键盘控制数码管显示! 51单片机
void time0() interrupt 1 \/\/T1中断用来计数器溢出 数码管显示 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;aa++;if(aa==100){ aa=0;TR0=0;for(bb=0;bb<8;bb++){ number[bb]=16;xianshi[bb]=16;} } } void delay(uint x){ uint a,b;for(a=x;a>0;a--)for(b=...
51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现_百度...
我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。显示内容 在显示模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。键阵键盘多用于键数目较多的时候。这样可以更多的节省IO口的占用量,对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路...
能不能用mcs-51单片机做一个4x4矩阵键盘及四位显示电路 实现四位数加 ...
这个是可以做的,不过数码管位数还是少了,四位数加减,要用5位数码管才能正确显示结果,加法的结果可能出现5位。减法的结果,可能出现负数和4位值,这都需要5位数码管才能显示出来。至于实现代码,百度一下,有很多的,下来后稍加修改就可以了。不要期望得到完全符合你要求的代码,那样一方面出现几率较...
C51 4*4键盘扫描程序(c语言)
先显示第一位,延时一定时间后在显示第二位依次类推。。。 共有17个按键。按下按键后数码管显示相应的数字,并左移一位。uchar kbscan(void) \/*键扫描函数*\/{uchar j; uchar sccode,recode; P2=0x0f; \/*发0行扫描码*\/ if((P2 & 0x0f)!= 0x0f) \/*若有键按...
用c51单片机按下4*4矩阵按键,数码管显示0-F,能正常显示,只是0号和7...
\/ 类型:矩阵键盘。现象:按下键盘后,数码管显示相应的数字0-F 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!\/ include<reg52.h> \/\/52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义 define uchar unsigned char \/\/将unsigned char定义为uchar,简化输写。提高编程速度 d...