打印

数码管不能正常显示

[复制链接]
1984|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huwr|  楼主 | 2011-2-22 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用按键来启动、停止、复位时钟的显示,但结果不正常。
以下是源程序
//**************************************************
//程序功能:时钟,前两位显示分钟,后两位显示秒
//P1.7按键功能,开始计时
//P1.6按键功能,停止计时
//P1.5按键功能,清零,重新开始
//*************************************************

#include<reg51.h>
code unsigned char seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
                               0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码
unsigned int cnt=0;         
unsigned char sec=0;
unsigned char min=0;


void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--);  //延时124*8+10=1002us
}
delay10ms()            //延时10ms
{
unsigned i,j;
for(i=0;i<50;i++)
for(j=0;j<100;j++);
}

void KEY(void)              //按键判断子程序
{
  if(P1_7==0)                 //P1.7按键功能,开始计时
  {
   delay10ms();            //软件去抖动
   if(P1_7==0)               
   {  
             TH0=0x19;          //11.0529MHZ的晶振,250us的定时中断
    TL0=0x19;
    TR0=1;
   }
  }
   else if(P1_6==0)             //P1.6按键功能,停止计时
  {
   delay10ms();
   if(P1_6==0)
   { TR0=0;}
  }
   else if(P1_5==0)           //P1.5按键功能,清零,重新开始
  {
   delay10ms();
   if(P1_5==0)
   {sec=0;min=0;}
  }
}

void LED_display()       //显示
{
     P1=0xfe;                  //P1.0=0,选通第一位
  P2=seg7code[min/10];     //显示小时的第一位
  delay1ms();
  P2=0xff;                  //消隐
  P1=0xfd;                  //P1.1=0,选通第二位
  P2=seg7code[min%10];     //显示小时的第一位
  delay1ms();
  P2=0xff;                 //消隐
  P1=0xfb;                   //P1.2=0,选通第三位
  P2=seg7code[sec/10];       //显示分的第一位
  delay1ms();
  P2=0xff;                 //消隐
P1=0xf7;                   //P1.3=0,选通第四位
  P2=seg7code[sec%10];       //显示分的第二位
  delay1ms();
  P2=0xff;                 //消隐
}

void timer0 (void) interrupt 1 using 0
{
cnt++;             //每过250us,cnt加一
if(cnt==4000)      //250*4000=1s
{
  cnt=0;
  sec++;           
  if(sec==60)       //60秒,重新计数,分钟加一
  { sec=0;
    min++;
    if(min==60)         //60分,重新计数  {
  min=0;
   }
  
  }
}
}

main()
{
  TMOD=0x02;          //T0,方式2

     EA=1;                 //开总中断
  ET0=1;               //开定时器T0中断
  
  while(1)
{
  KEY();
  LED_display();
  
}
}
沙发
huanghuac| | 2011-2-22 21:22 | 只看该作者
怎么个不正常法?

使用特权

评论回复
板凳
huwr|  楼主 | 2011-2-22 21:45 | 只看该作者
显示的不对呗

使用特权

评论回复
地板
huanghuac| | 2011-2-22 22:13 | 只看该作者
按键和显示会互相干扰

使用特权

评论回复
5
happy_10| | 2011-2-23 14:03 | 只看该作者
对,按键和数码管显示应该用不同的口吧,楼主先看好

使用特权

评论回复
6
gongche| | 2011-2-23 14:12 | 只看该作者
按键用端口的输入功能,显示用输出功能这样能做到互不影响吧?

使用特权

评论回复
7
53789| | 2011-2-23 16:34 | 只看该作者
试一下这个:
void KEY(void)
  {
    P1=0xe0;
    ...
    ...
    ...
  }

使用特权

评论回复
8
huwr|  楼主 | 2011-2-23 18:47 | 只看该作者
试一下这个:
void KEY(void)
  {
    P1=0xe0;
    ...
    ...
    ...
  }
53789 发表于 2011-2-23 16:34
这个。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

780

主题

8627

帖子

5

粉丝