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

📄 ht1380_time2.lst

📁 自己的平时一些制作 现在整理一下 与大家一起分享
💻 LST
字号:
C51 COMPILER V7.20   HT1380_TIME2                                                          03/04/2007 20:11:44 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE HT1380_TIME2
OBJECT MODULE PLACED IN ht1380_time2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ht1380_time2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          
   3          /*****定义ht1380芯片接口********/
   4          // ht1380 ht1380_sclk --->P1.0
   5          // ht1380 I/O  --->P1.1
   6          // ht1380 ht1380_rest --->P1.2
   7          sbit ht1380_sclk=P1^0;
   8          sbit ht1380_data=P1^1;
   9          sbit ht1380_rest=P1^2;
  10          
  11          /**********定义两个全局变量*********/
  12          //定义数组变量用于存放四个数码管的显示数据
  13          //定义number存放动态显示是第几个数码管
  14          unsigned char d[4],number;
  15          
  16          /*********定义时间变量年月日时分秒***********/
  17          unsigned char year,month,day,hour,minute,second;
  18          /**********定义冒号变量 distime=1 是数码管冒号显示出来************/
  19          bit distime;
  20          
  21          /*******与数码管相关的两个表*********/
  22          //一个显示译码表
  23          //一个使能译码表
  24          unsigned char code tab[10]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f};
  25          unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
  26          
  27          /******延时程序***********/
  28          void delay(unsigned char dy)
  29          {
  30   1         while(--dy);
  31   1      }
  32          
  33          /******按键接口描述********/
  34          //左第一 二 三 四 个按键分别对应于 P2.7 P2.6 P2.5 P2.4 
  35          //左第一个按键键值为1 
  36          //左第二个按键键值为2 
  37          //左第三个按键键值为3 
  38          //左第四个按键键值为4
  39           
  40          /******读取按键子程序 getkey()*************/
  41          unsigned char getkey (void)
  42          {    unsigned char k,tem,keytem;
  43   1           keytem=0;
  44   1           tem=P2 & 0xf0;                      //第一次读取按键值
  45   1           if(tem!=0xf0)                      //判断有无按键按下
  46   1           {   
  47   2               for(k=0;k<20;k++)
  48   2               delay(250);             //延时一段时间
  49   2               tem=P2 & 0xf0;         //再次读取按键值
  50   2               if(tem!=0xf0)
  51   2               {    if(tem==0x70) keytem=1;          //表示左第一个按键按下
  52   3                    else if(tem==0xb0) keytem=2;         //表示左第二个按键按下
  53   3                    else if(tem==0xd0) keytem=3;         //表示左第三个按键按下
  54   3                    else if(tem==0xe0) keytem=4;         //表示左第四个按键按下
  55   3               }
C51 COMPILER V7.20   HT1380_TIME2                                                          03/04/2007 20:11:44 PAGE 2   

  56   2            }
  57   1            
  58   1            while(tem!=0xf0) tem=P2 & 0xf0;  //等待按键释放 
  59   1            return(keytem);                              //返回按键值
  60   1      }
  61          
  62          /*******  ht1380 子程序*****************/
  63          //------------- sent_char to ht1380----------
  64          //上升沿写入
  65          void sent_char(unsigned char sentchar)
  66          {
  67   1       unsigned char ii;  
  68   1      
  69   1       for(ii=0;ii<8;ii++)
  70   1          {
  71   2            ht1380_sclk=0;
  72   2            if ((sentchar & 1)!=0) ht1380_data=1;
  73   2            else ht1380_data=0;
  74   2            ht1380_sclk=1;
  75   2            sentchar=sentchar>>1;
  76   2          }
  77   1      }
  78          //------------- get_char from ht1380---------
  79          unsigned char get_char()
  80          {
  81   1       unsigned char getchar,ii,temp;
  82   1          getchar=0;temp=1;
  83   1          for(ii=0;ii<8;ii++)
  84   1            {
  85   2             ht1380_sclk=0;
  86   2             ht1380_data=1;
  87   2             if(ht1380_data==1) getchar=getchar |temp;
  88   2             ht1380_sclk=1;
  89   2             temp=temp<<1;
  90   2            }
  91   1          return(getchar);
  92   1      }
  93           
  94          //-------------set_wp_off------------------
  95          void set_wp_off()
  96          {
  97   1          ht1380_rest=1;
  98   1          sent_char(0x8e);     //10001110b
  99   1          sent_char(0);        //00000000b
 100   1          ht1380_sclk=0;
 101   1          ht1380_rest=0;
 102   1      }
 103          //-----------set_wp_on--------------------
 104          void set_wp_on()
 105          {
 106   1        ht1380_rest=1;
 107   1        sent_char(0x8e);       //10001110b
 108   1        sent_char(0x80);       //10000000b
 109   1        ht1380_sclk=0;
 110   1        ht1380_rest=0;
 111   1      }
 112          //----------read_time --------------------
 113          void read_time()
 114           {
 115   1        unsigned char temp;
 116   1          ht1380_rest=1;
 117   1          sent_char(0xbf);      //10111111b
C51 COMPILER V7.20   HT1380_TIME2                                                          03/04/2007 20:11:44 PAGE 3   

 118   1          second=get_char();
 119   1          minute=get_char();
 120   1          hour=  get_char();
 121   1          day=   get_char();
 122   1          month= get_char();
 123   1          temp=  get_char();   /* week day */
 124   1          year=  get_char();
 125   1          temp=  get_char();            
 126   1          ht1380_sclk=0;
 127   1          ht1380_rest=0;
 128   1         
 129   1       }
 130          //--------------set time-----------------
 131          void set_time()
 132           {
 133   1         set_wp_off();
 134   1         ht1380_rest=1;
 135   1         sent_char(0xbe);      //10111110b
 136   1         sent_char(second);
 137   1         sent_char(minute);
 138   1         sent_char(hour);
 139   1         sent_char(day);
 140   1         sent_char(month);
 141   1         sent_char(1);         /* week  day */
 142   1         sent_char(year);
 143   1         sent_char(0);
 144   1         ht1380_sclk=0;
 145   1         ht1380_rest=0;
 146   1         set_wp_on();
 147   1       }
 148          
 149          /*****定时器初始化程序*******/
 150          void Init_Timer (void)
 151          {
 152   1          TMOD=0x21;
 153   1              TH0=(65536-1000)/256;
 154   1          TL0=(65536-1000)%256;
 155   1          TR0=1;
 156   1          ET0=1;
 157   1          EA=1;
 158   1      } 
 159          
 160          /*****定时器0中断服务程序******/
 161          //显示处理,具体可以参考前面的实验
 162          void timer0() interrupt 1 using 1
 163          {
 164   1          TH0=(65536-1000)/256;
 165   1          TL0=(65536-1000)%256;
 166   1          number=number++;
 167   1          if(number>3) number=0;
 168   1          P2=digit[number];
 169   1          P0=tab[d[number]]; 
 170   1              //在第二个数码管显示时,将最高位的小数点显示出来,这里为冒号
 171   1          if(distime==1 && number==1)  
 172   1             P0=tab[d[number]]+0x80;  
 173   1       }
 174          /*******主函数***********/
 175          //效果:
 176          //切换显示年月日时分秒
 177          //状态1 显示年
 178          //状态2 显示月日
 179          //状态3 显示时分
C51 COMPILER V7.20   HT1380_TIME2                                                          03/04/2007 20:11:44 PAGE 4   

 180          //状态4 显示分秒
 181          //切换按键使用一个键S2--左边第一个按键
 182          
 183          void main (void)
 184          {
 185   1       unsigned char keyboard;         //键值变量
 186   1       unsigned char state=3;          //状态指示 首先显示时分
 187   1       year=07;month=03;day=0x04;hour=0x19;minute=0x16;second=13; //软件预设时间参数
 188   1       ht1380_rest=0;ht1380_sclk=0;   //选中时钟芯片
 189   1       set_time();                    //设置时间
 190   1       Init_Timer();                  //初始化定时器及全局变量
 191   1       number=0;                                        
 192   1      while(1)
 193   1           {          
 194   2                      read_time();      //读时间
 195   2                      keyboard=getkey(); //读按键
 196   2                      if (keyboard==1) state=(state+1)%4;  //(左)按键1切换状态 
 197   2              if (state==0) 
 198   2                      {    
 199   3                          distime=0;    //不显示冒号
 200   3                              d[0]=2;
 201   3                              d[1]=0;
 202   3                              d[2]=year/16;
 203   3                              d[3]=year%16;
 204   3                      delay(250);       
 205   3                      }
 206   2                      else if (state==1)
 207   2                      {   
 208   3                          distime=0;    //不显示冒号
 209   3                              d[0]=month/16;
 210   3                              d[1]=month%16;
 211   3                              d[2]=day/16;
 212   3                              d[3]=day%16;
 213   3                      delay(250);       
 214   3                      }
 215   2                      else if(state==2)
 216   2                      {
 217   3                              distime=1;      //显示冒号
 218   3                              d[0]=hour/16;
 219   3                              d[1]=hour%16;
 220   3                              d[2]=minute/16;
 221   3                              d[3]=minute%16;
 222   3                      delay(250);       
 223   3                      }
 224   2              else if(state==3)
 225   2                      {
 226   3                              distime=1;      //显示冒号                      
 227   3                          d[0]=minute/16;
 228   3                              d[1]=minute%16;
 229   3                              d[2]=second/16;
 230   3                              d[3]=second%16;
 231   3                      delay(250);       
 232   3                      }
 233   2           }
 234   1      }
 235          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    523    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.20   HT1380_TIME2                                                          03/04/2007 20:11:44 PAGE 5   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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