找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机计时表proteus仿真和源程序

[复制链接]
ID:108102 发表于 2017-4-8 23:43 | 显示全部楼层 |阅读模式
proteus计时表仿真图+程序,下面是原理图:
0.png

51单片机源程序:
  1. //简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s
  2. //单片机晶振选择12MHZ
  3. //收获,定时器计算1us为一个指令周期,可以通过公式直接        求的所需时间
  4. //在数据传输很容易犯错误,因此要注意在草稿纸上演练
  5. //在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误
  6. #include<reg52.h>
  7. unsigned char  M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  8. void System_Init();
  9. unsigned char flag=0;
  10. unsigned int Timer,Time;       
  11. unsigned char Dissbuf[3]={0,0,0};   
  12. void main()
  13. {
  14.   unsigned char i=0;
  15.   System_Init();
  16.   while(1)
  17.   {

  18.   if(flag==0)
  19.   {               
  20.     i=Time/10;
  21.     if(i%3==0)
  22.         {P0=0x00;P2=0xff;P1=0xff;}
  23.         if((i+2)%3==0)
  24.         {P0=0xff;P2=0x00;P1=0xff;}
  25.         if((i+1)%3==0)
  26.         {P0=0xff;P2=0xff;P1=0x00;}
  27.   }
  28.   if(flag==1)
  29.   {
  30.     i=20;
  31.     P0=0xff;
  32.         P2=0xff;
  33.         P1=0xff;
  34.         while(i--);
  35.         i=256;
  36.     P0=Dissbuf[0];
  37.         P2=Dissbuf[1];
  38.         P1=Dissbuf[2];
  39.         while(i--);
  40.   }
  41.   }
  42. }

  43. void System_Init()
  44.     {
  45.        
  46.     TMOD = 0x01;
  47.     TH0 = (65535-50000)/256;
  48.     TL0 = (65535-50000)%256;
  49.     EA = 1;
  50.     ET0 = 1;
  51.     TR0 = 1;
  52.         IT0=1;
  53.         EX0=1;
  54.         IT1=1;
  55.         EX1=1;
  56.         }
  57.         void into() interrupt 0
  58.         {
  59.          flag=1;
  60.          P0=0xff;
  61.          P2=0xff;
  62.          P1=0xff;
  63.          Time=0;
  64.          TR0=1;
  65.         }
  66.         void TIMER0() interrupt 1
  67.         {
  68.      TH0 = (65535-50000)/256;
  69.      TL0 = (65535-50000)%256;
  70.           Timer++;
  71.           if(Timer==2)
  72.           {
  73.           Timer=0;
  74.           Time++;
  75.           if(Time==999)
  76.           {Time=0;}
  77.           Dissbuf[0]=M[Time%10];
  78.           Dissbuf[1]=M[Time%100/10]-0x80;
  79.           Dissbuf[2]=M[Time/100];
  80.           }


  81. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


0.png
单片机计时表仿真工程文件和源码下载:
计时器.zip (80.91 KB, 下载次数: 13)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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