单片机高手请进 5
提问:按下矩阵键盘的前八个按键,依次在数码管上显示1-8的平方。如按下第一个显示1,第二个显示4...;按下矩阵键盘后八个按键,依次显示1--8的立方。下面是我编的程序#...
提问:按下矩阵键盘的前八个按键,依次在数码管上显示1-8的平方。如按下第一个显示1,第二个显示4...;按下矩阵键盘后八个按键,依次显示1--8的立方。
下面是我编的程序
#include<reg52.h>
#define uchar unsigned int
#define uint unsigned int
uchar b,bai,shi,ge;
uchar const table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x76,0x79,0x38,0x00};
sbit dula=P2^6;
sbit wela=P2^7;
uchar keycan(void);
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge);
void main()
{
uchar key;
P0=0x00;
while(1)
{
key=keycan();
switch(key)
{
case 0xee: b=1; break;
case 0xde: b=4; break;
case 0xbe: b=9; break;
case 0x7e: b=16; break;
case 0xed: b=25; break;
case 0xdd: b=36; break;
case 0xbd: b=49; break;
case 0x7d: b=64; break;
case 0xeb: b=1; break;
case 0xdb: b=8; break;
case 0xbb: b=27; break;
case 0x7b: b=64; break;
case 0xe7: b=125; break;
case 0xd7: b=216; break;
case 0xb7: b=343; break;
case 0x77: b=512; break;
}
bai=b/100;
shi=b%100/10;
ge=b%10;
display(bai,shi,ge);
}
}
uchar keycan()
{
uchar cord_h,cord_l;
P3=0x0f;
cord_h=P3&0x0f;
if(cord_h!=0x0f)
{
delay(100);
cord_h=P3&0x0f;
if(cord_h!=0x0f)
{
P3=cord_h|0xf0;
cord_l=P3&0xf0;
return(cord_h+cord_l);
}
}return (0xff);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
不知道为什么P3.0的4个按键按了显示管没任何变化P3.1,P3.2.P3.3的按键按了都对,难道是起冲突了,求高手解答! 展开
下面是我编的程序
#include<reg52.h>
#define uchar unsigned int
#define uint unsigned int
uchar b,bai,shi,ge;
uchar const table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x76,0x79,0x38,0x00};
sbit dula=P2^6;
sbit wela=P2^7;
uchar keycan(void);
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge);
void main()
{
uchar key;
P0=0x00;
while(1)
{
key=keycan();
switch(key)
{
case 0xee: b=1; break;
case 0xde: b=4; break;
case 0xbe: b=9; break;
case 0x7e: b=16; break;
case 0xed: b=25; break;
case 0xdd: b=36; break;
case 0xbd: b=49; break;
case 0x7d: b=64; break;
case 0xeb: b=1; break;
case 0xdb: b=8; break;
case 0xbb: b=27; break;
case 0x7b: b=64; break;
case 0xe7: b=125; break;
case 0xd7: b=216; break;
case 0xb7: b=343; break;
case 0x77: b=512; break;
}
bai=b/100;
shi=b%100/10;
ge=b%10;
display(bai,shi,ge);
}
}
uchar keycan()
{
uchar cord_h,cord_l;
P3=0x0f;
cord_h=P3&0x0f;
if(cord_h!=0x0f)
{
delay(100);
cord_h=P3&0x0f;
if(cord_h!=0x0f)
{
P3=cord_h|0xf0;
cord_l=P3&0xf0;
return(cord_h+cord_l);
}
}return (0xff);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
不知道为什么P3.0的4个按键按了显示管没任何变化P3.1,P3.2.P3.3的按键按了都对,难道是起冲突了,求高手解答! 展开
2个回答
展开全部
一点注释都没有的程序。真是要辛苦给你解决问题的人了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
深圳思驰科技有限公司_
2024-10-23 广告
2024-10-23 广告
深圳思驰科技是国内先进入芯片解密领域的公司,拥有数十年的丰富经验,成功帮助国内外企业、政府及知名科研机构攻克多个技术难题。在医疗电子、工控设备、军事航天、通信设备、广电设备、交通设备、汽车电子、家用电子等行业都成功推出了多款创新产品,熟悉这...
点击进入详情页
本回答由深圳思驰科技有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询