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

📄 starled.lst

📁 ds12887时钟芯片应用源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   STARLED                                                               03/03/2009 18:51:24 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE STARLED
OBJECT MODULE PLACED IN starled.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE starled.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          
   3          #define uchar unsigned char 
   4          #define uint unsigned int
   5          sbit rs=P3^5;
   6          sbit lcden=P3^4;
   7          sbit s1=P3^0;
   8          sbit s2=P3^1;
   9          sbit s3=P3^2;
  10          
  11          sbit beep=P2^3;
  12          sbit dscs=P1^4;
  13          sbit dsas=P1^5;
  14          sbit dsrw=P1^6;
  15          sbit dsds=P1^7;
  16          sbit dsirq=P3^3;
  17          uchar count,s1num,flag,flag1;
  18          char miao,shi,fen;
  19          uchar code table[]="  2007-7-30 MON";
  20          uchar code table1[]="      :  :  ";
  21          void write_ds(uchar,uchar);                     //声明函数
  22          void set_alarm(uchar,uchar,uchar);
  23          uchar read_ds(uchar);
  24          //void set_time();
  25          
  26          void delay(uint z)
  27          {
  28   1              uint x,y;
  29   1              for(x=z;x>0;x--)
  30   1                      for(y=110;y>0;y--);
  31   1      }
  32          
  33          void didi()     //蜂鸣器报警声
  34          {
  35   1              beep=0;
  36   1              delay(50);
  37   1              beep=1;
  38   1              delay(100);
  39   1              beep=0;
  40   1              delay(50);
  41   1              beep=1;
  42   1      }
  43          void write_com(uchar com)
  44          {
  45   1              rs=0;
  46   1              lcden=0;
  47   1              P0=com;
  48   1              delay(5);
  49   1              lcden=1;
  50   1              delay(5);
  51   1              lcden=0;        
  52   1      }
  53          
  54          void write_date(uchar date)
  55          {
C51 COMPILER V8.02   STARLED                                                               03/03/2009 18:51:24 PAGE 2   

  56   1              rs=1;
  57   1              lcden=0;
  58   1              P0=date;
  59   1              delay(5);
  60   1              lcden=1;
  61   1              delay(5);
  62   1              lcden=0;        
  63   1      }
  64          
  65          void init()
  66          {
  67   1              uchar num;
  68   1              EA=1;
  69   1              EX0=1;
  70   1              IT0=1;
  71   1      
  72   1              lcden=0;
  73   1      //      set_time();
  74   1              set_alarm(14,13,10);    //闹钟定时时间(14:13:10)
  75   1              write_ds(0x0B,0x26);//B寄存器写入0X26(0010 0110)开启闹钟,二进制格式,12小时模式      
  76   1              read_ds(0x0c);  //读取一次C寄存器才能消除中断标志响应下一次中断
  77   1              write_com(0x38);
  78   1              write_com(0x0c);
  79   1              write_com(0x06);
  80   1              write_com(0x01);
  81   1              write_com(0x80);
  82   1              for(num=0;num<15;num++)
  83   1                      {
  84   2                              write_date(table[num]);
  85   2                              delay(5);
  86   2                      }
  87   1              write_com(0x80+0x40);
  88   1              for(num=0;num<12;num++)
  89   1                      {
  90   2                              write_date(table1[num]);
  91   2                              delay(5);
  92   2                      }
  93   1      
  94   1      }
  95          
  96          void write_sfm(uchar add,uchar date)
  97          {
  98   1              uchar shi,ge;
  99   1              shi=date/10;
 100   1              ge=date%10;
 101   1              write_com(0x80+0x40+add);
 102   1              write_date(0x30+shi);
 103   1              write_date(0x30+ge);
 104   1      }
 105          
 106          void keyscan()
 107          {
 108   1              
 109   1              if(flag1==1)     //响应中断后flag1=1说明正在报警
 110   1              {
 111   2                      if(s2==0)        //报警时按任意键消除报警
 112   2                      {       
 113   3                              delay(5);
 114   3                              if(s2==0)
 115   3                              {
 116   4                                      while(!s2);
 117   4                                      flag1=0;          //消除报警后flag1=0,以备下次消除
C51 COMPILER V8.02   STARLED                                                               03/03/2009 18:51:24 PAGE 3   

 118   4                              }
 119   3                                      
 120   3                      }
 121   2                      if(s3==0)
 122   2                      {       
 123   3                              delay(5);
 124   3                              if(s3==0)
 125   3                              {
 126   4                                      while(!s3);
 127   4                                      flag1=0;                 //消除报警后flag1=0,以备下次消除
 128   4                              }
 129   3                                      
 130   3                      }
 131   2              }
 132   1                      
 133   1              if(s1==0)       
 134   1              {
 135   2                      delay(5);
 136   2                      if(s1==0)
 137   2                      {       s1num++;
 138   3                              flag=1; //flag=1时调表调好后写入887,然后flag置0重新读取887内数据
 139   3                              flag1=0;//调表时不让蜂鸣器响
 140   3                              while(!s1);
 141   3                              if(s1num==1)
 142   3                              {
 143   4                                      TR0=0;            //调表时停止走表
 144   4                                      write_com(0x80+0x40+10); //1602miao地址
 145   4                                      write_com(0x0f);        //闪烁
 146   4                              }
 147   3              }
 148   2                              if(s1num==2)
 149   2                              {
 150   3                                      write_com(0x80+0x40+7);
 151   3                              }
 152   2                              if(s1num==3)
 153   2                              {
 154   3                                      write_com(0x80+0x40+4);
 155   3                              }
 156   2                              if(s1num==4)
 157   2                              {                        //调好表后把时分秒数据写入12887
 158   3                                      s1num=0;
 159   3                                      write_com(0x0c); //停止闪烁
 160   3                      //              flag=0;                  
 161   3                                      write_ds(0,miao); //把调好的数据写入miao寄存器
 162   3                                      write_ds(2,fen);
 163   3                                      write_ds(4,shi);
 164   3                                      flag=0;                  //flag清0使调好的数据重新写入887

⌨️ 快捷键说明

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