微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教关于中断和数码管的问题

请教关于中断和数码管的问题

时间:10-02 整理:3721RD 点击:

#include<reg52.h>

sbitdula=P0^6;

sbitwela=P0^7;

sbitd1=P1^0;

intt=0;

voiddelay(int);

voidmain()

{

EA=1;

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

ET0=1;

TR0=1;

while(1)

  {

  if(t==20)

   {

     delay(500);

t=0;

  d1=~d1;

P0=0xFF;//清影

wela=1;

P0=0xFE;

wela=0;

   dula=1;

P0=0x7f;

dula=0 ;

    }

  }

}

voidext0() interrupt 1

  {

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

         t++;

   }

void delay(int time)

{

inti,j;

for(i=0;i<time;i++)

  for(j=0;j<110;j++);

}

为什么发光二极管会闪烁(而不是一直亮),而数码管不亮?

把d1=~d1;这一行去掉,数码管还是不亮。

P0=0x7F,数码管显示的也不是数字8.。

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

sbit wela=P0^7;

sbit dula=P0^6;

int t=0,num=0,led1;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

   

void delay(int);

void main()

{

       dula=1;

         P0=table[0];

         dula=0;

         wela=1;

         P0=0xc0;

         wela=0;

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

while(1)

{

        led1=0xfe;

         P1=led1;

         delay(500);

         led1=_crol_(led1,1);

         P1=led1;

         delay(500);

  }

}

void timer0() interrupt 1

{

        TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

        t++;

          if(t==20)

          {

          t=0;

          num++;

          if(num==16)

          num=0;

            dula=1;

            P0=table[num];

            dula=0;

            

            }

}

void delay (time)

{

chari,j;

for(i=0;i<time;i++)

         for(j=0;j<110;j++);

}

这个数码管和发光二极管都亮。

但是数码管是乱显示(显示什么数字和哪个数码管亮简直就是随机的)。

发光二极管只亮第一个,位移函数没起作用。

led1=0xfe;

         P1=led1;

         delay(500);  (把这个delay函数去掉,只亮第二个,不去掉,只亮第一个(让它亮一段时间也是这样))

         led1=_crol_(led1,1);

         P1=led1;

用的是和郭天祥那本书配套的单片机.

  





把图贴上来看一下

什么图啊

第一个程序,个人认为中断if(a==20)这个语句中有delay(500)延时函数,时间比较长,可能会产生时序上的错误,建议将其放在中断函数之内处理,还有就是t=0应该放在delay(500)之前。
第二个程序在中断函数中,光是段选设置了,位选没有设置。发光二极管的问题,在while(1)中不应该有  led1=0xfe;应该将其放在while(1)外面,要不程序每执行一次就将第一个发光管点亮!

以上只是个人看程序的看到大概的问题,没有去进行验证,小编可以在调试一下,希望有些帮助呵呵!

你是想让两个灯同时亮?那就不要用移位了


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top