久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2423|回復: 4
打印 上一主題 下一主題
收起左側

DS12B887時鐘 89c52單片機

[復制鏈接]
跳轉到指定樓層
樓主
多年前一個用89c52和12b887做的時鐘  網上找的資料我做了一次  


單片機源程序如下:
  1. #include <REGX52.H>
  2. #include <intrins.h>
  3. #include "sys_def.h"
  4. #include "ds12b887.h"
  5. #define maohao_flash()   P0 ^= (0x01<<3)
  6. #define KEY_VAL 5
  7. unsigned char k1_flag=0,k2_flag=0,k1,k2;
  8. unsigned char code seg_table[]=
  9. {
  10.   0x88,
  11.   0xdd,
  12.   0x86,
  13.   0x85,
  14.   0xd1,
  15.   0xa1,
  16.   0xa0,
  17.   0xcd,
  18.   0x80,
  19.   0x81,
  20. };
  21. sbit KEY1=P2^5;
  22. sbit KEY2=P2^0;
  23. unsigned char seg_buff[4];
  24. unsigned char t_flag=0,t_counter=0;
  25. TIMEFORMAT sys_time;
  26. void delay_ms(unsigned int count);

  27. void set_com(unsigned char com)
  28. {
  29.     P0 |= 0xf0;    //消隱
  30.     P1 = 0xff;
  31.    _nop_();
  32.    _nop_();
  33.    _nop_();
  34.    _nop_();
  35.    _nop_();
  36.    _nop_();
  37.    _nop_();
  38.    _nop_();
  39.    _nop_();
  40.     _nop_();
  41.    switch(com)
  42.     {
  43.        case 0:
  44.            P0 &= ~(0x01<<4);
  45.            break;
  46.        case 1:
  47.            P0 &= ~(0x01<<5);
  48.            break;
  49.        case 2:
  50.            P0 &= ~(0x01<<6);
  51.            break;
  52.        case 3:
  53.            P0 &= ~(0x01<<7);
  54.            break;
  55.        default :
  56.            break;
  57.     }
  58. }

  59. void scan(void)
  60. {
  61.     static unsigned char com=0;
  62.    if(t_flag==1)
  63.     {
  64.        t_flag = 0;
  65.       
  66.        set_com(com);
  67.        P1 = seg_table[ seg_buff[com] ];
  68.        com++;
  69.        if(com==4)
  70.        {
  71.            com = 0;
  72.        }
  73.     }
  74. }      
  75. void t0_srv(void) interrupt 1 using 1      //2ms中斷
  76. {
  77. TR0 = 0;
  78. TH0 = (65536-2000)/256;
  79. TL0 = (65536-2000)%6;
  80.     t_flag = 1;
  81.    t_counter++;
  82. TR0 = 1;
  83. }
  84. void t1_srv(void) interrupt 3 using 1      //2ms中斷
  85. {
  86. TR1 = 0;
  87. TH1 = (65536-2000)/256;
  88. TL1 = (65536-2000)%6;
  89.    if(KEY1==0)
  90.    {   
  91.        k1--;
  92.        if(k1==0 && KEY1==0)
  93.        {
  94.            k1_flag = 1;
  95.        }
  96.    }        
  97.     else if(KEY1==1)
  98.     {
  99.        k1 = KEY_VAL;
  100.     }
  101.    if(KEY2==0)
  102.    {   
  103.        k2--;
  104.        if(k2==0 && KEY2==0)
  105.        {
  106.            k2_flag = 1;
  107.        }
  108.    }        
  109.     else if(KEY2==1)
  110.     {
  111.        k2 = KEY_VAL;
  112.     }
  113. TR1 = 1;
  114. }
  115. void main(void)
  116. {
  117.    EA  = 0;  
  118. TMOD = 0x11; //timer0 工作方式1 2ms溢出   
  119.     ET0 = 1;
  120.     ET1 = 1;
  121. TH0 = (65536-2000)/256;
  122. TL0 = (65536-2000)%6;
  123.     TH1 = (65536-2000)/256;
  124. TL1 = (65536-2000)%6;
  125. TR0 = 1;
  126.     TR1 = 1;
  127.    DS12887_Init();
  128. EA  = 1;
  129.    while(1)
  130.     {
  131.        if(t_counterP==0)                        //100ms 周期 時鐘更新
  132.        {
  133.            DS12887_GetTime(&sys_time);
  134.            seg_buff[0] = sys_time.hour/10;
  135.            seg_buff[1] = sys_time.hour;
  136.            seg_buff[2] = sys_time.minute/10;
  137.            seg_buff[3] = sys_time.minute;
  138.        }
  139.        if(t_counter == 250)                       //冒號閃爍
  140.        {
  141.            maohao_flash();
  142.            t_counter = 0;
  143.        }
  144.        if(k1_flag==1)                             //小時+1
  145.        {
  146.            k1_flag = 0;
  147.            sys_time.hour += 1 ;
  148.            if(sys_time.hour==24)
  149.            {
  150.                sys_time.hour=0;
  151.            }
  152.            DS12887_SetTime(0x04,sys_time.hour);
  153.        }
  154.        if(k2_flag==1)                             //分鐘+1
  155.        {
  156.            k2_flag = 0;
  157.            sys_time.minute += 1 ;
  158.            if(sys_time.minute==60)
  159.            {
  160.                sys_time.minute=0;
  161.            }
  162.            DS12887_SetTime(0x02,sys_time.minute);
  163.        }
  164.        scan();                                    //掃描數碼管
  165.     }
  166. }

復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:262 發表于 2021-11-21 00:41 | 只看該作者
可惜沒有頭文件啊
回復

使用道具 舉報

板凳
ID:64053 發表于 2021-12-3 23:44 | 只看該作者
這原理圖不夠完整
回復

使用道具 舉報

地板
ID:137736 發表于 2021-12-6 21:03 | 只看該作者
打包上傳全部文件吧,缺了用不成
回復

使用道具 舉報

5#
ID:230742 發表于 2021-12-8 18:33 | 只看該作者
是啊。連積分獎勵都沒有。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线看片 | 日韩高清成人 | 成人免费观看视频 | 国产精品久久久久久久久久免费看 | 国产精品日韩欧美一区二区三区 | 午夜小视频免费观看 | 中文字幕亚洲精品 | 成人一区二区三区视频 | 91社区在线观看 | 日日射影院 | 国产一级片久久久 | 久久午夜剧场 | 黄视频在线网站 | 我爱操 | 欧美a在线 | 久久久久久久久久久蜜桃 | 人干人人| 亚洲不卡视频 | 国产 日韩 欧美 在线 | 国产一区中文字幕 | 成人在线免费观看 | 秋霞在线一区 | 久久99精品国产自在现线小黄鸭 | 欧美日韩专区 | 99久久婷婷国产综合精品电影 | 日韩理论电影在线观看 | 成人精品国产 | 日韩一三区 | 成年人在线视频 | 日韩中文字幕一区 | 午夜免费视频 | 91在线视频网址 | 国产精品免费一区二区 | av免费网址 | 亚洲va欧美va天堂v国产综合 | 一级黄在线观看 | 精品综合久久久 | 国产精品一区二区三区在线 | 亚洲视频中文字幕 | 91久久精品一区二区三区 | 夜夜爽99久久国产综合精品女不卡 |