51单片机,4*4矩阵键盘,八位数码管
你的8位数码管,没问题? 别人都是,8个IO口设数、3个IO口选段,算,也不知道你这是干嘛的
4*4矩阵键盘检测程序(新手用),本程序用于检测4*4矩阵按键,先检测是否有按
键按下,如果有按键按下,由P1口读出相应的编码值,由P0经两片74HC573输出给
8位数码管,P2^0位选,P2^1段选,P1接4*4矩阵按键
#include
#include //头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit du=P2^1; //段选位
sbit we=P2^0; //位选位
uchar code duanma[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(xms) //延时函数
{
uchar i,j;
for(xms=i,i>0;i--;)
for(j=11;j>0;j--);
}
void main() //主函数
{
we=1; //位选开
P0=0; //8位数码管全部显示
we=0; //位选关
du=1; //段选开
P1=0x00; //初始化,8位数码管无显示
while(1)
{
uchar a,b;
P1=0xf0;
a=P1;
if(a!=0xf0)
{
delay(5); //去抖动
b=P1;
if(a==b)
{
a=0xfe;
do
{
P1=a;
if(a!=P1)
{
switch(P1)
{
case 0x7e:{P0=duanma[0];break;} //编码检测,第一个键按下显示0,第16个按键按下显示F
case 0xbe:{P0=duanma[1];break;}
case 0xde:{P0=duanma[2];break;}
case 0xee:{P0=duanma[3];break;}
case 0x7d:{P0=duanma[4];break;}
case 0xbd:{P0=duanma[5];break;}
case 0xdd:{P0=duanma[6];break;}
case 0xed:{P0=duanma[7];break;}
case 0x7b:{P0=duanma[8];break;}
case 0xbb:{P0=duanma[9];break;}
case 0xdb:{P0=duanma[10];break;}
case 0xeb:{P0=duanma[11];break;}
case 0x77:{P0=duanma[12];break;}
case 0xb7:{P0=duanma[13];break;}
case 0xd7:{P0=duanma[14];break;}
case 0xe7:{P0=duanma[15];break;}
}
}
a=_crol_(a,1); //循环移位去检测按键
}while(a!=0xef);
}
}
}
}
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◐◑↔↕░键盘程序,仿真实例供参考
百度一下你就知道了特别的棒非常的棒
不清楚
多打一点字,还怕得不到优质评论吗?那是不可能的,我搞了这么多次,成功率高达百分之九十九点九,说了你可能不信,我就是这么的牛逼。
帮我改成4*4矩阵键盘控制 4位共阴极数码管显示! 51单片机
sccode<<1)|0x01; } } } return 0; \/\/无键按下,返回0}void getkey(void){ unsigned char key; key=kbscan(); if(key==0) { return; } switch(key) { case 0x11:keyval=7;break; case 0x12:keyval=4;break; case 0x14:keyval=1;break; case 0x18:keyval=10;...
单片机4*4矩阵键盘显示到8位数码管 目前现象是八个数码管全亮 且不...
void display() \/\/通过定时器来按频率显示存储数字 { uchar r;for(r = t; r > 0; r--) { \/\/从t最高位数码管开始写入数字 P0 = wei[r]; wela = 1; wela = 0;P0 = table[keydata[r]]; dula = 1; dula = 0;\/\/显示函数只送段选数据 } } \/\/显示每一位,应该...
求简单的51系列单片机控制4*4矩阵键盘显示电路图 带上程序
\/*功能:矩阵按键识别,每按一次响一声,用数码管显示0——F键值 *\/ include <reg52.h> include <intrins.h> define uchar unsigned char define uint unsigned int sbit sound=P3^6;uchar code tab[]= { 0xC0,\/*0*\/ 0xF9,\/*1*\/ 0xA4,\/*2*\/ 0xB0,\/*3*\/ 0x99,\/*4*\/ 0x92,\/*...
51单片机矩4X4阵键盘的第一排按键没反应。
你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
怎样用单片机和4*4矩阵键盘在数码管显示两位数
是要画仿真图吗?两位数码管和4*4矩阵键盘,这是单片机的最典型的电路了,也是最常用的电路。这种电路和程序在百度知道这里就可以搜索到无数的答案。如下图就是一个典型的电路。
如何利用51单片机4*4矩阵键盘和1602液晶实现四位(或者多位)的显示问...
dispbuf[1]=s\/10;dispbuf[3]=m%10;dispbuf[4]=m\/10;dispbuf[6]=h%10;dispbuf[7]=h\/10;} \/***显示子程序***\/ void disp(uchar dispadd){ uchar tmp;lcd_wmc(dispadd);tmp=dispbuf[7];tmp=word[tmp];lcd_wmd(tmp);tmp=dispbuf[6];tmp=word[tmp];lcd_wmd(tmp);tmp=dispbuf[5...
用单片机的并行口接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7...
这个没有,不过这种程序网上很好找啊,还有不同的单片机接口不一样,你随便找个改改就好了,很简单的,你只要看懂原理了就很容易的,不要所有东西都希望别人给你整完整啊,这样学不到东西的,给你找了一个大概的,你看看 include<reg52.h> define uint unsignedint define uchar unsignedchar uchar ...
51单片机 c语言编程 4*4矩阵键盘如何实现等待按键松开功能?
if(key_l!=0xf0){ delay_nms(5);key_l=P1;……在第4行加 while( key_l!=0xf0 );等待按键释放,按键不放开就一直在此处等待,知道按键释放,此语句执行完。再往下执行
跪求~~有单片机高手帮我解决4*4矩阵键盘程序的问题吗~~~
4*4矩阵键盘,按键及对应的控制,可以参考:http:\/\/hi.baidu.com\/%D7%F6%B6%F8%C2%DB%B5%C0\/blog\/item\/d025718ab4fa7bdefc1f10b7.html http:\/\/hi.baidu.com\/%D7%F6%B6%F8%C2%DB%B5%C0\/blog\/item\/ef086222268d4f4eac34de59.html ...
PIC16F877A的4*4矩阵式按键程序该怎么写
4×4矩阵式键盘识别技术实验任务如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键的序号排列如图4.14.1所示图4.14.1硬件电路原理图图4.14.2系统板上硬件连线把“单片机系统“区域中的P3.0-P3.7端口用8芯排线...
员怕保妇: 4*4矩阵键盘检测程序(新手用),本程序用于检测4*4矩阵按键,先检测是否有按 键按下,如果有按键按下,由P1口读出相应的编码值,由P0经两片74HC573输出给8位数码管,P2^0位选,P2^1段选,P1接4*4矩阵按键#include #include //头文...
江海区13052854613: 请问单片机中的4*4矩阵键盘的键值怎么求??? - ?
员怕保妇: 单片机书上应该有讲的哦,多查资料. 既然是4x4,即4行4列了,共需要8个I/O口,有8bit数据(如高四位为行4bit,低四位为列4bit)位:xxxx xxxx.还要结合你的程序来编码键值,如果有键按下了,查询所有按键的所连接的I/O口电平状态,每...
江海区13052854613: 单片机4*4矩阵键盘显示到8位数码管 目前现象是八个数码管全亮 且不受控 - ?
员怕保妇: void display() //通过定时器来按频率显示存储数字 {uchar r;for(r = t; r > 0; r--) { //从t最高位数码管开始写入数字P0 = wei[r]; wela = 1; wela = 0;P0 = table[keydata[r]]; dula = 1; dula = 0;//显示函数只送段选数据} } //显示每一位,应该有延时,...
江海区13052854613: 简单的51系列单片机控制4*4矩阵键盘显示电路图 - ?
员怕保妇: 可以在P0.0/P0.1/P0.2/P0.3四个I/O口上每个接四个按键,,在P0.4/P0.5/P0.6/P0.7四个口线上与前面的四个口线上的按键交插相连,这样可以通过查询的方式,比如是第查到P1.0口上有按键按下了,再转向查看P0.1,P0.5,P0.6,P0.7哪个口的电平发生的变化,这样就很容易找到是哪个按键了
江海区13052854613: 89c51单片机4*4矩阵键盘编程. - ?
员怕保妇: PANDUAN: MOV P1,#0FFHCLR P1.4MOV A,P1ANL A,#0FHXRL A,#0FHJZ SW1LCALL DELAY10MSJZ SW1//确认有键按下,但不知道哪个,此时可以之间让蜂鸣器叫 MOV P3.0,#1//蜂鸣器发声(赋1还是赋0取决你用的蜂鸣器)...
江海区13052854613: 【求解释】单片机最简单的矩阵键盘代码(只有三句) - ?
员怕保妇: 用手机提问最大的“优点”是不能给你源代码,因为长度会超标.我之前开发的有AVR/51开发板,里面有这个矩阵键盘带显示的程序,可是粘贴不上啊,字数限制.你可以给个邮箱发给你,或者登上百度Hi,直接给你.
江海区13052854613: 单片机4*4矩阵键盘中的4*4指的是什么,是横四个竖四个的意思,还是键盘的大小是4* - ?
员怕保妇: 1、4*4=16,总共16个按键,并且按照4行,4列的硬件接法,占用8个IO管脚.采用行扫描或反转法读取键值.但该硬件电路接法并不影响实际的布局,你当然可以摆成横2*竖8,甚至更多形式.2、同样16个按键,2*8也可,2行,8列硬件接法.但是会多用管脚.所以通常采用最少IO矩阵设计.3、按键的PCB封装外形大小,通常是6X6,单位mm.但是高度有很多种,根据实际需要选择高度.
江海区13052854613: 51单片机 如何4*4矩阵键盘输入按键 继电器输出信号 - ?
员怕保妇: ........... Inter0_process() interrupt 2 //外部中断1 { Key_scan();//你的键盘扫描程序(中断服务程序),一旦触发中断,将运行至本段. } //主程序main() {........... ........... ........... EX1=1; //开中断一 P3.3 IT1=1; //下降沿触发 ET1=1; EA=1;........... ...........} 注:图中的键盘接法都是独立按键接发,矩阵键盘没有见过能直接触发中断的.
江海区13052854613: 51单片机4*4矩阵键盘控制数码管显示,下面的程序不能实现? - ?
员怕保妇: uchar aa,bb,cc,dd,num,i,key,shu; …… num=num*10+i; if(num>1000) num=0; …… num, 0~255,能大于 1000 ?键盘程序,太滥了,去掉一大半,就够用了.
江海区13052854613: 单片机4*4矩阵键盘?
员怕保妇: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0}; uchar ...