打印
[51单片机]

51单片机定时器。新手求解答

[复制链接]
803|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DT天若有情|  楼主 | 2017-6-16 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近自己在从初步看单片机,这个程序我编了很久,总觉得没问题,逻辑也是对的。可是在实验板上老是不对。。因为是新手,也是第一次帖子求助,希望大家鼓励鼓励哈。
题目:定时器中断让灯亮闪,然后再用定时器使两个数码管显示60,以内,一直循环。
实验结果:数码管到了60不停下来,还一直往前跑,导致出错。
代码如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar shi,ge,num1,num2,tt;
void display(uchar shi,uchar ge);
void delayms (uint);
void init();
void main()
{
   init();
  while(1)
  {
   display(shi,ge);
  }
}
  
void init()
{
  TMOD=0x11;
  TH0=(65536-45872)/256;
  TL0=(65536-45872)%256;
  TH1=(65536-45872)/256;
  TL1=(65536-45872)%256;
  EA=1;
  ET0=1;
  TR0=1;
  ET1=1;
  TR1=1;
}





void display(uchar shi,uchar ge)
{  
   wela=1;
   P0=0xfe;
   wela=0;
   dula=1;
   P0=table[shi];
   dula=0;
   P0=0xff;
     delayms(5);

   wela=1;
   P0=0xfd;
   wela=0;
   dula=1;
   P0=table[ge];
   dula=0;
   P0=0xff;
     delayms(5);
   
}
  void delayms(uint z)
  {
     uint i,j;
    for(i=z;i>0;i--)
     for(j=110;j>0;j--);
  }
  void T0_Time() interrupt 1
   {
    TH0=(65536-45872)/256;
    TL0=(65536-45872)%256;
    num1++;
    if(num1==10)
    {
    num1=0;
    led=~led;
    }
   }
  
   
  void T1_Time() interrupt 3
{
  TH1=(65536-45872)/256;
  TL1=(65536-45872)%256;
  num2++;
  if(num2==10)
  {
    num2=0;
    tt++;
    if(tt==60)
      tt==0;
       shi=tt/10;
       ge=tt%10;
   
  }
}

相关帖子

沙发
xyz549040622| | 2017-6-16 20:23 | 只看该作者
if(num2==10)
  {
    num2=0;
    tt++;
    if(tt==60)
      tt==0;
       shi=tt/10;
       ge=tt%10;
   
  }
1.你把该加的大括号都加上看看。
2.tt==0;多了一个等号,默认这句不执行。

使用特权

评论回复
板凳
DT天若有情|  楼主 | 2017-6-16 20:27 | 只看该作者
xyz549040622 发表于 2017-6-16 20:23
if(num2==10)
  {
    num2=0;

可以了!谢谢您哈。我把数值写成测试等于了,就是多了个加号。您说的很对,哈哈。

使用特权

评论回复
地板
DT天若有情|  楼主 | 2017-6-16 20:28 | 只看该作者
xyz549040622 发表于 2017-6-16 20:23
if(num2==10)
  {
    num2=0;

可以了!谢谢您哈。我把数值写成测试等于了,就是多了个加号。您说的很对,哈哈。

使用特权

评论回复
5
ningling_21| | 2017-6-17 10:23 | 只看该作者
DT天若有情 发表于 2017-6-16 20:28
可以了!谢谢您哈。我把数值写成测试等于了,就是多了个加号。您说的很对,哈哈。 ...


if(tt==60)

可改为
if(tt>=60)

使用特权

评论回复
6
fengjumeng| | 2017-6-19 08:18 | 只看该作者
嗯 如别人所说  tt==0写多了

使用特权

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

本版积分规则

9

主题

23

帖子

0

粉丝