打印
[疑难问答]

51单片机做数字钟 用中断T0

[复制链接]
1649|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
袖口——光阴|  楼主 | 2015-10-30 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的哪里有问题,只实现一个数码管的走数,1秒一个
沙发
zh113214| | 2015-10-30 21:49 | 只看该作者
楼主,没有代码怎么看啊。

使用特权

评论回复
板凳
袖口——光阴|  楼主 | 2015-10-30 22:17 | 只看该作者
zh113214 发表于 2015-10-30 21:49
楼主,没有代码怎么看啊。

我错了 马上发

使用特权

评论回复
地板
袖口——光阴|  楼主 | 2015-10-30 22:18 | 只看该作者
#include<reg51.h>
unsigned char code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};c[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
void timer();


void main (void)
{        int b,d;
for(d=0;d<8;d++)
{P2=c[d];
for(b=0;b<10;b++)
{ P0=a[b];
timer();
  }
}
        }

void tinterrupt 1   
{ int M=0;
while(M<20)
{
TMOD = 0x01;
TL0 = 0xb0;               
TH0 =0x3c;
EA=1;
ET0=1;
  TR0=1;
if(TF0==1)
{ M++;
TF0 = 0;}
       
         }               

}

使用特权

评论回复
5
袖口——光阴|  楼主 | 2015-10-30 22:20 | 只看该作者
本帖最后由 袖口——光阴 于 2015-10-30 22:22 编辑

void timer() interrupt 1   
{ int M=0;
while(M<20)
{
TMOD = 0x01;
TL0 = 0xb0;               
TH0 =0x3c;
EA=1;
ET0=1;
  TR0=1;
if(TF0==1)
{ M++;
TF0 = 0;}
        
         }               

}

使用特权

评论回复
6
周董| | 2015-10-30 22:24 | 只看该作者
楼主,不知道你想实现什么样的功能呀

使用特权

评论回复
7
Snow7| | 2015-10-31 09:04 | 只看该作者
最好是把硬件原理图也传上来

使用特权

评论回复
8
拉克丝| | 2015-10-31 09:20 | 只看该作者
只实现一个数码管的走数,1秒一个

也就是进位时候没处理好

使用特权

评论回复
9
zh113214| | 2015-10-31 18:12 | 只看该作者
袖口——光阴 发表于 2015-10-30 22:20
void timer() interrupt 1   
{ int M=0;
while(M

真犀利,可是我还是看不明白啊,有电路图没呢

使用特权

评论回复
10
袖口——光阴|  楼主 | 2015-11-1 12:26 | 只看该作者
周董 发表于 2015-10-30 22:24
楼主,不知道你想实现什么样的功能呀

就目前的程序  实现一位数码管的秒的走数 从0到9;

使用特权

评论回复
11
袖口——光阴|  楼主 | 2015-11-1 12:27 | 只看该作者
Snow7 发表于 2015-10-31 09:04
最好是把硬件原理图也传上来

我就用单片机做啊

使用特权

评论回复
12
袖口——光阴|  楼主 | 2015-11-1 12:28 | 只看该作者
本帖最后由 袖口——光阴 于 2015-11-1 12:29 编辑

#include<reg51.h>
unsigned char code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};c[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
void timer();
unsigned char M;


void main (void)
{        int b,d;
for(d=0;d<8;d++)
{P2=c[d];
for(b=0;b<10;b++)
{ P0=a;
timer();
  }
}
        }

void timer()interrupt 1
{  M=0;
while(M<20)
{
TMOD = 0x01;
TL0 = 0xb0;               
TH0 =0x3c;
EA=1;
ET0=1;
  TR0=1;
  if(TF0==1)
{ M++;
TF0 = 0;  }
        
         }               

}  
为甚么不走数  只显示0;我的中断有什么问题吗。

使用特权

评论回复
13
oldzhang| | 2015-11-9 21:14 | 只看该作者
什么设计思想?
怎么在T0中断里面还要循环?
在中断里面初始化定时器?
应该是不会用中断。

使用特权

评论回复
14
gmm2015| | 2015-11-10 10:26 | 只看该作者
楼主还没入门,加油学习吧。先打好基础。

使用特权

评论回复
15
boy1990| | 2015-11-15 10:07 | 只看该作者
定时中断的初始化设置的地方也重要,但是不知道楼主是放在什么地方了,

使用特权

评论回复
16
明眸| | 2015-11-17 09:45 | 只看该作者
你这个没办法进中断,程序是先从主函数执行,而你的主函数里没有中断初始化

使用特权

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

本版积分规则

13

主题

27

帖子

0

粉丝