找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的数字时钟PCB源程序与isis仿真设计

[复制链接]
跳转到指定楼层
楼主
Altium Designer画的数字时钟原理图和PCB图如下:(51hei附件中可下载工程文件)


数字时钟isis仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


源程序代码如下:(原理图及论文见附件)
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit qingling=P1^0;       
  5. sbit tiaofen=P1^1;               
  6. sbit tiaoshi=P1^2;       
  7. sbit sounder=P1^3;               

  8. uint a,b;
  9. uchar hour,minu,sec,   
  10.       hour0,minu0,sec0,
  11.           hour1,minu1,sec1;
  12.           h1,h2,m1,m2,s1,s2,
  13.           k,s;
  14.           
  15. uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  16. uchar code table[]=        {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  17. void keyscan();
  18. void init();
  19. void delay(int z);
  20. void display(uchar,uchar,uchar);
  21. void sounde();

  22.          
  23. void main()
  24. {
  25.         init();
  26.         while(1)
  27.         {                                 
  28.                 while(TR1)
  29.                 {
  30.                
  31.                         keyscan();                       
  32.                         while(s==1)                               
  33.                         {                                                                         
  34.                                 keyscan();                                                  
  35.                                 display(hour1,minu1,sec1);
  36.                         }
  37.                          display(hour0,minu0,sec0);               
  38.                        
  39.                         while(k)       
  40.                         {
  41.                                  display(hour,minu,sec);       
  42.                         }
  43.                     
  44.                 }
  45.         }

  46. }


  47. void init()
  48. {
  49.         a=0;
  50.         b=0;
  51.         k=0;
  52.         s=0;
  53.         hour0=0;
  54.         minu0=0;
  55.         sec0=0;
  56.         hour=0;
  57.         minu=0;
  58.         sec=0;
  59.         hour1=0;
  60.         minu1=0;
  61.         sec1=0;

  62.         TMOD=0x11;                                 
  63.         TH0=(65536-5000)/256;
  64.         TL0=(65536-5000)%256;
  65.         TH1=(65536-50000)/256;
  66.         TL1=(65536-50000)%256;
  67.        
  68.         EA=1;
  69.         EX0=1;                 
  70.         EX1=1;               
  71.         ET0=1;
  72.         ET1=1;
  73.         IT0=1;                 
  74.         IT1=1;

  75.         PX0=1;
  76.         PX1=1;
  77.        
  78.         TR0=0;                         
  79.         TR1=1;                 
  80. }


  81. void timer0_int() interrupt 1       
  82. {
  83.         TH0=(65536-5000)/256;
  84.         TL0=(65536-5000)%256;
  85.         a++;
  86.         if(a==2)
  87.         {
  88.                 a=0;
  89.                 sec++;
  90.                 if(sec==100)
  91.                         {
  92.                                 sec=0;               
  93.                                 minu++;
  94.                                 if(minu==60)
  95.                                 {
  96.                                         minu=0;                       
  97.                                         hour++;
  98.                                         if(hour==60)         
  99.                                         {
  100.                                                 hour=0;
  101.                                         }
  102.                                 }
  103.                         }
  104.         }
  105.        
  106. }


  107. void ex0_int() interrupt 0
  108. {               
  109.         k++;
  110.         if(k==3)
  111.         k=0;
  112.         if(k==1)
  113.         {
  114.                 TR0=~TR0;
  115.                 if(TR0==1)
  116.                 {                         
  117.                         hour=0;
  118.                         minu=0;
  119.                         sec=0;               
  120.                 }
  121.         }
  122.         if(k==2)
  123.         {
  124.                 TR0=~TR0;
  125.         }         
  126. }


  127. void ex1_int() interrupt 2
  128. {
  129.         s++;
  130.         if(s==3)
  131.         s=0;
  132. }


  133. void timer1_int() interrupt 3                 
  134. {
  135.         TH1=(65536-50000)/256;
  136.         TL1=(65536-50000)%256;
  137.         if(s==2)
  138.         {
  139.                 if(hour1==hour0 && minu0==minu1)
  140.                 sounde();
  141.         }
  142.         b++;
  143.         if(b==20)
  144.         {
  145.                 b=0;
  146.                 sec0++;
  147.          if(sec0==60)
  148.            {  
  149.               sec0=0;
  150.                 minu0++;
  151.               if(minu0==60)
  152.                {
  153.                    minu0=0;
  154.                    hour0++;
  155.                    if(hour0==24)
  156.                          hour0=0;
  157.                         
  158.                }
  159.            }
  160.                           
  161.         }
  162.                        
  163. }



  164. void keyscan()
  165. {
  166.        
  167.         if(s==1)
  168.         {
  169.                 if(qingling==0)
  170.                 {
  171.                         delay(1000);
  172.                         if(qingling==0)
  173.                         {
  174.                                 sec1=0;
  175.                                 minu1=0;
  176.                                 hour1=0;
  177.                         }
  178.                 }
  179.                 if(tiaofen==0)
  180.                 {
  181.                         delay(1000);
  182.                         if(tiaofen==0)
  183.                         {
  184.                                 minu1++;
  185.                                 if(minu1==60)
  186.                                 {
  187.                                         minu1=0;
  188.                                 }
  189.                                 while(!tiaofen);
  190.                                
  191.                         }
  192.                 }
  193.                 if(tiaoshi==0)
  194.                 {
  195.                         hour1++;
  196.                         if(hour1==24)
  197.                         {
  198.                                 hour1=0;
  199.                         }
  200.                         while(!tiaoshi);
  201.                        
  202.                 }
  203.         }
  204.         else                               
  205.         {
  206.                  if(qingling==0)
  207.                 {
  208.                         delay(1000);
  209.                         if(qingling==0)
  210.                         {
  211.                                 sec0=0;
  212.                                 minu0=0;
  213.                                 hour0=0;
  214.                         }
  215.                 }
  216.                 if(tiaofen==0)
  217.                 {
  218.                         delay(1000);
  219.                         if(tiaofen==0)
  220.                         {
  221.                                 minu0++;
  222.                                 if(minu0==60)
  223.                                 {
  224.                                         minu0=0;
  225.                                 }
  226.                                 while(!tiaofen);
  227.                        
  228.                         }
  229.                 }
  230.                 if(tiaoshi==0)
  231.                 {
  232.                         hour0++;
  233.                         if(hour0==24)
  234.                         {
  235.                                 hour0=0;
  236.                         }
  237.                         while(!tiaoshi);
  238.                        
  239.                 }
  240.         }       
  241. }

  242. void display(uchar hour,uchar minu,uchar sec)
  243. {
  244.         h1=hour/10;
  245.         h2=hour%10;
  246.         m1=minu/10;
  247.         m2=minu%10;
  248.         s1=sec/10;
  249.         s2=sec%10;

  250.         P0=0xff;
  251.         P2=table[h1];
  252.         P0=select[7];
  253.         delay(100);

  254.         P0=0xff;
  255.         P2=table[h2];
  256.         P0=select[6];
  257.         delay(100);

  258.         P0=0xff;
  259.         P2=0x40;;
  260.         P0=select[5];
  261.         delay(100);

  262.         P0=0xff;
  263.         P2=table[m1];
  264.         P0=select[4];
  265.         delay(100);

  266.         P0=0xff;
  267.         P2=table[m2];
  268.         P0=select[3];
  269.         delay(100);

  270.         P0=0xff;
  271.         P2=0x40;
  272.         P0=select[2];
  273.         delay(100);

  274.         P0=0xff;
  275.         P2=table[s1];
  276.         P0=select[1];
  277.         delay(100);

  278.         P0=0xff;
  279.         P2=table[s2];
  280.         P0=select[0];
  281.         delay(100);

  282. }


  283. void sounde()
  284. {
  285.         sounder=~sounder;       
  286. }

  287. void delay(int z)
  288. {
  289.         while(z--);
  290. }
复制代码



全部资料51hei下载地址:
闹钟秒表.zip (479.45 KB, 下载次数: 68)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:451637 发表于 2018-12-25 19:44 | 只看该作者
这个isis能不能用proteus
回复

使用道具 举报

板凳
ID:165792 发表于 2019-1-9 20:14 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
ID:465507 发表于 2019-1-9 23:44 | 只看该作者
感谢楼主分享
回复

使用道具 举报

5#
ID:846830 发表于 2020-11-21 13:03 | 只看该作者
不全吧
回复

使用道具 举报

6#
ID:553941 发表于 2021-1-4 14:47 | 只看该作者
pcb和仿真都对不上,想下载的先考虑考虑
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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