打印
[疑难问答]

数码管不能正常显示

[复制链接]
2599|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuzhaolie|  楼主 | 2010-7-6 22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用按键来启动、停止、复位时钟的显示,但结果不正常。
以下是源程序
//**************************************************
//程序功能:时钟,前两位显示分钟,后两位显示秒
//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();
  
}
}
沙发
wuzhaolie|  楼主 | 2010-7-6 22:55 | 只看该作者
帮忙看看吧

使用特权

评论回复
板凳
yidou| | 2010-7-6 23:10 | 只看该作者
程序不规范,要养成好习惯

使用特权

评论回复
地板
laslison| | 2010-7-8 21:23 | 只看该作者
怎么个不正常法?

使用特权

评论回复
5
讨论啥呢| | 2010-7-9 10:56 | 只看该作者
生命足疗机健尔马足疗机足疗机价格健尔马足疗机价格足疗机厂家

使用特权

评论回复
6
wuzhaolie|  楼主 | 2010-7-9 22:24 | 只看该作者
请勿灌水啊

使用特权

评论回复
7
wuzhaolie|  楼主 | 2010-7-9 22:25 | 只看该作者
4# laslison
显示的不对呗

使用特权

评论回复
8
laslison| | 2010-7-11 15:25 | 只看该作者
7# wuzhaolie
:L,按键和显示会互相干扰

使用特权

评论回复
9
maxuedong| | 2010-7-16 16:55 | 只看该作者
对,按键和数码管显示应该用不同的口吧,楼主先看好

使用特权

评论回复
10
wuzhaolie|  楼主 | 2010-7-24 10:34 | 只看该作者
9# maxuedong
按键用端口的输入功能,显示用输出功能这样能做到互不影响吧?

使用特权

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

本版积分规则

0

主题

108

帖子

1

粉丝