找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2856|回复: 2
收起左侧

自己手工制作的单片机时钟器 内附程序+电路

[复制链接]
ID:298663 发表于 2019-3-20 20:47 | 显示全部楼层 |阅读模式
制作出来的实物图如下:

用雕刻机雕出来的板子

用雕刻机雕出来的板子


单片机源程序如下:
  1. #include "stc15w408as.h"
  2. #include "delay.h"
  3. #include "74ls595.h"


  4. sbit key= P3^2;  // 定义按键入口  时间的时选择位
  5. signed char key_mode = 0;
  6. unsigned char flag = 0;  //定义一个按钮标志位1
  7. sbit key1= P3^3;  // 定义按键入口  时间的分选择
  8. signed char key_mode1 = 0;
  9. unsigned char flag1 = 0;  //定义一个按钮标志位2
  10. sbit LED=P1^1;  //定义秒钟状态led
  11. unsigned char idata T1[3]={0x03,0x9F,0x25};//时十
  12. unsigned char idata T2[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};//时个
  13. unsigned char idata T3[6]={0x03,0x9F,0x25,0x0D,0x99,0x49};//分十
  14. unsigned char idata T4[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};//分个
  15. unsigned char hour1,hour2,hour3,hour4;
  16. unsigned long count,count1;
  17. unsigned char temp1=0,temp2=0;
  18. /*  定时器0的配置**************************************/
  19. void Timer0Init()                //定时50ms出发一次中断
  20. {
  21.         AUXR &= 0x7F;               
  22.         TMOD &= 0xF0;               
  23.         TL0 = 0x00;               
  24.         TH0 = 0x4C;               
  25.         //TF0 = 0;               
  26.         TR0 = 1;               
  27.         ET0=1;
  28.         EA=1;
  29. }

  30. void TIMER0()  interrupt 1
  31. {
  32.         if(temp1==0&&temp2==0)
  33.         {
  34.          count1++;
  35.         if(count1==20){count1=0;count=count+1;LED=~LED;}
  36.         if(count==60){count=0;hour4=hour4+1;} //分个位
  37.   if(hour4>9){hour4=0;hour3=hour3+1;}  //分十位
  38.   if(hour3>5){hour3=0;hour2=hour2+1;} //时个位
  39.   
  40.    if(hour1<2)
  41.          {
  42.     if(hour2>9){hour2=0;hour1=hour1+1;}//时十位
  43.          }
  44.          if(hour1==2)
  45.          {
  46.   if((hour2>3)){hour1=0;hour2=0;hour3=0;hour4=0;}
  47. }


  48.     }
  49.         else
  50.         {
  51.    if(temp1==1){hour2=hour2+1;temp1=0;}
  52.          if(temp2==1){hour4=hour4+1;temp2=0;}
  53.         }               

  54. }        



  55. void KeyInit0()  interrupt 0           //外部中断0入口,时调节
  56. {

  57.    
  58.         
  59.     if(!key)                 
  60.     {
  61.           DelayMs(60);  //延时20ms
  62.           if(key==0&&flag==0)
  63.             {
  64.                   DelayMs(10);
  65.                   flag=1;
  66.                   }
  67.                 while(!key);
  68.        }

  69.          if(key==1&&flag==1)
  70.            {
  71.               DelayMs(60);
  72.              flag=0;
  73.                   temp1=temp1+1;
  74.                  }
  75.          

  76.    
  77.                  
  78.          }                 

  79. void KeyInit1()  interrupt 2           //外部中断2入口,分调节
  80. {

  81.    
  82.         
  83.     if(!key1)                 
  84.     {
  85.           DelayMs(60);  //延时20ms
  86.           if(key1==0&&flag1==0)
  87.             {
  88.                   DelayMs(10);
  89.                   flag1=1;
  90.                   }
  91.                 while(!key1);
  92.        }

  93.          if(key1==1&&flag1==1)
  94.            {
  95.               DelayMs(60);
  96.              flag1=0;
  97.                  temp2=temp2+1;
  98.                  }
  99.          

  100.    
  101.                  
  102.          }                 
  103.         

  104. void main()
  105.         {
  106.                 Timer0Init()        ;
  107.                
  108.          LED=1;
  109.                
  110.                
  111.                  //配置外部中断1和0
  112.            
  113.                 IT0=1;
  114.                 EX0=1;
  115.                 IT1=1;
  116.                 EX1=1;
  117.                 EA = 1;
  118.                
  119.                  while(1)
  120.                  {
  121.       
  122.                         
  123.                         
  124.                         if(hour1==0)  //当时间的十分位为0不显示
  125.                         {
  126.                           WR_595(T4[hour4]);
  127.                           WR_595(T3[hour3]);
  128.                           WR_595(T2[hour2]);
  129.                           WR_595(0xff);
  130.                                 OUT_595();
  131.                         }
  132.                         else   //当时间的十分位位1显示
  133.                                 {
  134.                                 WR_595(T4[hour4]);
  135.                           WR_595(T3[hour3]);
  136.                           WR_595(T2[hour2]);
  137.                           WR_595(T1[hour1]);
  138.                                 OUT_595();
  139.                                        
  140.                                        
  141.          }  
  142.                         
  143.                         
  144.                          }


  145.                         
  146.                  


  147.          }                 
复制代码

所有资料51hei提供下载:
Sheet5.pdf (52.44 KB, 下载次数: 15)

评分

参与人数 2黑币 +120 收起 理由
NMT1999 + 30
admin + 90 赞一个!

查看全部评分

回复

使用道具 举报

ID:137349 发表于 2019-3-20 23:19 | 显示全部楼层
赞一个 辛苦了
回复

使用道具 举报

ID:444932 发表于 2019-3-21 09:06 | 显示全部楼层
不容易啊,看着好看
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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