ht1380_time3.lst

来自「自己的平时一些制作 现在整理一下 与大家一起分享」· LST 代码 · 共 430 行 · 第 1/2 页

LST
430
字号
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:40:48 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE HT1380_TIME3
OBJECT MODULE PLACED IN ht1380_time3.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\kkk\C51\BIN\C51.EXE ht1380_time3.c BROWSE DEBUG OBJECTEXTEND

stmt 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          sbit beep=P1^7;
  11          bit flag=0;
  12          bit flag2=0;
  13          /**********定义两个全局变量*********/
  14          //定义数组变量用于存放四个数码管的显示数据
  15          //定义number存放动态显示是第几个数码管
  16          unsigned char d[4],number;
  17          
  18          /*********定义时间变量年月日时分秒***********/
  19          unsigned char year,month,day,hour,minute,second,callhour,callminute,callsecond,rehour,reminute,resecond,ca
             -llhour2,callminute2,callsecond2;
  20          /**********定义冒号变量 distime=1 是数码管冒号显示出来************/
  21          bit distime;
  22          
  23          /*******与数码管相关的两个表*********/
  24          //一个显示译码表 //注:这里表比前一个多了一个值,最后一个数代表空显示
  25          //一个使能译码表
  26          unsigned char code tab[11]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0};
  27          unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
  28          
  29          /******延时程序***********/
  30          void delay(unsigned char dy)
  31          {
  32   1         while(--dy);
  33   1      }
  34          
  35          /******按键接口描述********/
  36          //左第一 二 三 四 个按键分别对应于 P2.7 P2.6 P2.5 P2.4 
  37          //左第一个按键键值为1 
  38          //左第二个按键键值为2 
  39          //左第三个按键键值为3 
  40          //左第四个按键键值为4
  41           
  42          /******读取按键子程序 getkey()*************/
  43          unsigned char getkey (void)
  44          {    unsigned char k,m,tem,keytem;
  45   1           unsigned int j=0;
  46   1           keytem=0;
  47   1              
  48   1           tem=P2 & 0xf0;                      //第一次读取按键值
  49   1           if(tem!=0xf0)                      //判断有无按键按下
  50   1           {   
  51   2               for(k=0;k<20;k++)
  52   2               delay(250);             //延时一段时间
  53   2               tem=P2 & 0xf0;         //再次读取按键值
  54   2               if(tem!=0xf0)
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:40:48 PAGE 2   

  55   2               {    if(tem==0x70) keytem=1;          //表示左第一个按键按下
  56   3                    else if(tem==0xb0) keytem=2;         //表示左第二个按键按下
  57   3                    else if(tem==0xd0) keytem=3;         //表示左第三个按键按下
  58   3                    else if(tem==0xe0) keytem=4;         //表示左第四个按键按下
  59   3               }
  60   2            }
  61   1            
  62   1            while(tem!=0xf0) 
  63   1                {
  64   2                        for(m=0;m<250;m++)
  65   2               delay(250),j++;
  66   2               tem=P2 & 0xf0;  //等待按键释放
  67   2                  if (tem==0x70&&j>500) 
  68   2                  {
  69   3                   flag=1;
  70   3                  
  71   3                   }
  72   2                  
  73   2      
  74   2                  if (tem==0xb0&&j>500) 
  75   2                  {
  76   3                   flag2=1;
  77   3                  
  78   3                   }
  79   2                }
  80   1            return(keytem);                              //返回按键值
  81   1      }
  82          
  83          /*******  ht1380 子程序*****************/
  84          //------------- sent_char to ht1380----------
  85          //上升沿写入
  86          void sent_char(unsigned char sentchar)
  87          {
  88   1       unsigned char ii;  
  89   1      
  90   1       for(ii=0;ii<8;ii++)
  91   1          {
  92   2            ht1380_sclk=0;
  93   2            if ((sentchar & 1)!=0) ht1380_data=1;
  94   2            else ht1380_data=0;
  95   2            ht1380_sclk=1;
  96   2            sentchar=sentchar>>1;
  97   2          }
  98   1      }
  99          //------------- get_char from ht1380---------
 100          unsigned char get_char()
 101          {
 102   1       unsigned char getchar,ii,temp;
 103   1          getchar=0;temp=1;
 104   1          for(ii=0;ii<8;ii++)
 105   1            {
 106   2             ht1380_sclk=0;
 107   2             ht1380_data=1;
 108   2             if(ht1380_data==1) getchar=getchar |temp;
 109   2             ht1380_sclk=1;
 110   2             temp=temp<<1;
 111   2            }
 112   1          return(getchar);
 113   1      }
 114           
 115          //-------------set_wp_off------------------
 116          void set_wp_off()
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:40:48 PAGE 3   

 117          {
 118   1          ht1380_rest=1;
 119   1          sent_char(0x8e);     //10001110b
 120   1          sent_char(0);        //00000000b
 121   1          ht1380_sclk=0;
 122   1          ht1380_rest=0;
 123   1      }
 124          //-----------set_wp_on--------------------
 125          void set_wp_on()
 126          {
 127   1        ht1380_rest=1;
 128   1        sent_char(0x8e);       //10001110b
 129   1        sent_char(0x80);       //10000000b
 130   1        ht1380_sclk=0;
 131   1        ht1380_rest=0;
 132   1      }
 133          //----------read_time --------------------
 134          void read_time()
 135           {
 136   1        unsigned char temp;
 137   1          ht1380_rest=1;
 138   1          sent_char(0xbf);      //10111111b
 139   1          second=get_char();
 140   1          minute=get_char();
 141   1          hour=  get_char();
 142   1          day=   get_char();
 143   1          month= get_char();
 144   1          temp=  get_char();   /* week day */
 145   1          year=  get_char();
 146   1          temp=  get_char();            
 147   1          ht1380_sclk=0;
 148   1          ht1380_rest=0;
 149   1         
 150   1       }
 151          //--------------set time-----------------
 152          void set_time()
 153           {
 154   1         set_wp_off();
 155   1         ht1380_rest=1;
 156   1         sent_char(0xbe);      //10111110b
 157   1         sent_char(second);
 158   1         sent_char(minute);
 159   1         sent_char(hour);
 160   1         sent_char(day);
 161   1         sent_char(month);
 162   1         sent_char(1);         /* week  day */
 163   1         sent_char(year);
 164   1         sent_char(0);
 165   1         ht1380_sclk=0;
 166   1         ht1380_rest=0;
 167   1         set_wp_on();
 168   1       }
 169          
 170          /*****定时器初始化程序*******/
 171          void Init_Timer (void)
 172          {
 173   1          TMOD=0x21;
 174   1              TH0=(65536-1000)/256;
 175   1          TL0=(65536-1000)%256;
 176   1          TR0=1;
 177   1          ET0=1;
 178   1          EA=1;
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:40:48 PAGE 4   

 179   1      } 
 180          
 181          /*****定时器0中断服务程序******/
 182          //显示处理,具体可以参考前面的实验
 183          void timer0() interrupt 1 using 1
 184          {
 185   1          TH0=(65536-1000)/256;
 186   1          TL0=(65536-1000)%256;
 187   1          number=number++;
 188   1          if(number>3) number=0;
 189   1          P2=digit[number];
 190   1          P0=tab[d[number]]; 
 191   1              //在第二个数码管显示时,将最高位的小数点显示出来,这里为冒号
 192   1          if(distime==1 && number==1)  
 193   1             P0=tab[d[number]]+0x80;  
 194   1       }
 195          /*******主函数***********/
 196          //效果:
 197          //显示时分
 198          //可用按键调整时间-时分
 199          //在较时状态时,相应的数字闪烁

⌨️ 快捷键说明

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