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

📄 power2.lst

📁 51单片机按键控制数码管显示程序
💻 LST
字号:
C51 COMPILER V7.20   POWER2                                                                10/31/2008 20:10:50 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <INTRINS.H>
   3          /*
   4          #include "seg7.h"
   5          */
   6          #define   TIMERH  0XEE
   7          #define   TIMERL  0XFF
   8          #define   KEY1          0x20
   9          #define   KEY2          0x40
  10          
  11          
  12          /* 变量定义 */
  13          unsigned char cs;
  14          unsigned char dispram[4];
  15          unsigned char key, key_old, keycode,flag;
  16          bit bkey1, bkey2;
  17          /*声明*/
  18          void WriteSegData(unsigned char );
  19          void WriteCsData(unsigned char );
  20          void InitTimer1(void);
  21          void InitTimer0(void);
  22          void delay1 (unsigned int ms);
  23          
  24          /* 段码表 */
  25          /*unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,  // 0--9
  26                                                                           0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00, 0x40};       // A, b, C, d, E, F, 消隐, -*/
  27          /*unsigned char code seg_code[] = {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF,  // 0--9
  28                                                                           0xF7, 0xFC, 0xB9, 0xDE, 0xF9, 0xF1, 0x80, 0xC0};       // A, b, C, d, E, F, 消隐,   带点*/
  29          
  30          unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,    // 0--9
  31                                           0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF};   // 0.--9.
  32                                            
  33          
  34          /**************************************
  35          说明:   写段码数据
  36          seg:    待显示的段码数据, 0-9, A-F
  37          **************************************/
  38          
  39          void main(void)
  40          {
  41   1        P2=0XFF;
  42   1        P0=0XFF;
  43   1        P1=0xFF;
  44   1        
  45   1        key = P1&0xE0;
  46   1        key_old = key;
  47   1        bkey1 = bkey2 = 0;
  48   1      
  49   1        InitTimer1();
  50   1        InitTimer0();
  51   1        TR1=1;
  52   1        TR0=1;
  53   1      
  54   1      
  55   1         dispram[0]=0;
C51 COMPILER V7.20   POWER2                                                                10/31/2008 20:10:50 PAGE 2   

  56   1         dispram[1]=0;
  57   1         dispram[2]=9;
  58   1         dispram[3]=3;
  59   1         P1=dispram[2];
  60   1         
  61   1         while(1)
  62   1         {
  63   2           ;
  64   2      //  key=P1;
  65   2         }
  66   1      }
  67           
  68           
  69          /*初始化*/
  70          void InitTimer1(void)
  71          {
  72   1        cs=0;
  73   1        dispram[0]=dispram[1]=dispram[2]=dispram[3]=0;
  74   1        TMOD=0X90;
  75   1        TH1=TIMERH;
  76   1        TL1=TIMERL;
  77   1        
  78   1        EA=1;
  79   1        ET1=1;
  80   1      }
  81          void InitTimer0(void)
  82          {
  83   1        P1=0X00;
  84   1        TMOD=0X01;
  85   1        TH1=TIMERH;
  86   1        TL1=TIMERL;
  87   1        
  88   1        EA=1;
  89   1        ET0=1;
  90   1      }
  91            
  92          
  93          void Timer1IER(void) interrupt 3 using 2
  94          {
  95   1              /* 定时器重装 */
  96   1              TH1 = TIMERH;
  97   1              TL1 = TIMERL;
  98   1              /* 清中断标志 */
  99   1              TF1 = 0;
 100   1              /* 键盘检测 */
 101   1              key_old = key;
 102   1              key = P1 & 0xE0;
 103   1              /* 循环显示 */
 104   1              if(cs >= 3)
 105   1                      cs = 0;
 106   1              else
 107   1                      cs++;
 108   1              WriteSegData(dispram[cs]);
 109   1              WriteCsData(1<<cs);
 110   1              flag=1;
 111   1      }
 112          
 113          
 114          void Timer0IER(void) interrupt 1 using 1
 115          {
 116   1              unsigned char k1,k2,key,flag;
 117   1              TF0 = 0;
C51 COMPILER V7.20   POWER2                                                                10/31/2008 20:10:50 PAGE 3   

 118   1              P1|=0xE0;
 119   1          ;;;
 120   1              k1=(~P1)&0xE0;  //从P1口读取按键信息
 121   1              P1|=0xE0;
 122   1              if(dispram[0]>9)
 123   1              {dispram[0]=0;
 124   2              dispram[1]++;}
 125   1              if(dispram[1]>9)
 126   1              {dispram[1]=0;
 127   2              dispram[2]++;}
 128   1              if(dispram[2]>9)dispram[2]=0;   
 129   1              if(k1!=0xE0&&flag==1)
 130   1              {
 131   2                 k2=(~P1)&0xE0;
 132   2                 if(k1==k2)
 133   2                 {
 134   3      
 135   3                      ; ; ;//延时一段时间
 136   3                       delay1(255);
 137   3                      k2=(~P1)&0xE0;                  //再次读取信息
 138   3                      key=k1|k2;  //两次信息的交集            
 139   3                      if(key==0x20)
 140   3                       dispram[2]++;
 141   3                      else if(key==0x40)
 142   3                       dispram[1]++;
 143   3                      else if(key==0x80)
 144   3                       dispram[0]++;
 145   3                 }
 146   2              }
 147   1              else 
 148   1               ;
 149   1               if(k1==k2)flag=0;
 150   1               else  flag=1;
 151   1      
 152   1      }
 153          
 154          
 155          void WriteSegData(unsigned char seg)
 156          {
 157   1              seg = seg & 0x7F;
 158   1              /* 越界判断,并查找对应的段码 */
 159   1              if(seg > 20)
 160   1                      seg = 20;
 161   1              seg = seg_code[seg];
 162   1              /* 小数点 */
 163   1              if(seg & 0x80)
 164   1                      seg |= 0x80;
 165   1              /* 将段码数据送到数据总线上 */
 166   1              P0 = seg;
 167   1              /* 等待数据稳定 */
 168   1              _nop_();
 169   1              _nop_();
 170   1              /* P2.5-P2.7 = 000, 控制138译码器,使片选信号CS0=0 */
 171   1              P2 &= 0x1F;
 172   1              /* 延时,维持CS0为低电平 */
 173   1              _nop_();
 174   1              _nop_();
 175   1              /* P2.5-P2.7 = 111, CS0=1, 产生上升延脉冲,将数据总线上的数据锁存 */
 176   1              P2 |= 0xE0;
 177   1      }
 178          
 179          /**************************************
C51 COMPILER V7.20   POWER2                                                                10/31/2008 20:10:50 PAGE 4   

 180          说明:   写位选数据
 181          cs:             cs低四位为位选位,1: 有效,0: 无效
 182          **************************************/
 183          void WriteCsData(unsigned char cs)
 184          {
 185   1              /* 低四位有效,屏蔽高四位 */
 186   1              cs &= 0x0F;
 187   1              /* cs信号为低有效,将cs反向后送入数据总线 */
 188   1              P0 = ~cs;
 189   1              /* 等待数据稳定 */
 190   1              _nop_();
 191   1              _nop_();
 192   1              /* P2.5 = 0, P2.6-P2.7 = 0, 控制138译码器,使片选信号CS1 = 0 */
 193   1              P2 &= 0x3F;
 194   1              /* 延时,维持CS1为低电平 */
 195   1              _nop_();
 196   1              _nop_();
 197   1              /* P2.5-P2.7 = 111, CS0=1, 产生上升延脉冲,将数据总线上的数据锁存 */
 198   1              P2 |= 0xE0;
 199   1      }
 200          
 201          
 202          void delay1(unsigned int us)
 203          {
 204   1        while(us--);
 205   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    381    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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