求教!51单片机4x4矩阵键盘,利用矩阵键盘和数码管。

后使用快捷导航没有帐号?
请完成以下验证码
& & & & 【51单片机】
1 / 144 页
前天&16:44
前天&16:04
1 / 144 页
EEWORLD 官方微信
Powered by09:20 提问
51单片机矩阵键盘与八位共阴数码管问题求指点
目标是实现根据矩阵键盘输入内容显示对应的数字(0到f),如按下S1-&S8会显示0-&7八个数字,在上述情况下按下S9后会显示1-&8八位数,再按下S10后会显示2-&9;按S16清除数码管显示内容;
出现问题:当八位数码管都有数字时按下下一个按键后会覆盖最后一位,但第一位不会被移出显示屏;
内容:如计算器输入数据形式相同 从右至左 使用行列扫描方法
------------------------------------------------*/
#include&reg52.h& //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include &intrins.h&
#define KeyPort
sbit LATCH = P1^2;
//SER 串行数据
sbit SRCLK= P1^1;
//SCK 串行时钟信号
//ST 锁存输出信号
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[10]; //存储显示值的全局变量
void DelayUs2x(unsigned char t);//us级延时函数声明
void DelayMs(unsigned char t); //ms级延时
void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
unsigned char KeyScan(void);//键盘扫描
unsigned char KeyPro(void);
void Init_Timer0(void);//定时器初始化
/*------------------------------------------------
------------------------------------------------*/
void main (void)
unsigned char num,i,j;
unsigned char temp[8];
Init_Timer0();
num=KeyPro();
if(num!=0xff)
temp[i]=dofly_DuanMa[num];
for(j=0;j&=i;j++)
TempData[7-i+j]=temp[j];
if(i==8)//多出一个按键输入为了清屏 原本应该为8
if(j==500)
if(num==9)
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
while(--t);
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
while(t--)
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
/*------------------------------------------------
发送字节程序
------------------------------------------------*/
void hc595SendByte(unsigned char dat)
for(i=0; i&8; i++)
SER=dat&0x80;
/*------------------------------------------------
发送双字节程序
595级联,n个595,就需要发送n字节后锁存
------------------------------------------------*/
void Send2Byte(unsigned char dat1,unsigned char dat2)
hc595SendByte(dat1);
hc595SendByte(dat2);
/*------------------------------------------------
595锁存程序
595级联发送数据后,锁存有效
------------------------------------------------*/
void Out595(void)
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
static unsigned char i=0;
Send2Byte(dofly_WeiMa[i+FirstBit],TempData[i]);
if(i==Num)
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
TMOD |= 0x01;
//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00;
//给定初值
//TL0=0x00;
//总中断打开
//定时器中断打开
//定时器开关打开
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
TH0=()/256;
//重新赋值 2ms
TL0=()%256;
Display(0,8);
// 调用数码管扫描
/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void)
//键盘扫描函数,使用行列逐级扫描法
unsigned char V
KeyPort=0xf0;//高四位置高,低四位拉低
if(KeyPort!=0xf0)//表示有按键按下
DelayMs(10);
if(KeyPort!=0xf0)
//表示有按键按下
KeyPort=0 //检测第一行
if(KeyPort!=0xfe)
Val=KeyPort&0xf0;
Val+=0x0e;
while(KeyPort!=0xfe);
DelayMs(10); //去抖
while(KeyPort!=0xfe);
KeyPort=0 //检测第二行
if(KeyPort!=0xfd)
Val=KeyPort&0xf0;
Val+=0x0d;
while(KeyPort!=0xfd);
DelayMs(10); //去抖
while(KeyPort!=0xfd);
KeyPort=0 //检测第三行
if(KeyPort!=0xfb)
Val=KeyPort&0xf0;
Val+=0x0b;
while(KeyPort!=0xfb);
DelayMs(10); //去抖
while(KeyPort!=0xfb);
KeyPort=0xf7; //检测第四行
if(KeyPort!=0xf7)
Val=KeyPort&0xf0;
Val+=0x07;
while(KeyPort!=0xf7);
DelayMs(10); //去抖
while(KeyPort!=0xf7);
/*------------------------------------------------
按键值处理函数,返回扫键值
------------------------------------------------*/
unsigned char KeyPro(void)
switch(KeyScan())
case 0x7e:return 0;//0 按下相应的键显示相对应的码值
case 0x7d:return 1;//1
case 0x7b:return 2;//2
case 0x77:return 3;//3
case 0xbe:return 4;//4
case 0xbd:return 5;//5
case 0xbb:return 6;//6
case 0xb7:return 7;//7
case 0xde:return 8;//8
case 0xdd:return 9;//9
case 0xdb:return 10;//a
case 0xd7:return 11;//b
case 0xee:return 12;//c
case 0xed:return 13;//d
case 0xeb:return 14;//e
case 0xe7:return 15;//f
default:return 0
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐已解决问题
stc89c51单片机,我想用矩阵键盘控制数码管显示键值,但是我想用独立键盘复位。
提问时间: 05:38:15
stc89c51单片机,我想用矩阵键盘控制数码管显示键值,但是我想用独立键盘复位。
浏览次数:3350
你也可以把显示数码管的程序放在中断里执行也可以把显示数码管和键盘扫描放到同一个while(1)里面,显示一个数就扫一下键盘再显示另一个数又扫一下键盘。
答案创立者
以企业身份回答&
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题21ic官方微信-->
如何用矩阵键盘输入一多位数在数码管上显示
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
本帖最后由 cyl0856 于
13:50 编辑
求前辈高手们赐教,如何编程实现用矩阵键盘输入一多位数在数码管上显示,要c语言的,最好附上思路,
单片机芯片是STC89c52的,板子是德飞莱的,由于原理我也不懂,所以方框图也没法给,我希望实现的功能是在
矩阵键盘上按“1”键就在第一个数码管显示“1”,再按“2”键就在第二个数码管上显示“2”,最终用矩阵键盘输入一多位数,不知道能否实现?
这问题纠结好多天了,希望高手们指点小弟,
又见伸手党
中级工程师, 积分 3368, 距离下一级还需 1632 积分
中级工程师, 积分 3368, 距离下一级还需 1632 积分
中级工程师, 积分 3368, 距离下一级还需 1632 积分
中级工程师, 积分 3368, 距离下一级还需 1632 积分
楼主的提问,连百度也搜索不出来
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
输入一多位数好似问的都唔系好清楚。又见伸手党
技术总监, 积分 41125, 距离下一级还需 8875 积分
技术总监, 积分 41125, 距离下一级还需 8875 积分
技术总监, 积分 41125, 距离下一级还需 8875 积分
技术总监, 积分 41125, 距离下一级还需 8875 积分
最好注释详细点,外加方框图
高级技术员, 积分 757, 距离下一级还需 243 积分
高级技术员, 积分 757, 距离下一级还需 243 积分
高级技术员, 积分 757, 距离下一级还需 243 积分
高级技术员, 积分 757, 距离下一级还需 243 积分
硬件不同,程序不同,自己写吧亲
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
LZ忘记附上email或QQ了,帮写好了发给他。如5楼所说的,最好注释详细点,注释要中文的,外加方框图,程序要完整的工程。
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
coody 发表于
LZ忘记附上email或QQ了,帮写好了发给他。如5楼所说的,最好注释详细点,注释要中文的,外加方框图,程序要 ...
多谢兄台指点,但是它的原理我不懂,方框图没法给,还请兄弟多帮忙
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
资深工程师, 积分 12143, 距离下一级还需 7857 积分
你找一本基础的课本,里面详细得很。虽然实际的产品已经很少用这样的方案。
助理工程师, 积分 1902, 距离下一级还需 98 积分
助理工程师, 积分 1902, 距离下一级还需 98 积分
助理工程师, 积分 1902, 距离下一级还需 98 积分
助理工程师, 积分 1902, 距离下一级还需 98 积分
看到好问题,路过学学习
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
看来要看那个闲着才帮你搞全套
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
拿来主义那个给你慢慢改吧,改到合适你的
#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 num,temp,num1;
void delay(uint z)
& & & & uint x,y;
& & & & for(x=z;x&0;x--)
& & & & & & & & for(y=110;y&0;y--);
uchar keyscan();
void display(uchar aa);
void main()
& & & & num=17;
& & & & dula=1;
& & & & P0=0;
& & & & dula=0;
& & & & wela=1;
& & & & P0=0xc0;
& & & & wela=0;
& & & & while(1)
& & & & & & & & {
& & & & & & & & & & & & display(keyscan());
& & & & & & & & }
void display(uchar aa)
& & & & & & & & & & & & dula=1;
& & & & & & & & & & & & P0=table[aa-1];
& & & & & & & & & & & & dula=0;& & & & & & & &
uchar keyscan()
& & & & & & & & & & & & P3=0
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & delay(5);
& & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xee:num=1;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xde:num=2;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xbe:num=3;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0x7e:num=4;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & P3=0
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & delay(5);
& & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xed:num=5;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xdd:num=6;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xbd:num=7;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0x7d:num=8;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & P3=0
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & delay(5);
& & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xeb:num=9;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xdb:num=10;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xbb:num=11;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0x7b:num=12;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & P3=0xf7;
& & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & delay(5);
& & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xe7:num=13;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xd7:num=14;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0xb7:num=15;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & case 0x77:num=16;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=P3;
& & & & & & & & & & & & & & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
实习生, 积分 6, 距离下一级还需 44 积分
实习生, 积分 6, 距离下一级还需 44 积分
实习生, 积分 6, 距离下一级还需 44 积分
实习生, 积分 6, 距离下一级还需 44 积分
百度上有很多例子。。。。
方框图没法给!!!源码不给,原理图不给!!!!这个虎头蛇尾的问答。。。
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
林志财 发表于
拿来主义那个给你慢慢改吧,改到合适你的
#define uint unsigned int
老兄,我就是改不成才来问的,我本想用一循环右移来使位选在按下一个键后自动右移,以便在第二个数码管显示,但是就是不成功,我不知道该将这个循环右移放在哪?
这是我改的代码,劳烦看看错在哪?
#include&reg52.h&
#include &intrins.h&
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar tema[5];
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x80,0};
uchar num,temp,z,n1=0,n2=0,n3=0,n4=0,h;
void delay(uint z)
& & & & uint x,y;
& & & & for(x=z;x&0;x--)
& & & & & & & & for(y=110;y&0;y--);
uchar keyscan()
& & & & P1=0
& & & & temp=P1;
& & & & temp=temp&0xf0;
& & & & while(temp!=0xf0)
& & & & & & & & delay(5);
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & n1=1;
& & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case 0xee:num=1;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xde:num=8;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xbe:num=5;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0x7e:num=2;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & }
& & & & P1=0
& & & & temp=P1;
& & & & temp=temp&0xf0;
& & & & while(temp!=0xf0)
& & & & & & & & delay(5);
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & n2=1;
& & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case 0xed:num=17;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xdd:num=9;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xbd:num=6;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0x7d:num=3;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & }
& & & & P1=0
& & & & temp=P1;
& & & & temp=temp&0xf0;
& & & & while(temp!=0xf0)
& & & & & & & & delay(5);
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & n3=1;
& & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case 0xeb:num=9;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xdb:num=10;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xbb:num=7;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0x7b:num=4;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & }
& & & & P1=0xf7;
& & & & temp=P1;
& & & & temp=temp&0xf0;
& & & & while(temp!=0xf0)
& & & & & & & & delay(5);
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& & & & & & & & while(temp!=0xf0)
& & & & & & & & {
& & & & & & & & & & & & n4=0;
& & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & switch(temp)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case 0xe7:num=13;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xd7:num=14;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0xb7:num=15;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 0x77:num=16;
& & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & while(temp!=0xf0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & temp=P1;
& & & & & & & & & & & & & & & & temp=temp&0xf0;
& & & & & & & & & & & & }
& & & & & & & & & & & &
& & & & & & & & }
void display(uchar wan,uchar qin)
& & & & & & & & dula=1;
& & & & & & & & P0=table[wan-1];
& & & & & & & & dula=0;
& & & & & & & & P0=0
& & & & & & & & wela=1;
& & & & & & & & P0=
& & & & & & & & wela=0;
& & & & & & & & delay(1);
& & & & & & & &
void main()
& & & & uchar b,i=0,n;
& & & & b=0
& & & & num=18;
& & & & while(1)
& & & & & & & & tema=keyscan();
& & & & & & & & n=n1+n2+n3+n4;
& & & & & & & & if(n!=0)
& & & & & & & & {
& & & & & & & & & & & &
& & & & & & & & & & & & display(tema,b);& & & &
& & & & & & & & & & & & b=_cror_(b,1);
& & & & & & & & & & & & n=0;
& & & & & & & & & & & & i++;& & & &
& & & & & & & & }& & & &
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
助理工程师, 积分 1192, 距离下一级还需 808 积分
#include&reg52.h&
#define uint unsigned int
#define uchar unsigned char
sbit s1=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1,num2,wl1,wl2,wl3,wl4;
void delay(uint z)
& && &&&uint x,y;
& && &&&for(x=z;x&0;x--)
& && && && && & for(y=110;y&0;y--);
void init()
& & & & EA=1;
& & & & EA=1;//开总中断
& & & & EX0=1;//开外部中断0
& & & & TCON=0x01;
& & & & num=17;
& & & & num2=0;
& & & & wl1=0;
& & & & wl2=0;
& & & & wl3=0;
& & & & wl4=0;
void key_num()
& & & & while(flag)
& & & & & & & & P1=0
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& && &&&while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& && && && &&&delay(5);
& && && && &&&temp=P1;
& && && && &&&temp=temp&0xf0;
& && && && &&&while(temp!=0xf0)
& && && && &&&{
& && && && && && & temp=P1;
& & & & & & & & & & & && && &&&num2++;
& & & & & & & & & & & & & & & & & & & & if(num2==2)
& & & & & & & & & & & & & & & & & & & & wl1=
& & & & & & & & & & & & & & & & & & & & else if(num==3)
& & & & & & & & & & & & & & & & & & & & wl2=
& & & & & & & & & & & & & & & & & & & & else if(num==4)
& & & & & & & & & & & & & & & & & & & & wl3=
& & & & & & & & & & & & & & & & & & & & else if(num==5)
& & & & & & & & & & & & & & & & & & & & wl4=
& & & & & & & & & & & & & & & && &&&else
& & & & & & & & & & & & & & & && &&&num2=0;
& && && && && && & switch(temp)
& && && && && && && &&&{
& && && && && && && && && &&&case 0xee:num=0;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0xde:num=1;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0xbe:num=2;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0x7e:num=3;
& && && && && && && && && && && && && &
& && && && && && && && &}
& && && && && && && &&&while(temp!=0xf0)
& && && && && && && && &{
& && && && && && && && && && &temp=P1;
& && && && && && && && && && &temp=temp&0xf0;
& && && && && && && && &}
& && && && && &}
& && && & }
& & & & & & & & P1=0
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& && &&&while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& && && && &&&delay(5);
& && && && &&&temp=P1;
& && && && &&&temp=temp&0xf0;
& && && && &&&while(temp!=0xf0)
& && && && &&&{
& && && && && && & temp=P1;
& & & & & & & & & & & && && &&&num2++;
& & & & & & & & & & & & & & & && & if(num2==2)
& & & & & & & & & & & & & & & & & & & & wl1=
& & & & & & & & & & & & & & & & & & & & else if(num==3)
& & & & & & & & & & & & & & & & & & & & wl2=
& & & & & & & & & & & & & & & & & & & & else if(num==4)
& & & & & & & & & & & & & & & & & & & & wl3=
& & & & & & & & & & & & & & & & & & & & else if(num==5)
& & & & & & & & & & & & & & & & & & & & wl4=
& & & & & & & & & & & & & & & && &&&else
& & & & & & & & & & & & & & & && &&&num2=0;
& && && && && && & switch(temp)
& && && && && && && &&&{
& && && && && && && && && &&&case 0xea:num=4;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0xda:num=5;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0xba:num=6;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0x7a:num=7;
& && && && && && && && && && && && && &
& && && && && && && && &}
& && && && && && && &&&while(temp!=0xf0)
& && && && && && && && &{
& && && && && && && && && && &temp=P1;
& && && && && && && && && && &temp=temp&0xf0;
& && && && && && && && &}
& && && && && &}
& && && & }
& & & & & & & & P1=0xf6;
& & & & & & & & temp=P1;
& & & & & & & & temp=temp&0xf0;
& && &&&while(temp!=0xf0)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& && && && &&&delay(5);
& && && && &&&temp=P1;
& && && && &&&temp=temp&0xf0;
& && && && &&&while(temp!=0xf0)
& && && && &&&{
& && && && && && & temp=P1;
& & & & & & & & & & & && && &&&num2++;
& & & & & & & & & & & & & & & && & if(num2==2)
& & & & & & & & & & & & & & & & & & & & wl1=
& & & & & & & & & & & & & & & & & & & & else if(num==3)
& & & & & & & & & & & & & & & & & & & & wl2=
& & & & & & & & & & & & & & & & & & & & else if(num==4)
& & & & & & & & & & & & & & & & & & & & wl3=
& & & & & & & & & & & & & & & & & & & & else if(num==5)
& & & & & & & & & & & & & & & & & & & & wl4=
& & & & & & & & & & & & & & & && &&&else
& & & & & & & & & & & & & & & && &&&num2=0;
& && && && && && & switch(temp)
& && && && && && && &&&{
& && && && && && && && && &&&case 0xee:num=8;
& && && && && && && && && && && && && &
& && && && && && && && && &&&case 0xde:num=9;
& && && && && && && && && && && && && &
& && && && &
& && && && && && && && &}
& && && && && && && &&&while(temp!=0xf0)
& && && && && && && && &{
& && && && && && && && && && &temp=P1;
& && && && && && && && && && &temp=temp&0xf0;
& && && && && && && && &}
& && && && && &}
& && && & }& & & &
& & & & & & & & P2=0x0c;
& & & & & & & & P0=table[wl1];
& & & & & & & & delay(4);& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & P2=0x08;
& & & & & & & & P0=table[wl2];
& & & & & & & & delay(4);& & & & & & & & & & & &
& & & && &&&P2=0x04;
& & & & & & & & P0=table[wl3];
& & & & & & & & delay(4);& & & & & & & & & & & &
& & & & & & & & P2=0x00;
& & & & & & & & P0=table[wl4];
& & & & & & & & delay(4);
& & & & & & & & & & & &
&&& & & & }
& & & & init();
& & while(1)
& & & & & & & & key_num();
void exter0() interrupt 0
& & & & num1++;
& & & & if(num1%2==1)
& & & & & & & & flag=1;
& & & & & & & & s1=0;& & & &
& & & & else
& & & & flag=0;& & & &
没有测试过你自己看看
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
技术奇才奖章
人才类勋章
时间类勋章
湍急之河流
发帖类勋章
精华达人奖章
等级类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
荣誉元老奖章
等级类勋章
技术高手奖章
人才类勋章
甘甜之泉水
发帖类勋章
精英会员奖章
等级类勋章
奔腾之江水
发帖类勋章
时间类勋章
核心会员奖章
等级类勋章
技术导师奖章
人才类勋章
您需要登录后才可以回帖
热门推荐 /6

我要回帖

更多关于 单片机矩阵键盘程序 的文章

 

随机推荐