找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机 有中断函数0-9999的计数(原理图+源程序)

[复制链接]
跳转到指定楼层
楼主
51单片机的,有中断函数,没0.5s计数一次
然后用LED数码管显示的,做的很烂,分享一下原理图
单片机

LED数码管

LED



单片机源程序如下:
  1. #include"STC12C5a60s2.H"

  2. //------------------------

  3. //LED接口
  4. sbit  D2 = P3^0;
  5. sbit  D3 = P3^1;
  6. sbit  D4 = P3^2;
  7. sbit  D5 = P3^3;
  8. //数码管接口
  9. sbit  COM1 = P1^3;
  10. sbit  COM2 = P1^4;
  11. sbit  COM3 = P1^5;
  12. sbit  COM4 = P1^6;

  13.   //变量定义
  14. unsigned char segTab [] = {0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,0X20,0X28};
  15. unsigned char segTab2 [] = {0X80,0X9B,0X42,0X0A,0X19,0X0C,0X04,0X9A,0X00,0X08};

  16. unsigned int to1s=0;
  17. unsigned int to2ms = 0;
  18. unsigned int number = 0;
  19. unsigned int segDisplayBit = 0;
  20. unsigned int i = 0;

  21. //==================================

  22. //主函数
  23. void main()
  24. { P1M1 &=~0X78;
  25.   P1M0 |= 0X78;


  26.      //定时器初始化        T0约为100uS
  27.     TMOD = 0x02;   //定时器T0,方式2(8位计数,自动重载)
  28.     TH0 = 163;     //11.0592M晶振,约100uS
  29.     TL0 = TH0;     //自动重载计数值,计数值存于TH0中,而用TL0计数
  30.     TR0 = 1;       //开定时器T0
  31.     ET0 = 1;       //开定时器中断
  32.         EA  = 1;       //开总中断
  33.                
  34.                     
  35.            
  36. while(1)                //无限循环体                                 
  37. {         
  38.    
  39.    }
  40. }
  41. //==================
  42. //定时器中断函数         
  43. void Timer0_ISR(void) interrupt 1 using 1         
  44. {        to2ms++;
  45.         if(to2ms == 20)
  46.         {  to2ms = 0;
  47.         

  48.             segDisplayBit++;
  49.                 if(segDisplayBit>4) segDisplayBit = 1;
  50.                
  51.                 if(segDisplayBit==1)                 //千位
  52.                 { COM1=0; COM2=0; COM3=0; COM4=0;
  53.                   P0 = segTab[number/1000];
  54.                   if(number/1000!=0)COM1=1;}
  55.                
  56.                 if(segDisplayBit==2)          //百位
  57.                 { COM1=0; COM2=0; COM3=0; COM4=0;
  58.                   P0 = segTab[number%1000/100]&0xDF;
  59.                    COM2=1;}
  60.                
  61.                 if(segDisplayBit==3)        //十位
  62.                 { COM1=0; COM2=0; COM3=0; COM4=0;
  63.                   P0 = segTab[number%100/10];
  64.                  COM3=1;}
  65.                
  66.                         if(segDisplayBit==4) //个位
  67.                 { COM1=0; COM2=0; COM3=0; COM4=0;
  68.                   P0 = segTab[number%10];
  69.                   COM4=1;}

  70.            to1s++;
  71.                 if(to1s == 50)
  72.                 {         to1s=0;
  73.                   number++;
  74.                   if(number==9999)number=0;

  75.                                            }
  76.           }                                                
  77.                   i++;
  78.                  if(i==1000)
  79.                 {
  80.                  D5=0;D4=1;D3=1;D2=1; }

  81.                  if(i==2000)
  82.                  { D5=1;D4=0;D3=1;D2=1;}
  83.          
  84.                  if(i==3000)
  85.                  {D5=1;D4=1;D3=0;D2=1;}

  86.                  if(i==4000)
  87.                  { i=0; D5=1;D4=1;D3=1;D2=0;}
  88.    }
复制代码

所有资料51hei提供下载:
定时中断0-9999程序.zip (26.93 KB, 下载次数: 17)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2018-10-17 14:41 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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