【51单片机】INT0及INT1中断计数

来源:互联网 发布:苹果远程桌面连接软件 编辑:程序博客网 时间:2024/05/29 10:10

前言
刚刚本着负责任的心,把上次的博客补全(真的有点长,不过都是干货),再回来的时候本次编辑就消失了……,下次记得保存线上草稿。友情链接:1.【51单片机实验】INT0中断计数2.【51单片机实验】INT0中断控制LED
实验
INT0及INT1中断计数电路.png
程序分析

  • 同时允许INT0和INT1中断:连接P3.2和P3.3按键触发中断,对应中断例程(中断函数)分别计数分别显示在左右各三只数码管上【只要999】,
  • 另外两个按键:分别用于两组计数的清零工作,查询法;
  • 允许INT0和INT1中断:IE=0x85(1000 0101)
  • 两个均为下降沿触发:IT0,IT1=1;
  • 外部中断0和外部中断1中断号:0,2
    主程序whlie内循环调用显示计数**函数,中断例程只需累加计数,无需管理显示。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit k3 = P3 ^ 4;sbit k4 = P3 ^ 5;uchar code DSY_CODE[] = {    0xc0,0xf9,0xa4,0xb0,    0x99,0x92,};uchar data Buffer_Counts[] = {0,0,0,0,0,0};uint Count_A = 0, Count_B = 0;void DelayMS(uint x){    uchar t;    while (x--)        for (t = 0;t < 120;t++);}void Show_Counts(){    uchar i;    Buffer_Counts[2] = Count_A / 100;    Buffer_Counts[1] = Count_A % 100 / 10;    Buffer_Counts[0] = Count_A % 10;    if (Buffer_Counts[2] == 0x00)    {        Buffer_COunts[2] == 0x00;        if (Buffer_Counts[1] == 0x00)            Buffer_Counts[1] == 0x0a;    }    Buffer_Counts[5] = Count_B / 100;    Buffer_Counts[4] = Count_B % 100 / 10;    Buffer_Counts[3] = Count_B % 10;    if (Buffer_Counts[5] == 0x00)    {        Buffer_Counts[5] == 0x0a;        if (Buffer_Counts[4] == 0x00)            Buffer_Counts[4] == 0x0a;    }    for (i = 0;i < 6;i++)    {        P2 = Scan_BITs(i);        P1 = DSY_CODE[Buffer_Counts[i]];        DelayMS(i );    }}

后语
比起上次【51单片机实验】INT0中断控制LED实验,这次实验使用了两种中断方式(中断和查询,怎么那么拗口?),显示也不特别难,就是C语言课后习题级别,注意两种中断的序号,1和3,有趣,奔赴下一个实验~

原创粉丝点击