微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > PCB设计学习讨论 > 51单片机类 在四位共阳极数码管上显示键盘输入

51单片机类 在四位共阳极数码管上显示键盘输入

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
bit flag;
unsigned char key_scannum[] = {0xef,0xdf,0xbf,0x7f};
unsigned char table[]= {0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};//?ü?ì°′?ü??
unsigned char led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //P0?ú????±à??
void delay(uint x) //?óê±3ìDò
{
                        uint y;
                        for(x;x>0;x--)
                        for(y=0;y<100;y++);       
}
unsigned char keyscan(void)                        //?ü?ìé¨?è?μoˉêy
{
        unsigned char i,j;
        P1=0x0f;                                                                        //?ì2éê?·?óD?ü°′??
        if(P1!=0x0f)                                                        //±íê?óD°′?ü°′??
   {
     delay(1);                                                          //è¥??
                 if(P1!=0x0f)
                  for(i = 0;i < 4;i++)
                  {
                         P1 = key_scannum[i];
                         if(P1 != key_scannum[i])//′?DDóD?ü°′??
                                for(j = 0;j < 16;j++)
                                {
                                 if(P1 == table[j])
                                 {
                                         flag=1;
                                   return(j);                         
                                 }
                          }
                  }
         }
while((P1 & 0x0f)<0x0f);
return(0);
}
void display(uint num)
{
  uint ge,shi,bai,qian;
  qian=num/1000;
  P0=led[qian];
  P2=0xf7;
  delay(1);
  P2=0xff;
  bai=num%1000/100;
  P0=led[bai];
  P2=0xfb;
  delay(1);
  P2=0xff;
  shi=num%100/10;
  P0=led[shi] & 0x7f;
  P2=0xfd;
  delay(1);
  P2=0xff;
  ge=num%10;
  P0=led[ge];
  P2=0xfe;
  delay(1);
  P2=0xff;
}
void main(void)
{
        uint que,num=0;
        while(1)
        {
   que=keyscan();
   if(flag==1)
         {
          num=num*10+que;
          flag=~flag;
         }
                display(num);
        }
}
这是写的程序,出不来结果,各位大神看一下,是哪里出问题了?

不要只是说出不来结果,把问题的详细情况说清楚,比如设计的功能是怎样的,在什么样的操作下出不来结果,有什么反应没有,把异常描述清楚别人才好帮你分析,不然很少有人有时间去仔细看你的程序帮你一句句分析问题的。

数码管只显示两位,键盘按下没反应

深圳万达行电子,厂家直销,专业生产整流二极管以及整流桥堆,M7  SS14  MB10S  MB10F  M7F  特价销售,详情请咨询QQ2471806688,欢迎咨询下单

控制位没有声明  单片机不知道电平跳变他要干嘛

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top