找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

这个单片机16个按键显示平方的程序实现不了啊,数码管会闪烁

查看数: 2632 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-6-2 11:26

正文摘要:

按下矩阵键盘中的16个按键,依次在数码管上显示1~16的平方,如按下第一个按键显示1,第二个按键显示4,……,第十六个按键显示256。 #include<reg52.h> #define uchar unsigned char #define uint unsigned i ...

回复

ID:332444 发表于 2020-6-5 11:01
ID:213173 发表于 2020-6-3 14:40
楼主显示程序和按键程序都有毛病,给你改了试试。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar c,bai,shi,ge;
  5. uint b;
  6. uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
  7. sbit dula=P2^6;
  8. sbit wela=P2^7;
  9. uchar keycan(void);
  10. void delay(uint z);
  11. void display(uchar bai,uchar shi,uchar ge);
  12. void main()
  13. {
  14.         uchar key;
  15.         P0=0x00;
  16.         while(1)
  17.         {
  18.                 key=keycan();
  19.                 switch(key)
  20.                 {
  21.                         case 0xee: b=1*1; break;
  22.                         case 0xde: b=2*2; break;
  23.                         case 0xbe: b=3*3; break;
  24.                         case 0x7e: b=4*4; break;
  25.                         case 0xed: b=5*5; break;
  26.                         case 0xdd: b=6*6; break;
  27.                         case 0xbd: b=7*7; break;
  28.                         case 0x7d: b=8*8; break;
  29.                         case 0xeb: b=9*9; break;
  30.                         case 0xdb: b=10*10; break;
  31.                         case 0xbb: b=11*11; break;
  32.                         case 0x7b: b=12*12; break;
  33.                         case 0xe7: b=13*13; break;
  34.                         case 0xd7: b=14*14; break;
  35.                         case 0xb7: b=15*15; break;
  36.                         case 0x77: b=16*16; break;
  37.                 }
  38.                 bai=b/100%10;
  39.                 shi=b/10%10;
  40.                 ge =b%10;
  41.                 display(bai,shi,ge);
  42.         }
  43. }
  44. uchar keycan()
  45. {
  46.         uchar cord_h,cord_l;

  47.         P3=0x0f;
  48.         cord_h=P3&0x0f;
  49.         if(cord_h!=0x0f)
  50.         {
  51.                 c++;
  52.                 if(cord_h!=0x0f && c==3)
  53.                 {
  54.                         c=2;
  55.                         cord_h=P3&0x0f;
  56.                         if(cord_h!=0x0f)
  57.                         {
  58.                                 P3=cord_h|0xf0;
  59.                                 cord_l=P3&0xf0;
  60.                                 return(cord_h+cord_l);
  61.                         }
  62.                 }return (0xff);
  63.         }
  64.         else c=0;
  65. }
  66. void delay(uint z)
  67. {
  68.         uint x,y;
  69.         for(x=z;x>0;x--)
  70.                 for(y=110;y>0;y--);
  71. }
  72. void display(uchar bai,uchar shi,uchar ge)
  73. {
  74.         P0=0x00;//段消隐
  75.         dula=1;
  76.         dula=0;
  77.         P0=0xf7;
  78.         wela=1;
  79.         wela=0;
  80.         P0=table[bai];
  81.         dula=1;
  82.         dula=0;
  83.         delay(1);

  84.         P0=0x00;
  85.         dula=1;
  86.         dula=0;
  87.         P0=0xef;
  88.         wela=1;
  89.         wela=0;
  90.         P0=table[shi];
  91.         dula=1;
  92.         dula=0;
  93.         delay(1);

  94.         P0=0x00;
  95.         dula=1;
  96.         dula=0;
  97.         P0=0xdf;
  98.         wela=1;
  99.         wela=0;
  100.         P0=table[ge];
  101.         dula=1;
  102.         dula=0;
  103.         delay(1);
  104. }
复制代码





ID:332444 发表于 2020-6-3 10:18

ID:332444 发表于 2020-6-2 20:42
段码取反试看,可能是段码不对数码管的型号。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表