找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键控制DS1302芯片时钟

[复制链接]
跳转到指定楼层
楼主
ID:244206 发表于 2018-1-24 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按键控制芯片时钟

单片机源程序如下:
  1. #include "STC15F2K60S2.H"
  2. #include "INTRINS.H"
  3. #include "DS1302.H"

  4. #define  uchar unsigned char
  5. #define uint unsigned int
  6. #define wela 0xcf
  7. #define dula 0xef

  8. #define wendul 0xa7        //c

  9. uchar gang=0xbf;        //-
  10. uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选共阴数码管
  11. uchar code table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选

  12. uchar shi,fen,miao;
  13. uchar temp,num;
  14. uchar f,ff;
  15. bit key4_flag=1;
  16. bit bb=1;
  17. void key();
  18. void Delay1ms(uint m)                //@11.0592MHz
  19. {
  20.         unsigned char i, j;
  21.         uint z;
  22.         for(z=m;z>0;z--)
  23.         {
  24.                 _nop_();
  25.                 _nop_();
  26.                 _nop_();
  27.                 i = 11;
  28.                 j = 190;
  29.                 do
  30.                 {
  31.                         while (--j);
  32.                 } while (--i);
  33.         }
  34. }
  35. void show_1()//界面一 时钟界面
  36. {
  37.         P2 = ((P2&0x1f)|dula);
  38.         P0 = table[shi%100/10];
  39.         P2 &= 0x1f;                                                //shi
  40.         P2 = ((P2&0x1f)|wela);
  41.         P0 = table1[0];
  42.         P2 &= 0x1f;
  43.         Delay1ms(1);

  44.         P2 = ((P2&0x1f)|dula);
  45.         P0 = table[shi%10];
  46.         P2 &= 0x1f;                                                //shi
  47.         P2 = ((P2&0x1f)|wela);
  48.         P0 = table1[1];
  49.         P2 &= 0x1f;
  50.         Delay1ms(1);

  51.         P2 = ((P2&0x1f)|dula);
  52.         P0 = gang;
  53.         P2 &= 0x1f;
  54.         P2 = ((P2&0x1f)|wela);                        //-
  55.         P0 = table1[2];
  56.         P2 &= 0x1f;
  57.         Delay1ms(1);

  58.         P2 = ((P2&0x1f)|dula);
  59.         P0 = table[fen%100/10];
  60.         P2 &= 0x1f;                                           //fen
  61.         P2 = ((P2&0x1f)|wela);
  62.         P0 = table1[3];
  63.         P2 &= 0x1f;
  64.         Delay1ms(1);

  65.         P2 = ((P2&0x1f)|dula);
  66.         P0 = table[fen%10];
  67.         P2 &= 0x1f;
  68.         P2 = ((P2&0x1f)|wela);                  //fen
  69.         P0 = table1[4];
  70.         P2 &= 0x1f;
  71.         Delay1ms(1);

  72.         P2 = ((P2&0x1f)|dula);
  73.         P0 = gang;
  74.         P2 &= 0x1f;
  75.         P2 = ((P2&0x1f)|wela);                   //-
  76.         P0 = table1[5];
  77.         P2 &= 0x1f;
  78.         Delay1ms(1);

  79.         P2 = ((P2&0x1f)|dula);
  80.         P0 = table[miao%100/10];                         //miao
  81.         P2 &= 0x1f;
  82.         P2 = ((P2&0x1f)|wela);
  83.         P0 = table1[6];
  84.         P2 &= 0x1f;
  85.         Delay1ms(1);

  86.         P2 = ((P2&0x1f)|dula);
  87.         P0 = table[miao%10];
  88.         P2 &= 0x1f;
  89.         P2 = ((P2&0x1f)|wela);                 //miao
  90.         P0 = table1[7];
  91.         P2 &= 0x1f;
  92.         Delay1ms(1);
  93. }
  94. void show()
  95. {
  96.         P2 &=0x1f;
  97.         P2 = ((P2&0x1f)|0x80);
  98.         P0 = 0xff;
  99.         P2 &= 0x1f;
  100.         Delay1ms(1000);

  101. }

  102. void init()
  103. {
  104.         TMOD = 0X01;//模式
  105.         TL0 = 0X00;
  106.         TH0 = 0X4C;
  107.         ET0 = 1; //中断允许位
  108.         TR0 = 1;//开始计数
  109.         EA = 1;        //打开总中断
  110. }
  111. void main()
  112. {
  113.         init();
  114.         show();
  115.         Initial();
  116.         while(1)
  117.         {
  118.                 show_1();
  119.                 key();
  120.                 if(bb==1)
  121.                 {
  122.                         shi = read_1302(0x85);
  123.                         fen = read_1302(0x83);
  124.                         miao = read_1302(0x81);
  125.                 }

  126.                
  127.         }
  128. }
  129. void time() interrupt 1        //
  130. {
  131.         TL0 = 0X00;
  132.         TH0 = 0X4C;
  133.         temp++;
  134.         if(temp==20)
  135.         {       
  136.                 temp=0;
  137.                 num++;
  138.                 gang = (num<<6)|0xbf;
  139.         //        11_flag = 1;
  140.                 if(num==10)
  141.                 {
  142.                         num=0;
  143.                 }
  144.         }
  145. }
  146. void key()
  147. {

  148.         if(P30==0&&key4_flag==1)
  149.         {
  150.                 Delay1ms(20);
  151.                 if(P30==0)
  152.                 {
  153.                         while(!P30);
  154.                         f++;
  155.                         switch(f)
  156.                         {
  157.                                 case 1:        bb=0;
  158.                                                 Write1302 (0x8E,0X00); //允许写,禁止写保护
  159.                                                 Write1302 (0x80,0x00|(miao)/10*16+(miao)%10); //向DS1302内写秒寄存器80H写入初始秒数据00
  160.                                                 Write1302 (0x8E,0x80); //打开写保护
  161.                                                 if(P31==0)
  162.                                                 {
  163.                                                         EA=0;                  
  164.                                                         Delay1ms(20);
  165.                                                         if(P31==0)
  166.                                                         {                         
  167.                                                          while(!P31);
  168.                                                           
  169.                                                             miao++;
  170.                                                                 if(miao==60)
  171.                                                                 {
  172.                                                                         miao=0;
  173.                                                                 }               
  174.                                                           
  175.                                                          
  176.                                                         }
  177.                                                 }
  178.                                                
  179.                                                 break;
  180.                                 case 2:bb=0;
  181.                                                 Write1302 (0x8E,0X00); //允许写,禁止写保护
  182.                                                 Write1302 (0x80,0x00|(fen)/10*16+(fen)%10); //向DS1302内写秒寄存器80H写入初始秒数据00
  183. ……………………

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

所有资料51hei提供下载:
按键控制芯片时钟.rar (36.12 KB, 下载次数: 15)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2018-1-25 00:34 | 只看该作者
有电路图吗?
回复

使用道具 举报

板凳
ID:422804 发表于 2018-11-11 20:09 | 只看该作者
为什么我的按键不顶用呢
回复

使用道具 举报

地板
ID:760161 发表于 2021-5-15 23:29 来自手机 | 只看该作者
只有程序吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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