标题: 要求如果按下两个按钮单片机控制红灯亮数码管显示FF要怎么搞啊 [打印本页]

作者: 2613    时间: 2019-5-22 09:44
标题: 要求如果按下两个按钮单片机控制红灯亮数码管显示FF要怎么搞啊
要求如果按下两个按钮红灯亮数码管显示FF要怎么搞啊
  1. #include <reg51.h>
  2. char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. char key_buf[]={0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0xe7,0xd7,0xb7};
  4. sbit P3_0=P3^0;
  5. sbit P3_1=P3^1;
  6. void getKey() interrupt 0
  7. {
  8. char key_scan[]={0xef,0xdf,0xbf,0x7f};
  9. char i=0,j=0,c=0;
  10.   int a=0;
  11. for(i=0;i<4;i++)
  12. {
  13.   P2=key_scan[i];
  14.   for(j=0;j<12;j++)
  15.   {
  16.    if(key_buf[j]==P2)
  17.    {
  18.     P3_0=0;
  19.     if(j<10)
  20.     {
  21.       P0=led_mod[0];
  22.       P1=led_mod[j];
  23.     }
  24.     else if(j>=10)
  25.     {
  26.       P0=led_mod[j/10];
  27.       P1=led_mod[j%10];
  28.     }
  29.     a++;
  30.     break;
  31.    }
  32.   }
  33.    if(a>1)
  34.     {
  35.      P3_0=1;
  36.      P3_1=0;
  37.      P0=0x71;
  38.      P1=0x71;
  39.      break;
  40.          }
  41. }
  42. a=0;
  43. P2=0x0f;
  44. }
  45. void main(void)
  46. {
  47. IT0=1;
  48. EX0=1;
  49. EA=1;
  50. P2=0x0f;
  51. P0=0x00;
  52. P1=0x00;
  53. P3_0=1;
  54. P3_1=1;
  55. while(1)
  56. {
  57.   if(P2==0x0f)P3_0=1;
  58.   if(P2==0x0f)P3_1=1;
  59.   }
  60. }
复制代码

批注 2019-05-22 093910.png (257.46 KB, 下载次数: 90)

批注 2019-05-22 093910.png

批注 2019-05-22 093910.png (257.46 KB, 下载次数: 74)

批注 2019-05-22 093910.png

作者: suncat0504    时间: 2019-5-28 21:47
让数码管显示F,设置显示的笔段值为0x71(共阴数码管的话),你的代码中没有看到有这个笔段值对应,只看到0-9的,char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};,表示的是0-9的笔段对应,你最好加上A,b,C,d,E,F对应的。
作者: suncat0504    时间: 2019-5-28 21:49
我的这个;unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x10};设置的是0-9,A,b,C,d,E,F,-,_这几个字符的
作者: 2613    时间: 2019-5-29 08:12
suncat0504 发表于 2019-5-28 21:47
让数码管显示F,设置显示的笔段值为0x71(共阴数码管的话),你的代码中没有看到有这个笔段值对应,只看到0 ...

在那个if语句里面,我是单独赋值的没有加到数组里面
作者: ffggg    时间: 2019-6-7 22:46
让数码管显示F,设置显示的笔段值为0x71(共阴数码管的话),你的代码中没有看到有这个笔段值对应,只看到0-9的,char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};,表示的是0-9的笔段对应,你最好加上A,b,C,d,E,F对应的。
作者: durantyin    时间: 2019-6-29 14:13
让数码管显示F,设置显示的笔段值为0x71(共阴数码管的话),你的代码中没有看到有这个笔段值对应,只看到0-9的,char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};,表示的是0-9的笔段对应,你最好加上A,b,C,d,E,F对应的。
作者: matthewroy    时间: 2019-7-2 16:15
逻辑分析一下
作者: 1194783151    时间: 2019-7-12 12:31
可以用4*4的16位矩阵按键试试,F对应的数码管是0x71,0-F有16位,要是需要每个按键对应显示的话可以接矩阵按键试试
作者: 小萧萧    时间: 2019-7-17 11:12
用逻辑分析仪看一下
作者: 鹏博士PBs    时间: 2019-7-23 11:33
数码管是采用段选(A_G)和位选(4位)
作者: gaoyuaniloveyou    时间: 2019-7-24 09:03
让数码管显示F,设置显示的段选值为0x71(共阴数码管的话),你的代码中没有这个代码,只看到0-9的,char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};表示的是0-9的段选对应,你最好加上A,b,C,d,E,F对应的。
作者: az1159632229    时间: 2019-7-25 20:59
你这仿真 不加外部晶振的?
作者: anyurui    时间: 2019-7-31 14:23
有PDF的数字电路和模拟电路么





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1