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

📄 dzz_thesamea.lst

📁 单片机控制下的电子钟实验程序。适用于初学者。
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.05a   DZZ_THESAMEA                                                         09/13/2008 20:03:56 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE DZZ_THESAMEA
OBJECT MODULE PLACED IN dzz_thesameA.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE dzz_thesameA.c DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int 
   4          #define ulong unsigned long
   5          sbit choose_du=P2^6;
   6          sbit choose_we=P2^7;
   7          sbit s2=P3^4;
   8          sbit s3=P3^5;
   9          sbit s4=P3^6;
  10          sbit s5=P3^7;
  11          sbit beep=P2^3;
  12          
  13          bit beep_f;
  14          bit allow;
  15          bit yes;
  16          bit flag;
  17          bit temp;
  18          bit flag_voice;
  19          bit key_flag;
  20          
  21          uchar num_voice;
  22          uchar num;
  23          uchar num_sec,num_secflag;
  24          uchar num_hours,num_hourg,num_minis,num_minig;
  25          uchar num_hoursclock,num_hourgclock,num_minisclock,num_minigclock;
  26          uchar i,j;
  27          uchar times;
  28          uchar num_hourf;
  29          uchar num_key;
  30          uchar pres;
  31          
  32          uint upmost1=500;
  33          uint upmost2=50000;
  34          /*uchar code table_du[]={                       //0-9的共阴极代码       
  35                  0x3f,0x06,0x5b,0x4f,0x66,
  36                  0x6d,0x7d,0x07,0x7f,0x6f,0x40   
  37                                  };
  38          uchar data_dis[5]={0x00,0x00,0x00,0x00,0x00};
  39          uchar scan_con[]={0xfe,0xfd,0xfb,0xf7,0xef};    //数码管位选码 */
  40          
  41          uchar code table_du[]={                 //0-9的共阴极代码       
  42                  0xc0,0xf9,0xa4,0xb0,0x99,
  43                  0x92,0x82,0xf8,0x80,0x90,0xbf   
  44                                  };
  45          uchar data_dis[5]={0x00,0x00,0x00,0x00,0x00};
  46          uchar scan_con[]={0x01,0x02,0x04,0x08,0x10};
  47          //uchar scan_con[]={0xfe,0xfd,0xfb,0xf7,0xef};  //数码管位选码共阴极 
  48          
  49          void delay(uchar x)//正常显示用延时子函数和消除抖动用延时函数  
  50          {       
  51   1              uchar i,j;
  52   1              for(i=x;i>0;i--)
  53   1                      for(j=200;j>0;j--);
  54   1      }
  55          
C51 COMPILER V8.05a   DZZ_THESAMEA                                                         09/13/2008 20:03:56 PAGE 2   

  56          void display_wait1()//等待时显示P 
  57          {
  58   1              //P0=0xff;
  59   1              P0=0x00;
  60   1              choose_we=1;
  61   1              choose_we=0;
  62   1              //P0=0x73;      //display of P
  63   1              P0=0x8c;
  64   1              choose_du=1;
  65   1              choose_du=0;
  66   1              //P0=0xe4;      //1110 0100 最低位是最左边的数码管 
  67   1              P0=0x1b;        
  68   1              choose_we=1;
  69   1              choose_we=0;
  70   1              delay(3);
  71   1              
  72   1              //P0=0xff;
  73   1              P0=0x00;
  74   1              choose_we=1;
  75   1              choose_we=0;
  76   1              //P0=0x40;
  77   1              P0=0xbf;
  78   1              choose_du=1;
  79   1              choose_du=0;
  80   1              //P0=0xfb;      //1111 1011
  81   1              P0=0x04;
  82   1              choose_we=1;
  83   1              choose_we=0;
  84   1              delay(3);       
  85   1      }
  86          
  87          void display_wait2()//等待时不显示 
  88          {
  89   1              //P0=0xff;
  90   1              P0=0x00;
  91   1              choose_we=1;
  92   1              choose_we=0;
  93   1              delay(3);               
  94   1      }
  95          
  96          void display_scan()//扫描的显示方式一定程度上减少了程序的长度  
  97          {                                                       //显示函数      
  98   1              uchar k;
  99   1              data_dis[0]=num_hours;
 100   1              data_dis[1]=num_hourg;
 101   1              data_dis[2]=10;
 102   1              data_dis[3]=num_minis;
 103   1              data_dis[4]=num_minig;
 104   1              for(k=0;k<5;k++)
 105   1              {               
 106   2                      //P0=0xff;
 107   2                      P0=0x00;
 108   2                      choose_we=1;
 109   2                      choose_we=0;
 110   2                      P0=table_du[data_dis[k]];
 111   2                      choose_du=1;
 112   2                      choose_du=0;
 113   2                      P0=scan_con[k];
 114   2                      choose_we=1;
 115   2                      choose_we=0;
 116   2                      delay(3);       
 117   2              }
C51 COMPILER V8.05a   DZZ_THESAMEA                                                         09/13/2008 20:03:56 PAGE 3   

 118   1      }
 119          void display_ss(uchar x)
 120          {
 121   1              data_dis[0]=num_hours;
 122   1              data_dis[1]=num_hourg;
 123   1              data_dis[3]=num_minis;
 124   1              data_dis[4]=num_minig;
 125   1              
 126   1              //P0=0xff;
 127   1              P0=0x00;
 128   1              choose_we=1;
 129   1              choose_we=0;
 130   1              P0=table_du[data_dis[x]];
 131   1              choose_du=1;
 132   1              choose_du=0;
 133   1              P0=scan_con[x];
 134   1              choose_we=1;
 135   1              choose_we=0;
 136   1              delay(3);       
 137   1      }
 138          
 139          void displayclock(uchar hours,uchar hourg,uchar minis,uchar minig)
 140          {                                                                               //设置时钟时的动态显示函数      
 141   1                      
 142   1              //P0=0xff;
 143   1              P0=0x00;
 144   1              choose_we=1;
 145   1              choose_we=0;
 146   1              P0=table_du[hours];
 147   1              choose_du=1;
 148   1              choose_du=0;
 149   1              //P0=0xfe;
 150   1              P0=0x01;
 151   1              choose_we=1;
 152   1              choose_we=0;
 153   1              delay(3);
 154   1      
 155   1              //P0=0xff;
 156   1              P0=0x00;
 157   1              choose_we=1;
 158   1              choose_we=0;
 159   1              P0=table_du[hourg];
 160   1              choose_du=1;
 161   1              choose_du=0;
 162   1              //P0=0xfd;
 163   1              P0=0x02;
 164   1              choose_we=1;
 165   1              choose_we=0;
 166   1              delay(3);
 167   1              
 168   1              //P0=0xff;
 169   1              P0=0x00;
 170   1              choose_we=1;
 171   1              choose_we=0;
 172   1              //P0=0x40;
 173   1              P0=0xbf;
 174   1              choose_du=1;
 175   1              choose_du=0;
 176   1              //P0=0xfb;
 177   1              P0=0x04;
 178   1              choose_we=1;
 179   1              choose_we=0;
C51 COMPILER V8.05a   DZZ_THESAMEA                                                         09/13/2008 20:03:56 PAGE 4   

 180   1              delay(3);
 181   1              
 182   1              //P0=0xff;
 183   1              P0=0x00;
 184   1              choose_we=1;
 185   1              choose_we=0;
 186   1              P0=table_du[minis];
 187   1              choose_du=1;
 188   1              choose_du=0;
 189   1              //P0=0xf7;
 190   1              P0=0x08;
 191   1              choose_we=1;
 192   1              choose_we=0;
 193   1              delay(3);
 194   1              
 195   1              //P0=0xff;
 196   1              P0=0x00;
 197   1              choose_we=1;
 198   1              choose_we=0;
 199   1              P0=table_du[minig];
 200   1              choose_du=1;
 201   1              choose_du=0;
 202   1              //P0=0xef;
 203   1              P0=0x10;
 204   1              choose_we=1;
 205   1              choose_we=0;
 206   1              delay(3);                                       
 207   1      }
 208          
 209          void statedisplay(uchar du,uchar we)    //设置时钟时的静态显示函数 
 210          {
 211   1              P0=table_du[du];
 212   1              choose_du=1;
 213   1              choose_du=0;
 214   1              P0=we;
 215   1              choose_we=1;
 216   1              choose_we=0;                    
 217   1      }
 218          
 219          void settime_minig()                //可不可以用一个循环的方式呢? 
 220          {                                                       //分个位调整函数 
 221   1              uchar umost=16;
 222   1              while(1)
 223   1              {
 224   2                      umost--;
 225   2                      for(i=0;i<185;i++)
 226   2                      {
 227   3                              display_ss(4);
 228   3                      }
 229   2                      for(i=0;i<185;i++)
 230   2                      {       
 231   3                              display_wait2();
 232   3                      }
 233   2                      if(s3==0)
 234   2                      {
 235   3                              delay(10);
 236   3                              if(s3==0)
 237   3                              {
 238   4                                      num_minig++;

⌨️ 快捷键说明

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