#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define led P0
sbit c1=P2^0;
sbit c2=P2^1;
uchar j,b;
uchar num;
uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
///////////////////////////////////////////delay
void delay(unsigned int c)
{
while (c!=0)
{
unsigned int i;
for(i=0;i<100;i++);
c--;
}
}
////////////////////////////////////////////
uchar checkkey()
{
uchar i,j;
j=0x0f;
P3=j;
i=P3;
if(i==j) return(0);
else return (1);
}
//////////////////////////////////////
uchar scan()
{
uchar scancode,codevalue;
uchar i,j;
uchar m=0;
uchar k,x;
if(checkkey()==1)
{
delay(100);
if(checkkey()==1)//key_presss
{
scancode=0xfe;
m=0x00;
for(i=1;i<=4;i++)//line_scan
{
k=0x10;
P3=scancode;
x=P3;
for(j=1;j<=4;j++)//row_scan
{
if((x&k)==0)
{
codevalue=m+j;
while(checkkey()!=0);
return (codevalue);
}
else k=k<<1;
}
m=m+4;
scancode=~scancode;
scancode=scancode<<1;
scancode=~scancode;
}
}
}
}
//////////////////////////////////////////////////////////
void display(uchar num)
{
if(num<10)
{
c1=0;
c2=1;
led=a[num];
delay(800);
}
else
{
for(j=0;j<10;j++)
{
c2=0;
c1=1;
led=a[num/10];
delay(400);
c1=0;
c2=1;
led=a[num%10];
delay(40);
c2=0;
c1=0;
}
}
}
///////////////////////////////////////////////////////
void main()
{
uchar d;
while(1)
{
if(checkkey()==1)
{
d=scan();
delay(100);
display(d);
}
}
}
PIC16F877A的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芯排线连接到“4X4行列式键盘”区域中的C1...
使用单片机的P1口扩展4*4键盘矩阵,实现在键盘上每按一个数字键用静态...
P1.0~P1.3为列线,P1.4~P1.7为行线;列线和行线的交叉点接按键。先在列线上依次输出1,然后再在行线上读取;可根据行线的输入和列线的输出来判定是哪个按键按下。具体的显示部分,应该很简单吧。
写一程序,要求按什么键就在数码管上显示其键值
;实验任务:用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作列输入线,以P1.4-P1.7作行输出线.; 在数码管上显示每个按键的"0-F"序号,使用使共阳码管显示对应的键值.;;;程序初始化 ;LEDOUT EQU P2 KEYMATRIX EQU P1 SCANCODE EQU R2 KEYCODE EQU R3 COUNT...
写一个2*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芯排线连接4X4行列式键盘区域C1-C4 R1-R4端口;单片...
单片机4*4行列式键盘程序! 动态显示,开始时,显示“——”,按键后显示相...
\/*行线接P1.0-P1.3,列线接P1.4-P1.7。根据扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示。开机时,数码管显示“-”。当键按下时,数码管显示按下键的键值,蜂鸣器响一声。*\/ include <reg52.h> include <intrins.h> define uchar unsigned char define uint ...
proteus仿真4x4矩阵键盘中断方式扫描数码管显示
1. **硬件连接**:将4x4矩阵键盘的行线连接到单片机的某个I\/O口(如P1.0~P1.3),列线连接到另一个I\/O口(如P1.4~P1.7)。数码管的段选线连接到单片机的另一个I\/O口(如P0),用于显示按键对应的字符。2. **中断设置**:配置单片机的中断系统,将键盘的列线或行线配置为外部中断...
利用AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数...
这个工作量,需要几天的时间完成。谁有时间白给你做这些事,就是闲得闹心也不会做的。
怎样知道单片机的矩阵键盘每个按键的地址?
1、比如是一个4行×4列的矩阵键盘。2、将4行和4列共8根线分别接到单片机的I\/O口,比如接P1口,行接低4位(P1.0~P1.3),列接高4位(P1.4~P1.7)。3、单片机先将行置第电平0,列置高电平1.4、在键盘扫描程序中,判断是否有任意按键按下:if((P1&0xf0)!=0xf0),表示有按键...
AT89S51单片机的P1.0~P1.3 接四个发光二极管, P1.4~P1.7 接四个开关...
ABC:MOV A,P1 \/\/把P1送入A SWAP A \/\/A高四位和低四位互换,反映到发光二极管上开关闭合对应的灯亮开关断开 ANL A,#0FH \/\/保留低四位 MOV P1,A \/\/输出 ORL P1,#0F0H \/\/把P1高四位置1,等待下一次按键按下 SJMP ABC \/\/调回ABC,循环 给分吧~~
AT89S51单片机的P1.0~P1.3 接四个发光二极管, P1.4~P1.7 接四个开关...
ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV A,P1 ANL A,#0F0H SWAP A MOV P1,A SJMP MAIN END