⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 +

📁 51单片机配套C程序
💻
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DAS1302                                                               05/16/2010 10:01:11 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DAS1302
OBJECT MODULE PLACED IN DAS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DAS1302.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /************************************************************************/
   3          //      huaqinMCU DS1302 实验程序 数码管显示 时钟设置说明
   4          //     "8键"为时钟设置、时分切换、保存 "0键"为加 "4键"为减
   5          /************************************************************************/
   6          #include <reg52.h>
   7          #define uchar unsigned char 
   8          #define uint unsigned int
   9          //===以下IO定义请根据您硬件的连接修改===
  10          sbit T_RST=P3^5;//ds1302-5
  11          sbit T_IO=P3^4;//ds1302-6
  12          sbit T_CLK=P3^6;//ds1302-7
  13          sbit ACC0=ACC^0;
  14          sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍
  15          sbit up=P3^1;
  16          sbit down=P3^2;
  17          sbit set=P3^0;
  18          uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg;
  19          int hour,mie,sei;
  20          uchar clk_time[3];  //秒,分,时寄存器初始值
  21          code uchar ledmap[]={
  22          0x3f,0x06,0x5b,0x4f,
  23          0x66,0x6d,0x7d,0x07,
  24          0x7f,0x6f,0x40};
  25          //数码管段码                            
  26          
  27          /******************DS1302:写入操作(上升沿)*********************/ 
  28          void write_byte(uchar da)
  29          {
  30   1         uchar i;
  31   1         ACC=da;
  32   1         for(i=8;i>0;i--)
  33   1         { 
  34   2            T_IO=ACC0;
  35   2                T_CLK=0;     
  36   2            T_CLK=1;
  37   2            ACC=ACC>>1;
  38   2         }
  39   1      }
  40          
  41          /******************DS1302:读取操作(下降沿)*****************/
  42          uchar read_byte(void)
  43          {
  44   1         uchar i;
  45   1         for(i=0;i<8;i++)
  46   1         {
  47   2            ACC=ACC>>1;
  48   2                T_CLK = 1;
  49   2                T_CLK = 0;
  50   2            ACC7 = T_IO;
  51   2         }
  52   1         return(ACC);
  53   1      
  54   1      }
  55          
C51 COMPILER V7.50   DAS1302                                                               05/16/2010 10:01:11 PAGE 2   

  56          /******************DS1302:写入数据(先送地址,再写数据)***************************/ 
  57          void write_1302(uchar addr,uchar da)
  58          {
  59   1         T_RST=0;    //停止工作
  60   1         T_CLK=0;                                 
  61   1         T_RST=1;   //重新工作
  62   1         write_byte(addr);    //写入地址
  63   1         
  64   1         write_byte(da);
  65   1         T_RST=0;
  66   1         T_CLK=1;
  67   1      }
  68          
  69          /******************DS1302:读取数据(先送地址,再读数据)**************************/
  70          uchar read_1302(uchar addr)
  71          {
  72   1         uchar temp;
  73   1         T_RST=0;                                   //停止工作
  74   1         T_CLK=0;  
  75   1         T_RST=1;                         //重新工作
  76   1         write_byte(addr);   //写入地址
  77   1         temp=read_byte();
  78   1         T_RST=0;
  79   1         T_CLK=1;     //停止工作
  80   1         return(temp);
  81   1      }
  82          /***********************延时程序=a*1ms**************************************/
  83          void delay(uchar a)
  84          {
  85   1         uchar i;
  86   1         while(a-- !=0)
  87   1         {    // led_disp();
  88   2              for(i=0;i<125;i++);
  89   2         }
  90   1      }
  91          /***********************显示程序**********************************************/
  92          
  93          /* DS1302秒,分,时寄存器是BCD码形式:  用16求商和余进行"高4位"和"低4位"分离 */
  94          /****************************************************************************/           
  95          void led_disp()
  96          {   uchar cant1,cant2; 
  97   1              if(b==0)
  98   1                  {
  99   2                              cant1=0;cant2=0;
 100   2                              clock_ms=clk_time[0]/ 16;  clock_mg=clk_time[0]%16;
 101   2                              
 102   2                              clock_fs=clk_time[1]/ 16;  clock_fg=clk_time[1]%16;
 103   2                              mie=clock_fs*10+ clock_fg;
 104   2                              clock_ss=clk_time[2]/ 16;   clock_sg=clk_time[2]%16;//BCD*to*10
 105   2                              hour=clock_ss*10+ clock_sg; //用16求商和余进行"高4位"和"低4位"分离
 106   2                      }
 107   1          
 108   1                 if(b==1)
 109   1                   {
 110   2                               cant1++;
 111   2                   cant2=0;
 112   2                                              clock_ss=hour/ 10;  clock_sg=hour%10;
 113   2                                              
 114   2                                              clock_fs=mie/ 10;  clock_fg=mie%10;
 115   2                                              
 116   2                                              clock_ms=sei/10;   clock_mg=sei%10;
 117   2                           }
C51 COMPILER V7.50   DAS1302                                                               05/16/2010 10:01:11 PAGE 3   

 118   1                    if(b==2)
 119   1                   {  cant1=0;
 120   2                     cant2++;
 121   2                                              clock_ss=hour/ 10;  clock_sg=hour%10;
 122   2                                              
 123   2                                              clock_fs=mie/ 10;  clock_fg=mie%10;
 124   2                                              
 125   2                                              clock_ms=sei/10;   clock_mg=sei%10;
 126   2                           }
 127   1               
 128   1      
 129   1                       if(cant1<=3)
 130   1                           {  
 131   2                               P2=0;
 132   2                              P0=ledmap[clock_ss];
 133   2                              delay(1);
 134   2                              P0=0X00;
 135   2                              P2=1;
 136   2                              P0=ledmap[clock_sg];//时个位
 137   2                              delay(1);P0=0X00;}
 138   1                              if(cant1==5)  
 139   1                  cant1=0; 
 140   1                              P2=2;
 141   1                              P0=ledmap[10];//显示"-"数组里的 0x40
 142   1                              delay(1);
 143   1                              P0=0X00;
 144   1      
 145   1                  if(cant2<=3) 
 146   1                          {
 147   2                              P2=3;
 148   2                              P0=ledmap[clock_fs];//分十位
 149   2                              delay(1);
 150   2                  P0=0X00;
 151   2                              P2=4;
 152   2                              P0=ledmap[clock_fg];//时个位
 153   2                              delay(1);P0=0X00;
 154   2                               } 
 155   1                              if(cant2==5)
 156   1                                  cant2=0;
 157   1                     P2=5;
 158   1                              P0=ledmap[10];//显示"-"数组里的 0x40
 159   1                              delay(1);
 160   1                              P0=0X00;
 161   1      
 162   1                      P2=6;
 163   1                              P0=ledmap[clock_ms];//秒十位
 164   1                              delay(1);
 165   1                  P0=0X00;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -