找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3522|回复: 0
收起左侧

单片机两个外部中断控制计数和清零仿真电路和源码

[复制链接]
ID:290913 发表于 2018-5-28 18:17 | 显示全部楼层 |阅读模式
简单的运用外部中断的仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code SMG[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  6.                     0x6f,0x00};//共阴段码,最后一位为数码管不显示
  7. uchar Display_Smg[4] = {0,0,0,0}; //计数值分解后的各待显示数位
  8. uchar Dis_Buffer[4]; //显示缓冲,用于存放待显示的数字的段码
  9. uint Count = 0;
  10. sbit Key_Clear = P3^6;
  11. void delay(uchar t)
  12. {
  13.         uchar i;
  14.         while(t--) for(i = 0;i < 120;i++);
  15. }
  16. void Display_Count()
  17. {
  18.         static uchar Scan_Bit = 0xF7;
  19.         static uchar Dsy_Idx = 0;
  20.         uchar i;
  21.         Display_Smg[3] = Count /1000;//取千位
  22.         Display_Smg[2] = Count /100%10;//取百位
  23.         Display_Smg[1] = Count % 100/10;
  24.         Display_Smg[0] = Count % 10;
  25.         for(i = 0; i < 4;i++)
  26.         {
  27.                 Dis_Buffer[i] = SMG[Display_Smg[i]];
  28.         }
  29.         P2 = Scan_Bit;
  30.         P0 = Dis_Buffer[Dsy_Idx];
  31.         delay(1);
  32.         Scan_Bit = _cror_(Scan_Bit,1);
  33.         Dsy_Idx = (Dsy_Idx+1)%4;
  34. }
  35. void main()
  36. {
  37.         EA = 1;
  38.         EX0 = 1;
  39.         EX1 = 1;
  40.         IT0 = 1;
  41.         IT1 = 1;
  42.         while(1)
  43.         {
  44.                 if(Count == 10000) Count = 0;
  45.     Display_Count();
  46.         }
  47. }
  48. void jishu() interrupt 0
  49. {
  50.         Count++;
  51. }
  52. void clear0() interrupt 2
  53. {
  54.         Count = 0;
  55. }
复制代码

所有资料51hei提供下载:
两个外部中断控制计数和清零.zip (59.21 KB, 下载次数: 25)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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