找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HC6800-ES V2.0 51单片机数码管时钟程序

[复制链接]
ID:465013 发表于 2019-1-9 02:01 | 显示全部楼层 |阅读模式
用的是89c51单片机。如图:
按下k1切换时间日期Removeformat
按下k2对时间进行调节,每按一下,调节一位
按下k3 +1
按下k4 -1最后再附上此单片机开发板原理图
-13fb2b66d1a0756f.jpg
电路图:http://www.51hei.com/bbs/dpj-42448-1.html

单片机源码:
  1. #include<reg52.h>
  2. #include<temp.h>
  3. typedef unsigned int uint;
  4. typedef unsigned char uchar;
  5. sbit k1=P3^1;
  6. sbit k2=P3^0;
  7. sbit k3=P3^2;
  8. sbit k4=P3^3;
  9. sbit beep=P1^5;
  10. int t,num1=9,num2=5,num3=2,num4=5,num6=2,num5=3,s2num=0,b=0,flag=1,san=0;
  11. uchar numday1=1,numday2=3,numyue1=2,numyue2=1,numnian1=7,numnian2=1;
  12. uchar DisplayData[8];
  13. sbit lsa=P2^2;
  14. sbit lsb=P2^3;
  15. sbit lsc=P2^4;
  16. sbit lsa=P2^2;
  17. sbit lsb=P2^3;
  18. sbit lsc=P2^4;
  19. void chushi();
  20. void delay(uchar i);
  21. void xianshi();
  22. void key();
  23. void riqi();
  24. void baoshi();

  25. void chushi()
  26. {
  27.   TMOD=0x11;
  28.   TH1=(65536-50000)/256;
  29.   TL1=(65536-50000)%256;
  30.   ET1=1;
  31.   TR1=0;
  32.   TH0=(65536-50000)/256;
  33.   TL0=(65536-50000)%256;
  34.   ET0=1;
  35.   TR0=1;
  36.   EA=1;
  37. }
  38. void jishi() interrupt 1
  39. {
  40.         TH0=(65536-50000)/256;
  41.         TL0=(65536-50000)%256;
  42.         t++;
  43.         if(t==20)
  44.         {
  45.           t=0;
  46.           num1++;
  47.           if(num1==10)
  48.           {
  49.           num1=0;
  50.           num2++;
  51.           if(num2==6)
  52.           {
  53.            num2=0;
  54.            num3++;
  55.           if(num3==10)
  56.           {
  57.              num3=0;
  58.                  num4++;
  59.                  if(num4==6)
  60.                  {
  61.                  num4=0;
  62.                  num5++;
  63.                  if(num5==4)
  64.                  {
  65.                  num5=0;
  66.                  num6++;
  67.                  if(num6==3)
  68.                  {
  69.                  num6=0;
  70.                  }
  71.                  }
  72.                  }
  73.           }
  74.           }
  75.           }
  76.           if((num5==3)&&(num6==2)&&(num4==5)&&(num3==9)&&(num2==5)&&(num1==9))
  77.            {
  78.               numday1++;
  79.            }
  80.                 baoshi();
  81.         }
  82.         
  83.          
  84. }
  85. void xianshi()
  86. {           
  87.         key();
  88.        lsa=0;
  89.            lsb=0;
  90.            lsc=0;
  91.            if(s2num==1)
  92.            {
  93.            if(san%2==0)
  94.              P0=a[num1];
  95.            else
  96.              P0=0X00;
  97.            }
  98.            else
  99.              P0=a[num1];
  100.            delay(10);
  101.            P0=0x00;           //消隐

  102.            lsa=1;
  103.            lsb=0;
  104.            lsc=0;
  105.            if(s2num==2)
  106.            {
  107.            if(san%2==0)
  108.            P0=a[num2];
  109.            else
  110.            P0=0X00;
  111.            }
  112.            else
  113.            P0=a[num2];
  114.            delay(10);
  115.            P0=0x00;

  116.         lsa=0;
  117.            lsb=1;
  118.            lsc=0;
  119.            P0=a[10];
  120.            delay(10);
  121.            P0=0x00;

  122.            lsa=1;
  123.            lsb=1;
  124.            lsc=0;
  125.            if(s2num==3)
  126.            {
  127.            if(san%2==0)           //闪烁
  128.            P0=a[num3];
  129.            else
  130.            P0=0X00;
  131.            }
  132.            else
  133.            P0=a[num3];
  134.            delay(10);
  135.            P0=0x00;
  136.             
  137.            lsa=0;
  138.            lsb=0;
  139.            lsc=1;
  140.            if(s2num==4)
  141.            {
  142.            if(san%2==0)
  143.            P0=a[num4];
  144.            else
  145.            P0=0x00;
  146.            }
  147.            else
  148.            P0=a[num4];
  149.            delay(10);
  150.            P0=0x00;

  151.            lsa=1;
  152.            lsb=0;
  153.            lsc=1;
  154.            P0=a[10];
  155.            delay(10);
  156.            P0=0x00;
  157.             
  158.            lsa=0;
  159.            lsb=1;
  160.            lsc=1;
  161.            if(s2num==5)
  162.           {
  163.            if(san%2==0)
  164.            P0=a[num5];
  165.            else
  166.            P0=0x00;
  167.            }
  168.            else
  169.            P0=a[num5];
  170.            delay(10);
  171.            P0=0x00;

  172.            lsa=1;
  173.            lsb=1;
  174.            lsc=1;
  175.            if(s2num==6)
  176.            {
  177.            if(san%2==0)
  178.            P0=a[num6];
  179.            else
  180.            P0=0x00;
  181.            }
  182.            else
  183.            P0=a[num6];
  184.            delay(10);
  185.            P0=0x00;

  186.            

  187. }
  188. void delay(uchar i)
  189. {
  190.   while(i--);
  191. }

  192. /**********************************************
  193.                                  按键加减
  194. **********************************************/
  195. void key()
  196. {
  197.   
  198.   if(k2==0)
  199.   {
  200.      delay(1000);
  201.          if(k2==0)
  202.          {
  203.            s2num++;
  204.            while(!k2);
  205.            if(s2num==1)
  206.            {
  207.             TR0=0;
  208.                 TR1=1;
  209.            }
  210.            if(s2num==7)
  211.            {
  212.              TR0=1;
  213.                  TR1=0;
  214.               s2num=0;
  215.            }
  216.          }
  217.          
  218.   }


  219.   if(s2num!=0)
  220.   {
  221.    
  222.         if(s2num==1)
  223.         {        
  224.            
  225.            if(k3==0)
  226.            {
  227.               delay(1000);
  228.                   if(k3==0)
  229.                   {
  230.                     num1++;
  231.                         if(num1==10)
  232.                         {
  233.                           num1=0;
  234.                         }
  235.                   }
  236.            }
  237.            while(!k3);

  238.                 if(k4==0)
  239.            {
  240.               delay(1000);
  241.                   if(k4==0)
  242.                   {
  243.                     num1--;
  244.                         if(num1==-1)
  245.                         {
  246.                           num1=9;
  247.                         }
  248.                   }
  249.            }
  250.            while(!k4);
  251.         }


  252.         if(s2num==2)
  253.         {
  254.             
  255.                 TR1=1;
  256.            if(k3==0)
  257.            {
  258.               delay(1000);
  259.                   if(k3==0)
  260.                   {
  261.                     num2++;
  262.                         if(num2==6)
  263.                         {
  264.                           num2=0;
  265.                         }
  266.                   }
  267.            }
  268.            while(!k3);

  269.                 if(k4==0)
  270.            {
  271.               delay(1000);
  272.                   if(k4==0)
  273.                   {
  274.                     num2--;
  275.                         if(num2==-1)
  276.                         {
  277.                           num2=5;
  278.                         }
  279.                   }
  280.            }
  281.            while(!k4);
  282.         }


  283.          if(s2num==3)
  284.         {
  285.             TR1=1;
  286.            if(k3==0)
  287.            {
  288.                san=0;
  289.               delay(1000);
  290.                   if(k3==0)
  291.                   {
  292.                     num3++;
  293.                         if(num3==10)
  294.                         {
  295.                           num3=0;
  296.                         }
  297.                   }
  298.            }
  299.            while(!k3);

  300.                 if(k4==0)
  301.            {
  302.               delay(1000);
  303.                   if(k4==0)
  304.                   {
  305.                     num3--;
  306.                         if(num3==-1)
  307.                         {
  308.                           num3=9;
  309.                         }
  310.                   }
  311.            }
  312.            while(!k4);
  313.         }


  314.          if(s2num==4)
  315.         {
  316.            TR1=1;
  317.            if(k3==0)
  318.            {
  319.               delay(1000);
  320.                   if(k3==0)
  321.                   {
  322.                     num4++;
  323.                         if(num4==6)
  324.                         {
  325.                           num4=0;
  326.                         }
  327.                   }
  328.            }
  329.            while(!k3);

  330.                 if(k4==0)
  331.            {
  332.               delay(1000);
  333.                   if(k4==0)
  334.                   {
  335.                     num4--;
  336.                         if(num4==-1)
  337.                         {
  338.                           num4= 5;
  339.                         }
  340.                   }
  341.            }
  342.            while(!k4);
  343.         }


  344.         if(s2num==5)
  345.         {
  346.             TR1=1;
  347.            if(k3==0)
  348.            {
  349.               delay(1000);
  350.                   if(k3==0)
  351.                   {
  352.                     num5++;
  353.                         if(num5==4)
  354.                         {
  355.                           num5=0;
  356.                         }
  357.                   }
  358.            }
  359.            while(!k3);

  360.                 if(k4==0)
  361.            {
  362.               delay(1000);
  363.                   if(k4==0)
  364.                   {
  365.                     num5--;
  366.                         if(num5==-1)
  367.                         {
  368.                           num5=3;
  369.                         }
  370.                   }
  371.            }
  372.            while(!k4);
  373.         }



  374.          if(s2num==6)
  375.         {
  376.         TR1=1;
  377.            if(k3==0)
  378.            {
  379.               delay(1000);
  380.                   if(k3==0)
  381.                   {
  382.                     num6++;
  383.                         if(num6==3)
  384.                         {
  385.                           num6=0;
  386.                         }
  387.                   }
  388.            }
  389.            while(!k3);

  390.                 if(k4==0)
  391.            {
  392.               delay(1000);
  393.                   if(k4==0)
  394.                   {
  395.                     num6--;
  396.                         if(num6==-1)
  397.                         {
  398.                           num6=2;
  399.                         }
  400.                   }
  401.            }
  402.            while(!k4);
  403.         }

  404.          

  405. /*        if(k4==0)
  406.         {
  407.           delay(1000);
  408.           if(k4==0)
  409.           {
  410.             num1=0;
  411.                 num2=0;
  412.                 num3=0;
  413.                 num4=0;
  414.                 num5=0;
  415.                 num6=0;
  416.           }
  417.         }
  418.         while(!k4);        */
  419. }
  420. }

  421. /****************************************
  422.              显示日期
  423. *****************************************/
  424. void riqi()
  425. {
  426.          
  427.       
  428.        lsa=0;
  429.            lsb=0;
  430.            lsc=0;
  431.            P0=a[numday1];
  432.            delay(10);
  433.            P0=0x00;           //消隐

  434.            lsa=1;
  435.            lsb=0;
  436.            lsc=0;
  437.            P0=a[numday2];
  438.            delay(10);
  439.            P0=0x00;

  440.                 lsa=0;
  441.            lsb=1;
  442.            lsc=0;
  443.            P0=a[10];
  444.            delay(10);
  445.            P0=0x00;

  446.            lsa=1;
  447.            lsb=1;
  448.            lsc=0;
  449.            P0=a[numyue1];
  450.            delay(10);
  451.            P0=0x00;
  452.             
  453.            lsa=0;
  454.            lsb=0;
  455.            lsc=1;
  456.            P0=a[numyue2];
  457.            delay(10);
  458.            P0=0x00;

  459.            lsa=1;
  460.            lsb=0;
  461.            lsc=1;
  462.            P0=a[10];
  463.            delay(10);
  464.            P0=0x00;
  465.             
  466.            lsa=0;
  467.            lsb=1;
  468.            lsc=1;
  469.            P0=a[numnian1];
  470.            delay(10);
  471.            P0=0x00;

  472.            lsa=1;
  473.            lsb=1;
  474.            lsc=1;
  475.            P0=a[numnian2];
  476.            delay(10);
  477.            P0=0x00;
  478. }

  479. void sanshuo() interrupt 3
  480. {
  481.            TH0=(65536-50000)/256;
  482.         TL0=(65536-50000)%256;
  483.         san++;
  484.         if(san==11)
  485.         san=0;
  486. }
  487. void baoshi()
  488. {
  489.     int i;
  490.    if((num4==5)&&(num3==9)&&(num2==5)&&(num1==9))
  491.     for(i=10000;i>2;i--)
  492.   {        
  493.         beep=~beep;
  494.         delay(10);
  495.         }
  496.    
  497. }


  498. void datapros(int temp)         
  499. {
  500.            float tp;  
  501.         if(temp< 0)                                //当温度值为负数
  502.           {
  503.                 DisplayData[0] = 0x40;           //   -
  504.                 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
  505.                 temp=temp-1;
  506.                 temp=~temp;
  507.                 tp=temp;
  508.                 temp=tp*0.0625*100+0.5;        
  509.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  510.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  511.                 //算加上0.5,还是在小数点后面。

  512.           }
  513.          else
  514.           {                        
  515.                 DisplayData[0] = 0x00;
  516.                 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  517.                 //如果温度是正的那么,那么正数的原码就是补码它本身
  518.                 temp=tp*0.0625*100+0.5;        
  519.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  520.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  521.                 //算加上0.5,还是在小数点后面。
  522.         }
  523.         DisplayData[1] = a[temp / 10000];
  524.         DisplayData[2] = a[temp % 10000 / 1000];
  525.         DisplayData[3] = a[temp % 1000 / 100] | 0x80;
  526. ……………………

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

所有资料51hei提供下载:
数码管时钟.zip (127.75 KB, 下载次数: 95)

评分

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

查看全部评分

回复

使用道具 举报

ID:578706 发表于 2019-7-9 12:09 | 显示全部楼层
很不错
回复

使用道具 举报

ID:619942 发表于 2019-12-23 13:09 | 显示全部楼层
很实用,最近在搞设计,
借鉴参考还是很好的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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