找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2042|回复: 1
打印 上一主题 下一主题
收起左侧

单片机中断系统应用试验(计数器)

[复制链接]
跳转到指定楼层
楼主
ID:555393 发表于 2019-6-5 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、实验目的
1.掌握外部中断技术的基本使用方法
2.掌握中断处理程序的编写方法
   
二、实验内容
使用五个数码管从”00000”开始进行加法计数值到”60000”后重新计数。按动K2键时计数暂停,再按继续计数,每次按键操作都需要配上按键同步音,即蜂鸣器短暂发声。


三.实验步骤
1.新建工程->新建*.c文件->将文件添加到该工程;
注意:Output时要在Create Hex file项打勾。*.hex文件是用于烧录到板子上的。若不操作这一步,会在编译时不会自动创建*.hex文件。

2、设置一个中断函数,用于控制按钮,在中断函数中;当flag为1时,cnt自加1;当flag为0时 cnt不变;flag的变化是由按键k2控制(本次设计)即讲k2连接口与P3.2引脚连接;

3、蜂鸣器:在中断函数中设置蜂鸣器。

三、实验代码
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define OUT P1


uint cnt;
bit flag;
sbit LS138A=P2^7;
sbit LS138B=P2^6;
sbit LS138C=P2^5;
sbit BEEP=P3^5;
unsigned int k;

unsigned char code dispTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

//chose position

void selectPosition(char i)
{
    switch(i)
    {
        case 0: LS138A=0;LS138B=0;LS138C=0;break;
        case 1: LS138A=1;LS138B=0;LS138C=0;break;
        case 2: LS138A=0;LS138B=1;LS138C=0;break;
        case 3: LS138A=1;LS138B=1;LS138C=0;break;
        case 4: LS138A=0;LS138B=0;LS138C=1;break;
        case 5: LS138A=1;LS138B=0;LS138C=1;break;
        case 6: LS138A=0;LS138B=1;LS138C=1;break;
        case 7: LS138A=1;LS138B=1;LS138C=1;
    }
}




/*************************/

void init(void)
{
  flag = 0;
  EA=1;
  EX0=1;
  IT0=1;
}


/************************/
void delay(uint k)
{
uint data i,j;
  for(i=0;i<k;i++)
  {
    for(j=0;j<20;j++)
    {
    ;
    }
  }
}
/********************/

void main(void)
{
uchar i;
init();
while(1)
{
    if(flag)cnt++;
    if(cnt>60000)cnt=0;
    for(i=0;i<100;i++)
    {
      selectPosition(3);
      OUT=dispTab[cnt/10000];
      delay(10);
      selectPosition(4);
      OUT=dispTab[cnt%10000/1000];
      delay(10);
      selectPosition(5);
      OUT=dispTab[cnt%1000/100];
      delay(10);
      selectPosition(6);
      OUT=dispTab[(cnt%100)/10];
      delay(10);
      selectPosition(7);
      OUT=dispTab[cnt%10];
      delay(10);
    }
}
}

/************/

void extem_int0(void)interrupt 0 using 0
{
   flag=!flag;

   for(k=0;k<25;k++)
   {
       BEEP=1;
    delay(10);
    BEEP=0;
    delay(10);
   }
}



四.实验结果
开始时,数码管显示00000;当按下K1键时,数码管数字开始变化;当再次按键时,变化暂停。一旦按键,就会蜂鸣一声;再按一次,数码管数字继续变化。

完整的Word格式文档51黑下载地址:
计数器.docx (19.79 KB, 下载次数: 12)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2019-6-12 04:02 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表