标题: INT0中断计数含单片机源码,仿真原理图 [打印本页]

作者: longllls    时间: 2017-12-5 09:42
标题: INT0中断计数含单片机源码,仿真原理图
这是我今天做的单片机实验,附件里面包含INT0中断计数源代码,proteus仿真工程文件
说明:每次按下计数键时触发
INT0中断,中断程序累加计数,  计数值显示在3只数码管上,按下清零键时数码管清零
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. //0~9的段码
  5. uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
  6. //计数值分解后各个待显示的数位
  7. uchar DSY_Buffer[]={0,0,0};
  8. uchar Count=0;
  9. sbit Clear_Key=P3^6;
  10. void Show_Count_ON_DSY()
  11. {
  12.         DSY_Buffer[2]=Count/100;        //获取3个数
  13.         DSY_Buffer[1]=Count%100/10;
  14.         DSY_Buffer[0]=Count%10;
  15.         if(DSY_Buffer[2]==0)   //高位为0时不显示
  16.         {
  17.                 DSY_Buffer[2]=0x0a;
  18.                 if(DSY_Buffer[1]==0)   //高位为0,若第二位为0同样不显示
  19.                         DSY_Buffer[1]=0x0a;
  20.         }
  21.         P0=DSY_CODE[DSY_Buffer[0]];
  22.         P1=DSY_CODE[DSY_Buffer[1]];
  23.         P2=DSY_CODE[DSY_Buffer[2]];
  24. }
  25. //主程序
  26. void main()
  27. {
  28.         P0=0x00;
  29.         P1=0x00;
  30.         P2=0x00;
  31.         IE=0x81;        //允许INT0中断
  32.         IT0=1;                //下降沿触发
  33.         while(1)
  34.         {
  35.                 if(Clear_Key==0) Count=0;        //清0
  36.                 Show_Count_ON_DSY();
  37.         }
  38. }
  39. //INT0中断函数
  40. void EX_INT0() interrupt 0
  41. {
  42.         Count++;         //计数值递增
  43. }
复制代码

全部资料51hei下载地址:
INT0中断计数.rar (33.78 KB, 下载次数: 47)



作者: bhjyqjs    时间: 2019-7-3 09:13
程序简洁易懂,不错。
作者: forest415    时间: 2021-3-20 15:45
看着真干净舒服这就是精华
作者: forest415    时间: 2021-3-23 14:03
下载了程序里
  1. uchar Count=0;
复制代码

可以改成
  1. uint Count=0;        //最大65535
复制代码

改完以后可以计数到999没改的时候只能计数到255

uint Count=999;时显示



uchar Count=999;时显示




作者: 爱学习的朱冒冒    时间: 2022-1-13 13:12
有没有老哥知道用INT0怎么实现加减




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1