【按下16个矩阵键盘依次在数码管上显示1-16的平方.如按下-查字典问答网
分类选择

来自景玉峰的问题

  【按下16个矩阵键盘依次在数码管上显示1-16的平方.如按下第一个显示1,第二个显示4...#include#defineucharunsignedchar#defineuintunsignedintucharb,bai,shi,ge;ucharconstel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7】

  按下16个矩阵键盘依次在数码管上显示1-16的平方.如按下第一个显示1,第二个显示4...

  #include

  #defineucharunsignedchar

  #defineuintunsignedint

  ucharb,bai,shi,ge;

  ucharconstel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

  x09x09x090x77,0x7c,0x39,0x5e,0x79,0x71};

  ucharkeycan(void);

  voiddelay(uintz);

  voiddisplay(ucharbai,ucharshi,ucharge);

  voidmain()

  {

  ucharkey;

  P0=0x00;

  while(1)

  {

  x09key=keycan();

  x09switch(key)

  x09{

  x09case0xee:b=1*1;break;

  x09case0xde:b=2*2;break;

  x09case0xbe:b=3*3;break;

  x09case0x7e:b=4*4;break;

  x09case0xed:b=5*5;break;

  x09case0xdd:b=6*6;break;

  x09case0xbd:b=7*7;break;

  x09x09case0x7d:b=8*8;break;

  x09x09case0xeb:b=9*9;break;

  x09x09case0xdb:b=10*10;break;

  x09x09case0xbb:b=11*11;break;

  x09x09case0x7b:b=12*12;break;

  x09x09case0xe7:b=13*13;break;

  x09x09case0xd7:b=14*14;break;

  x09case0xb7:b=15*15;break;

  x09x09case0x77:b=16*16;break;

  x09}

  x09bai=b/100;

  x09shi=b%100/10;

  x09ge=b%10;

  x09display(bai,shi,ge);

  }

  }

  ucharkeycan()

  {

  ucharcord_h,cord_l;

  P3=0x0f;

  cord_h=P3&0x0f;

  if(cord_h!=0x0f)

  {

  delay(100);

  x09cord_h=P3&0x0f;

  x09if(cord_h!=0x0f)

  x09{

  x09P3=cord_h|0xf0;

  x09cord_l=P3&0xf0;

  x09return(cord_h+cord_l);

  x09}

  }return(0xff);x09

  }

  voiddelay(uintz)

  {

  uintx,y;

  for(x=z;x>0;x--)

  for(y=110;y>0;y--);

  }

  voiddisplay(ucharbai,ucharshi,ucharge)

  {

  P2=0;x09

  P0=el[bai];

  delay(10);

  P2=1;

  P0=el[shi];

  delay(10);

  P2=2;

  P0=el[ge];

  delay(10

3回答
2020-03-13 07:00
我要回答
请先登录
钱建平

  #include

  #defineucharunsignedchar

  #defineuintunsignedint

  ucharb,bai,shi,ge;

  ucharconsttable[]={0x3f,0x06,0x5b,0x4f,

  0x66,0x6d,0x7d,0x07,

  0x7f,0x6f,0x76,0x79,0x38,0x00};

  sbitdula=P2^6;

  sbitwela=P2^7;

  ucharkeycan(void);

  voiddelay(uintz);

  voiddisplay(ucharbai,ucharshi,ucharge);

  voidmain()

  {

  ucharkey;

  P0=0x00;

  while(1)

  {

  x05key=keycan();

  x05switch(key)

  x05{

  x05case0xee:b=1*1;break;

  x05case0xde:b=2*2;break;

  x05case0xbe:b=3*3;break;

  x05case0x7e:b=4*4;break;

  x05case0xed:b=5*5;break;

  x05case0xdd:b=6*6;break;

  x05case0xbd:b=7*7;break;

  x05x05case0x7d:b=8*8;break;

  x05x05case0xeb:b=9*9;break;

  x05x05case0xdb:b=10*10;break;

  x05x05case0xbb:b=11*11;break;

  x05x05case0x7b:b=12*12;break;

  x05x05case0xe7:b=13*13;break;

  x05x05case0xd7:b=14*14;break;

  x05case0xb7:b=15*15;break;

  x05x05case0x77:b=16*16;break;

  x05}

  x05bai=b/100;

  x05shi=b%100/10;

  x05ge=b%10;

  x05display(bai,shi,ge);

  }

  }

  ucharkeycan()

  {

  ucharcord_h,cord_l;

  P3=0x0f;

  cord_h=P3&0x0f;

  if(cord_h!=0x0f)

  {

  delay(100);

  x05cord_h=P3&0x0f;

  x05if(cord_h!=0x0f)

  x05{

  x05P3=cord_h|0xf0;

  x05cord_l=P3&0xf0;

  x05return(cord_h+cord_l);

  x05}

  }return(0xff);x05

  }

  voiddelay(uintz)

  {

  uintx,y;

  for(x=z;x>0;x--)

  for(y=110;y>0;y--);

  }

  voiddisplay(ucharbai,ucharshi,ucharge)

  {

  dula=1;

  x05x05P0=table[bai];

  x05x05dula=0;

  x05x05P0=0xff;

  x05x05wela=1;

  x05x05P0=0xf7;

  x05x05wela=0;

  x05x05delay(1);

  dula=1;

  x05x05P0=table[shi];

  x05x05dula=0;

  x05x05P0=0xff;

  x05x05wela=1;

  x05x05P0=0xef;

  x05x05wela=0;

  x05x05delay(1);

  dula=1;

  x05x05P0=table[ge];

  x05x05dula=0;

  x05x05P0=0xff;

  x05x05wela=1;

  x05x05P0=0xdf;

  x05x05wela=0;

  x05x05delay(1);

  }

  我认为是你的voiddisplay(ucharbai,ucharshi,ucharge)这里有错误,上面是我的程序,只是改了一点,我的好用,你的显示程序外围我不知道,

2020-03-13 07:02:42
景玉峰

  这是我的这个单片机的数码管的电路图,我的单片机的数码管那里就是多了一个译码器,这个程序就是最后一列按键的数16,64,144,256在数码上显示不出来,这四个数总是在按下按键后一闪而过,其他的数都能很好的显示,我不知道是什么原因,可以帮帮我吗

2020-03-13 07:07:32
钱建平

  #include#defineucharunsignedchar#defineuintunsignedintucharb,bai,shi,ge;ucharconstel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbitHC=P3^7;ucharkeycan(void);voiddelay(uintz);voiddisplay(ucharbai,ucharshi,ucharge);voidmain(){ucharkey;P0=0x00;while(1){key=keycan();switch(key){case0xee:b=1*1;break;case0xde:b=2*2;break;case0xbe:b=3*3;break;case0x7e:b=4*4;break;case0xed:b=5*5;break;case0xdd:b=6*6;break;case0xbd:b=7*7;break;case0x7d:b=8*8;break;case0xeb:b=9*9;break;case0xdb:b=10*10;break;case0xbb:b=11*11;break;case0x7b:b=12*12;break;case0xe7:b=13*13;break;case0xd7:b=14*14;break;case0xb7:b=15*15;break;case0x77:b=16*16;break;}bai=b/100;shi=b%100/10;ge=b%10;display(bai,shi,ge);}}ucharkeycan(){ucharcord_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);}voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddisplay(ucharbai,ucharshi,ucharge){HC=1;P0=el[bai];HC=0;P2=0x00;delay(10);HC=1;P0=el[shi];HC=0;P2=0x01;delay(10);HC=1;P0=el[ge];HC=0;P2=0x02;delay(10);}你再下载一下你的HC573芯片那个控制端有问题,这程序不知道好不好用,我的没有138芯片,帮你分析了很久!!有什么事打我电话134567740004

2020-03-13 07:11:59

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •