找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3802|回復: 0
收起左側

單片機兩個外部中斷控制計數和清零仿真電路和源碼

[復制鏈接]
ID:290913 發(fā)表于 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 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表