外部中断和数码管动态显示的应用

 

一、        实验目的

1、了解数码管的原理;

2、熟悉数码管的使用;

                  3、掌握外部中断和数码管动态显示的应用。

实验仪器:ATmage16实验板  一块

PC   一台

三、 实验原理:数码管原理图如下:

多个数码管的动态显示是利用人的眼睛在瞬间无法识别的原理来实现在,如电灯也是利用这个原理。

四、实验步骤及内容:这个程序是数码管动态显示,按INT0键加1,一直到数码管显示为9999再重新计数。

实验程序如下:

      #include <iom16v.h>

#include <macros.h>

int led[]={0x 3f ,0x06,0x5b,0x 4f ,0x66,0x6d,0x7d,0x07,0x 7f ,0x 6f };

//*******显示符0,1,2,3,4,5,6,7,8,9,

unsigned int i;

int g,s,b,q;

//*******************延时 us

void delay_us(int t)

{

do

   t--;

        while(t>1);

}

//*******************延时  ms

void delay_ms(unsigned int t)

{

while(t!=0)

{

delay_us(1142);

t--;}

}

#pragma interrupt_handler INT_0:2      //外部中断0执行函数

void  INT_0 (void)

{  i++;

   delay_ms(15);//******键盘防抖动

    }

void  main(void)

{

  DDRD = 0xff;  /* all outputs */

  DDRC = 0xff;  /* all outputs */

  DDRB = 0xff;  /*all outputs */

   PORTB=0XFF;

   PORTC=0X00;

   PORTD=0XFF;

      MCUCR=0X02;   //定义外部中断INT0为下降沿产生中断请求

         GICR=0X40;     //中断屏蔽寄存器开INT0

         SEI();           //******开全局中断

 

   for (;;)//****显示按键次数

   { 

i f(i>9999)

      i=0;

     g=i%10;          //取个位,取余

     PORTC=0X01;

     PORTB=led[g];

     delay_ms(1);

     s=i%100/10;       //取十位

     PORTC=0X02;

     PORTB=led[s];

     delay_ms(1);

     b=i%1000/100;     //取百位

     PORTC=0X04;

     PORTB=led[b];

     delay_ms(1);

     q=i%10000/1000;   // 取千位

     PORTC=0X08;

     PORTB=led[q];

     delay_ms(1);

/* for (i=0;i<4;i++)

    {

     g=i%10;          //取余

     PORTC=|(1<<i);

     PORTB=led[g];

g=i/10;           //取整

PORTC=0x00;;

)*/

    }

  }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值