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

📄 万年历.lst

📁 基于AT89S52的万年历C51程序 开发平台:Keil uVision2 日历芯片:DS1302
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   万年繽                                                                03/10/2009 19:04:18 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 万年繽
OBJECT MODULE PLACED IN 万年历.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE 万年历.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /************************************
   2          *程序名:万年历.c
   3          *功  能:万年历
   4          *
   5          *作  者:张小现
   6          *单  位:湖南理工物电系
   7          *    
   8          *
   9          *开始时间:2009.03.10
  10          *结束时间:2009.03.10
  11          *版本信息:
  12          *
  13          *注  备:keys   10               11              12             13              14              15               0-9
  14          *                           年     月/日    时/分   秒     设置    星期    数据输入
  15          *                                                                                                                       
  16          *************************************/
  17          #include<reg52.h>
  18          #define N 4
  19          typedef unsigned char uchar ;
  20          typedef unsigned int uint ;
  21          void Delay(uchar);                  //函数申明
  22          uchar jpdata();                   
  23          void xsq(void);
  24          void fz(uchar a[],uchar cod[],uchar b);
  25          void xianshi(uchar a[],uchar);    
  26          void RTInputByte(uchar);
  27          uchar RTOutputByte(void) ;
  28          uchar R1302(uchar);
  29          void W1302(uchar ucAddr, uchar ucDa);
  30          sbit SCLK = P1^6;      //实时时钟时钟线引脚 
  31          sbit IO = P3^2;        //实时时钟数据线引脚 
  32          sbit RST = P3^7;       //实时时钟复位线引脚 
  33          sbit clk=P0^2;
  34          sbit Data=P0^3;
  35          sbit D6=P0^6;
  36          sbit D7=P0^7;
  37          sbit ACC0 = ACC^0;
  38          sbit ACC7 = ACC^7;
  39          
  40          uchar cod[N];
  41          uchar qq;
  42          uchar i,c=0,keys=17,da;
  43          uchar a[N];
  44          void nian();//显示和设置年
  45          void yue_ri();//显示和设置月/日
  46          void shi_fen();//显示和设置时/分
  47          void miao();//显示和设置秒
  48          void xingqi();//显示和设置星期
  49          
  50          /*************************************主函数**************************************/
  51          void main(void)
  52          {
  53   1         
  54   1          W1302( 0x8f, 0x00);
  55   1          W1302( 0x8e, 0x00);
C51 COMPILER V7.50   万年繽                                                                03/10/2009 19:04:18 PAGE 2   

  56   1          W1302( 0x80, 0x00);
  57   1          while (1)                         //进入循环
  58   1          {
  59   2              if(jpdata()!=keys)            //判断是否有按键
  60   2              {
  61   3                  keys=jpdata();            //将键值记录
  62   3                              nian();//显示和设置年
  63   3                              yue_ri();//显示和设置月/日
  64   3                          shi_fen();//显示和设置时/分
  65   3                          miao();//显示和设置秒
  66   3                          xingqi();//显示和设置星期
  67   3              }
  68   2              xianshi(a,i);              //显示a数组          
  69   2          }    
  70   1      }
  71          /***************************************************************************************************
  72          *函数名: void Delay(uchar time)
  73          *功能: 延时
  74          ***************************************************************************************************/
  75          void Delay(uchar time)
  76          {
  77   1         uchar i,j;
  78   1          for(i=time;i>0;i--)
  79   1            for(j=25;j>0;j--);
  80   1      }
  81          
  82          /**************************************************************************************************
  83          *函数名: uchar jpdata()
  84          *功能: 键盘扫描
  85          ****************************************************************************************************/
  86          uchar jpdata()
  87          {
  88   1          uchar u1,u2,ch; 
  89   1              P2 = 0xf0;                           
  90   1          Delay(1);
  91   1          if( (P2&0xf0)!= 0xf0 )                 
  92   1          {                                
  93   2              Delay(1);                          
  94   2              if( (P2&0xf0)!= 0xf0)            
  95   2              {
  96   3                  u1=P2;
  97   3                  P2=0x0f;
  98   3                  u2=P2;
  99   3                  ch=u1|u2;       
 100   3                                                                       
 101   3              }
 102   2          }      
 103   1              switch(ch)                      //返回相应代码
 104   1          {
 105   2              case 0x77: return 3;    
 106   2              case 0x7b: return 2; 
 107   2              case 0x7d: return 1; 
 108   2              case 0x7e: return 0;
 109   2              case 0xb7: return 7;
 110   2              case 0xbb: return 6;
 111   2              case 0xbd: return 5;
 112   2              case 0xbe: return 4;
 113   2              case 0xd7: return 11;
 114   2              case 0xdb: return 10; 
 115   2              case 0xdd: return 9;
 116   2              case 0xde: return 8; 
 117   2              case 0xe7: return 15;
C51 COMPILER V7.50   万年繽                                                                03/10/2009 19:04:18 PAGE 3   

 118   2              case 0xeb: return 14;
 119   2              case 0xed: return 13;
 120   2              case 0xee: return 12;
 121   2              default:   return 16;    //无键按下返回16
 122   2          }
 123   1      }
 124          /******************************************
 125          *函数名称:xianshi(显示)函数
 126          *函数功能:  显示一个字符串
 127          *函数参数:  字符串头地址
 128          *函数返回值:无
 129          *说明:      只能输入长度为四位的字符串
 130          ********************************************/
 131          void xsq(void)                    //显示器函数
 132          {
 133   1        uchar a,b,c,d;
 134   1        for(d=20;d;d--)
 135   1        {
 136   2          c=0xe0;                     //c赋初值
 137   2          for(a=0;a<4;a++)  
 138   2          {
 139   3            P0 = 0x00;
 140   3            qq = cod[a];                    //送入寄存器的值
 141   3            for(b=8;b>0;b--)                //将八个数送入寄存器
 142   3             {
 143   4               Data=qq&0x80;
 144   4               clk=0;                      //制造一个脉冲,一共八个
 145   4               clk=1;
 146   4               qq=qq<<1;                  //qq移位
 147   4              }
 148   3                 P0 = ~c;            //控制数码管亮
 149   3                Delay(1);            //延时
 150   3            c=(c<<1)|0x10;        //移位控制数码管
 151   3            
 152   3          }
 153   2          
 154   2        }
 155   1      }
 156          void fz(uchar a[],uchar cod[],uchar b)    //赋值函数将a的值给cod
 157          {
 158   1          uchar i,c=b-1;              //c=3
 159   1          for(i=0;i<b;i++,c--)  //i<43.               //将a前几位赋給cod
 160   1          {    
 161   2              cod[3-i]=a[c];
 162   2          }
 163   1          for(;i<N;i++)
 164   1          {
 165   2              cod[3-i]=0x00;                   //cod前几个值为不显示
 166   2          }
 167   1          xsq();
 168   1      }                          
 169          /******************************************
 170          *函数群名称:xszh(显示转换)函数
 171          *函数功能:  将一个uchar字符转换为一个可以输出无符号数
 172          *函数参数:  字符数
 173          *函数返回值:无符号字符数
 174          *说明:      只能输入0到9的字符
 175          ********************************************/
 176          uchar xszh(uchar a)   //显示转换函数,将一个uchar型数组转换为显示用的uchar型数组
 177          {
 178   1          switch (a)
 179   1          {
C51 COMPILER V7.50   万年繽                                                                03/10/2009 19:04:18 PAGE 4   

 180   2              case 0: return 0xb7;
 181   2              case 1: return 0x90;
 182   2              case 2: return 0x3d;
 183   2              case 3: return 0xb9;
 184   2              case 4: return 0x9a;
 185   2              case 5: return 0xab;
 186   2              case 6: return 0xaf;
 187   2              case 7: return 0xb0;
 188   2              case 8: return 0xbf;
 189   2              case 9: return 0xbb;
 190   2              case 10:return 0x00;//不显示
 191   2          }
 192   1      }
 193          /******************************************
 194          //函数群名称:xianshi(显示)函数
 195          //函数功能:  将一个uchar字符串转换为一个可以输出无符号字符串
 196          //函数参数:  字符串头地址,字符串有效位数
 197          //函数返回值:无
 198          //说明:      只能输入长度为四位的字符串
 199          ********************************************/
 200          void xianshi(uchar a[],uchar i) //将要显示的数转换赋予cod数组,需要输入赋予数组和数的个数
 201          {
 202   1          uchar b,c[N];
 203   1          for(b=0;b<i;b++)
 204   1          {
 205   2              c[b]=xszh(a[b]);        //将a数组的值转换为可以输出的值给c函数
 206   2          }
 207   1          fz(c,cod,i);           
 208   1      }                          
 209          void RTInputByte(uchar d) 
 210          { 
 211   1          uchar i;
 212   1          ACC = d;
 213   1          for(i=8; i>0; i--)
 214   1          {
 215   2              IO = ACC0; /*相当于汇编中的 RRC */
 216   2              SCLK = 0;
 217   2              SCLK = 1;
 218   2              ACC = ACC >> 1; 
 219   2          } 
 220   1      }
 221          uchar RTOutputByte(void) 
 222          { 
 223   1          uchar i;
 224   1          for(i=0; i<8; i++)
 225   1          {
 226   2               /*相当于汇编中的 RRC */
 227   2              ACC7 = IO;
 228   2              SCLK = 1;
 229   2              SCLK = 0;
 230   2              ACC = ACC >>1;
 231   2          } 
 232   1              SCLK = 1; 
 233   1          return(ACC); 
 234   1      }
 235          
 236          void W1302(uchar ucAddr, uchar ucDa)
 237          {
 238   1          RST = 0;
 239   1          SCLK = 0;
 240   1          RST = 1;
 241   1          RTInputByte(ucAddr); /* 地址,命令 */
C51 COMPILER V7.50   万年繽                                                                03/10/2009 19:04:18 PAGE 5   

 242   1          RTInputByte(ucDa); /* 写1Byte数据*/
 243   1          SCLK = 1;
 244   1          RST = 0;
 245   1      } 
 246          uchar R1302(uchar ucAddr)
 247          {
 248   1          uchar ucData;
 249   1          RST = 0;
 250   1          SCLK = 0;
 251   1          RST = 1;
 252   1          RTInputByte(ucAddr); /* 地址,命令 */
 253   1          ucData = RTOutputByte(); /* 读1Byte数据 */
 254   1          SCLK = 1;
 255   1          RST = 0;
 256   1          return(ucData);
 257   1      }
 258          
 259          
 260          /********************************************************************************************
 261          *

⌨️ 快捷键说明

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