打印

数码管不能正常显示

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

}
}

相关帖子

沙发
renyaq| | 2012-11-22 20:15 | 只看该作者
怎么个不正常法?

使用特权

评论回复
板凳
栩栩如生|  楼主 | 2012-11-22 20:16 | 只看该作者
显示的不对呗

使用特权

评论回复
地板
ousj| | 2012-11-22 20:17 | 只看该作者
按键和显示会互相干扰

使用特权

评论回复
5
司徒老鹰| | 2012-11-22 20:19 | 只看该作者
对,按键和数码管显示应该用不同的口吧,楼主先看好

使用特权

评论回复
6
liuzaiy| | 2012-11-22 20:19 | 只看该作者
按键用端口的输入功能,显示用输出功能这样能做到互不影响吧?

使用特权

评论回复
7
yinxiangh| | 2012-11-22 20:21 | 只看该作者
试一下这个:
void KEY(void)
  {
    P1=0xe0;
    ...
    ...
    ...
  }

使用特权

评论回复
8
栩栩如生|  楼主 | 2012-11-22 20:21 | 只看该作者
试一下这个:
void KEY(void)
  {
    P1=0xe0;
    ...
    ...
    ...
  }
yinxiangh 发表于 2012-11-22 20:21
这个。。。

使用特权

评论回复
9
renyaq| | 2012-11-22 20:23 | 只看该作者
没看懂。。

使用特权

评论回复
10
栩栩如生|  楼主 | 2012-11-22 20:23 | 只看该作者
算了,先结贴了,多谢各位

使用特权

评论回复
11
smilingangel| | 2012-11-26 17:55 | 只看该作者
看的也不太明白的,不过还是谢谢楼主的

使用特权

评论回复
12
lzmm| | 2012-11-27 09:21 | 只看该作者
你把数码管显示放到中断里面执行

使用特权

评论回复
13
vivilzb1985| | 2012-11-27 11:59 | 只看该作者
在线仿真的,单个LED试一下,看可否点亮,若都可以的话,就需要看下你的延时了

使用特权

评论回复
14
leadman| | 2012-11-27 14:09 | 只看该作者
数码管有共阴与共阳之分,是不是把这两种没有没清楚就用了。

使用特权

评论回复
15
dousfoulexd| | 2012-11-27 16:34 | 只看该作者
不太懂啊

使用特权

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

本版积分规则

310

主题

2657

帖子

0

粉丝