ht1380_time3.lst

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

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

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

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

 179          {
 180   1          TMOD=0x21;
 181   1              TH0=(65536-1000)/256;
 182   1          TL0=(65536-1000)%256;
 183   1          TR0=1;
 184   1          ET0=1;
 185   1          EA=1;
 186   1      } 
 187          
 188          /*****定时器0中断服务程序******/
 189          //显示处理,具体可以参考前面的实验
 190          void timer0() interrupt 1 using 1
 191          {
 192   1          TH0=(65536-1000)/256;
 193   1          TL0=(65536-1000)%256;
 194   1          number=number++;
 195   1          if(number>3) number=0;
 196   1          P2=digit[number];
 197   1          P0=tab[d[number]]; 
 198   1              //在第二个数码管显示时,将最高位的小数点显示出来,这里为冒号
 199   1          if(distime==1 && number==1)  
 200   1             P0=tab[d[number]]+0x80;  
 201   1       }
 202          
 203          /*******闹铃程序***********/
 204          
 205          //延时程序
 206          void delay10ms(unsigned char time)
 207          {
 208   1      unsigned char a,b,c;
 209   1      for(a=0;a<time;a++)
 210   1         for(b=0;b<100;b++)
 211   1          for(c=0;c<12;c++)
 212   1          ;
 213   1      }
 214          void delay50us(unsigned char time)
 215          {
 216   1      unsigned char a,b;
 217   1      for(a=0;a<time;a++)
 218   1         for(b=0;b<6;b++)
 219   1          ;
 220   1      }
 221          
 222          unsigned char code SOUNDLONG[]=
 223          {9,3,12,12,12,24,
 224             9,3,12,12,12,24,
 225             9,3,12,12,12,12,12,
 226             9,3,12,12,12,24,
 227             0, //生日快乐end
 228             6,6,9,3,6,6,12,
 229             6,6,6,6,6,6,12,
 230             6,6,9,3,6,6,9,3,
 231             6,3,3,6,3,3,6,6,9,
 232             0 //三轮车end
 233          };
 234          
 235          unsigned char code SOUNDTONE[]=
 236          {
 237          212,212,190,212,159,169,
 238          212,212,190,212,142,159,
 239          212,212,106,126,159,169,190,
 240          119,119,126,159,142,159,
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:45:25 PAGE 5   

 241          0, //生日快乐end
 242          239,239,212,189,159,159,189,
 243          159,159,142,126,120,120,159,
 244          120,120,142,159,189,142,159,189,
 245          239,212,189,159,142,159,189,212,239,
 246          0 //三轮车end
 247          };
 248          
 249          void Music(unsigned char number)
 250          {
 251   1      unsigned int k,n;
 252   1      unsigned int SoundLong,SoundTone;
 253   1      unsigned int i,j,m;
 254   1      
 255   1      for(k=0;k<number-1;k++)
 256   1      {
 257   2         while(SOUNDLONG[i] !=0){i++;}
 258   2         i++;
 259   2         if(i>=57) i=0;
 260   2      }
 261   1      for(k=0;k<number-1;k++)
 262   1      {
 263   2         while(SOUNDTONE[j] !=0){j++;}

⌨️ 快捷键说明

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