找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2297|回复: 4
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
按下矩阵键盘中的16个按键,依次在数码管上显示1~16的平方,如按下第一个按键显示1,第二个按键显示4,……,第十六个按键显示256。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar b,bai,shi,ge;
uchar const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
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*1; break;
case 0xde: b=2*2; break;
case 0xbe: b=3*3; break;
case 0x7e: b=4*4; break;
case 0xed: b=5*5; break;
case 0xdd: b=6*6; break;
case 0xbd: b=7*7; break;
case 0x7d: b=8*8; break;
case 0xeb: b=9*9; break;
case 0xdb: b=10*10; break;
case 0xbb: b=11*11; break;
case 0x7b: b=12*12; break;
case 0xe7: b=13*13; break;
case 0xd7: b=14*14; break;
case 0xb7: b=15*15; break;
case 0x77: b=16*16; 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);
}

批注 2020-06-02 112458.png (86.93 KB, 下载次数: 62)

批注 2020-06-02 112458.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-6-2 20:42 | 只看该作者
段码取反试看,可能是段码不对数码管的型号。
回复

使用道具 举报

板凳
ID:332444 发表于 2020-6-3 10:18 | 只看该作者

回复

使用道具 举报

地板
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. }
复制代码





回复

使用道具 举报

5#
ID:332444 发表于 2020-6-5 11:01 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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