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

📄 saomiao.lst

📁 通过C语言控制数码管动态扫描显示
💻 LST
字号:
C51 COMPILER V7.50   SAOMIAO                                                               04/05/2009 00:13:18 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          //#include <intrins.h>
   3          
   4          #define uint  unsigned int
   5          #define uchar unsigned char
   6          
   7          uchar code dutable[]={                          //共阴极段选表  数码管段选 0~9
   8                                  0xc0,0xf9,0xa4,0xb0,0x99,
   9                                  0x92,0x82,0xf8,0x80,0x90
  10                               };  
  11          
  12          uchar code wetable[]={0x10,0x20,0x40,0x80};     //位选表
  13          
  14          uint wei_num;             //四位数码管位选变量
  15          
  16          uint     Set_key_num;     //设置按钮的按下次数
  17          
  18          uint fen,miao;    //定义时间格式变量   12:34
  19          uint Time_num;
  20          
  21          sbit Set_key=P1^5;   //设置按钮
  22          sbit Inc_key=P1^6;   //增1按钮
  23          sbit Dec_key=P1^7;   //减1按钮
  24          
  25          ////////////////////
  26          //  延时函数
  27          void delay(uint z)      
  28          {
  29   1              uint x,y;
  30   1              for(x=110;x>0;x++)
  31   1                      for(y=z;y>0;y--);
  32   1      }
  33          
  34          
  35          ////////////////////
  36          //  数码管显示函数
  37          void display(uint ifen,uint imiao)
  38          {
  39   1              uint shi_fen,ge_fen,shi_miao,ge_miao;
  40   1      
  41   1              shi_fen = ifen/10;
  42   1              P0 = wetable[wei_num];
  43   1              P2 = dutable[shi_fen];
  44   1              wei_num++;
  45   1              delay(10);
  46   1              
  47   1              ge_fen = ifen%10;
  48   1              P0 = wetable[wei_num];
  49   1              P2 = dutable[shi_fen];
  50   1              wei_num++;
  51   1              delay(10);
  52   1                      
  53   1              shi_miao = imiao/10;
  54   1              P0 = wetable[wei_num];
  55   1              P2 = dutable[shi_fen];
C51 COMPILER V7.50   SAOMIAO                                                               04/05/2009 00:13:18 PAGE 2   

  56   1              wei_num++;
  57   1              delay(10);
  58   1              
  59   1              ge_miao = imiao%10;
  60   1              P0 = wetable[wei_num];
  61   1              P2 = dutable[shi_fen];
  62   1              wei_num++;      
  63   1              delay(10);
  64   1              
  65   1              wei_num = 0;
  66   1                      
  67   1      }
  68          
  69          ////////////////////
  70          //  初始化函数
  71          void init()
  72          {
  73   1              Time_num = 0;   //清0倒计时中断次数
  74   1              wei_num = 0;    //清0四位数码管位数变量
  75   1      
  76   1              P0 = 0xfe;      //P0口是位选 第一位选通    0 liang
  77   1              P2 = 0x11;      //P1口是段选 初次运行不显示数值    1 liang
  78   1      
  79   1              Set_key=1;      //按键接口设置高电平
  80   1              Inc_key=1;   
  81   1              Dec_key=1;   
  82   1      
  83   1              Set_key_num=0;    //清0  即:按了0次  
  84   1      
  85   1              fen=0;            //分、秒清0
  86   1              miao=0;
  87   1      
  88   1      
  89   1              /////////////////
  90   1              //动态扫描定时器初始化
  91   1              TMOD=0x01;   
  92   1              TH0=(65536-50000)/256;   //50ms 
  93   1              TL0=(65535-50000)%256;  
  94   1              EA=1;  //开外部中断     
  95   1              ET0=1; //开始定时器0中断
  96   1              TR0=1; //启动定时器0
  97   1      
  98   1              /////////////////
  99   1              //时钟定时器初始化
 100   1              TMOD=0x01;   
 101   1              TH1=(65536-50000)/256;   //50ms 
 102   1              TL1=(65535-50000)%256;  
 103   1              EA=1;   
 104   1      
 105   1       
 106   1      }
 107          
 108          
 109          ////////////////////
 110          //  入口函数
 111          void main()
 112          {
 113   1              init();
 114   1              while(1)
 115   1              {
 116   2                      ////////////////////
 117   2                      //倒计时处理
C51 COMPILER V7.50   SAOMIAO                                                               04/05/2009 00:13:18 PAGE 3   

 118   2                      if(Time_num == 20)
 119   2                      {
 120   3                              Time_num = 0;
 121   3                              if(fen==0)
 122   3                              {
 123   4                                      if(miao==0)
 124   4                                              ;       /////////////////////////
 125   4                              }
 126   3                              if(miao==-1)
 127   3                              {
 128   4                                      miao=59;
 129   4                                      fen--;
 130   4                              }
 131   3                              miao--;         
 132   3                      }
 133   2                      ////////////////////
 134   2                      //  "设置"键按下        
 135   2                      if(Set_key!= 1)             
 136   2                      {   
 137   3                              delay(10);        
 138   3                              if(Set_key!= 1)
 139   3                              {   
 140   4                                      while(Set_key!= 1); 
 141   4                                      ET1=0;       //Set时  关闭倒计时
 142   4                                      TR1=0; 
 143   4                                      if(Set_key_num>=3)   //按了3次
 144   4                                      {
 145   5                                              Set_key_num = 0;
 146   5                                              ET1=1;       //开始倒计时
 147   5                                              TR1=1;  
 148   5                                      }
 149   4                                      Set_key_num++;       //次数加1
 150   4                              }
 151   3                      }   
 152   2                      ////////////////////
 153   2                      //  "增加"键按下
 154   2                      if(Inc_key!= 1)              
 155   2                      {   
 156   3                              delay(10);       
 157   3                              if(Inc_key!= 1)            
 158   3                              {   
 159   4                                      while(Inc_key!= 1); 
 160   4                                      if(Set_key==1)  //按了1次,调分钟
 161   4                                      {
 162   5                                              if(fen==60)
 163   5                                                      fen=0;
 164   5                                              else
 165   5                                                      fen++;
 166   5                                      }
 167   4                                      if(Set_key==2)
 168   4                                      {
 169   5                                              if(miao==60)
 170   5                                                      miao=0;
 171   5                                              else
 172   5                                                      miao++;
 173   5                                      }
 174   4                              }
 175   3                      }   
 176   2                      ////////////////////
 177   2                      //  "降低"键按下
 178   2                      if(Dec_key!= 1)               
 179   2                      {   
C51 COMPILER V7.50   SAOMIAO                                                               04/05/2009 00:13:18 PAGE 4   

 180   3                              delay(10);      
 181   3                              if(Dec_key!= 1)         
 182   3                              {   
 183   4                                      while(Dec_key!= 1); 
 184   4                                      if(Set_key==1)  //按了1次,调秒钟
 185   4                                      { 
 186   5                                              if(fen==-1)
 187   5                                                      fen=60;
 188   5                                              else
 189   5                                                      fen--;                                                          
 190   5                                      }
 191   4                                      if(Set_key==2)
 192   4                                      {
 193   5                                              if(miao==-1)
 194   5                                                      miao=0;
 195   5                                              else
 196   5                                                      miao--; 
 197   5                                      }
 198   4                              }
 199   3                      }  
 200   2              }
 201   1      }
 202          
 203          
 204          ////////////////////
 205          //  动态扫描中断源
 206          void timer0() interrupt 1
 207          {
 208   1              TH0=(65536-50000)/256;   //50ms 
 209   1              TL0=(65535-50000)%256;  
 210   1      //      display(fen,miao);
 211   1              display(12,34);
 212   1      }
 213          
 214          
 215          
 216          ////////////////////
 217          //  秒数时钟中断源
 218          void timer1() interrupt 3
 219          {
 220   1              TH1=(65536-50000)/256;   //50ms 
 221   1              TL1=(65535-50000)%256;  
 222   1      
 223   1              Time_num++;
 224   1      }
 225          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    599    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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