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

📄 按键从右至左输入.lst

📁 150个 LY-51S单片机 c语言 程序合集
💻 LST
字号:
C51 COMPILER V7.06   __键_佑抑磷笫_入                                                      06/15/2010 18:32:26 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE __键_佑抑磷笫_入
OBJECT MODULE PLACED IN .\obj\按键从右至左输入.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 按键从右至左输入.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\按键从右至左输入.l
                    -st) OBJECT(.\obj\按键从右至左输入.obj)

stmt level    source

   1          /*-----------------------------------------------
   2            名称:单个独立按键依次输入控制
   3            论坛:www.doflye.net
   4            编写:shifang
   5            日期:2009.5
   6            修改:无
   7            内容:如计算器输入数据形式相同 从右至左
   8          ------------------------------------------------*/
   9          #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  10          
  11          sbit KEY1=P3^0;  //定义按键输入端口
  12          sbit KEY2=P3^1;
  13          sbit KEY3=P3^2;
  14          sbit KEY4=P3^3;
  15          sbit KEY5=P3^4;
  16          sbit KEY6=P3^5;
  17          sbit KEY7=P3^6;
  18          sbit KEY8=P3^7;
  19          
  20          
  21          #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
  22          sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
  23          sbit LATCH2=P2^3;//                 位锁存
  24          
  25          unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
  26          unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位
             -码
  27          unsigned char TempData[8]; //存储显示值的全局变量
  28          
  29          void DelayUs2x(unsigned char t);//us级延时函数声明 
  30          void DelayMs(unsigned char t); //ms级延时
  31          void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
  32          unsigned char KeyScan(void);//键盘扫描
  33          void Init_Timer0(void);//定时器初始化
  34          /*------------------------------------------------
  35                              主函数
  36          ------------------------------------------------*/
  37          void main (void)
  38          {
  39   1      unsigned char num,i,j;                  
  40   1      unsigned char temp[8];
  41   1      Init_Timer0();
  42   1      
  43   1      while (1)         //主循环
  44   1        {
  45   2      
  46   2      
  47   2       num=KeyScan();
  48   2       if(num)
  49   2         {
  50   3         if(i<8)
  51   3          {
  52   4           temp[i]=dofly_DuanMa[num];
  53   4               for(j=0;j<=i;j++)
C51 COMPILER V7.06   __键_佑抑磷笫_入                                                      06/15/2010 18:32:26 PAGE 2   

  54   4              TempData[7-i+j]=temp[j];
  55   4           }
  56   3              i++;
  57   3              if(i==9)//多出一个按键输入为了清屏 原本应该为8
  58   3                 {
  59   4                i=0;
  60   4            for(j=0;j<8;j++)//清屏
  61   4               TempData[j]=0;
  62   4             }
  63   3         }
  64   2        //Display(0,8); //显示全部8位
  65   2           //主循环中添加其他需要一直工作的程序
  66   2              
  67   2        }
  68   1      }
  69          /*------------------------------------------------
  70           uS延时函数,含有输入参数 unsigned char t,无返回值
  71           unsigned char 是定义无符号字符变量,其值的范围是
  72           0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  73           长度如下 T=tx2+5 uS 
  74          ------------------------------------------------*/
  75          void DelayUs2x(unsigned char t)
  76          {   
  77   1       while(--t);
  78   1      }
  79          /*------------------------------------------------
  80           mS延时函数,含有输入参数 unsigned char t,无返回值
  81           unsigned char 是定义无符号字符变量,其值的范围是
  82           0~255 这里使用晶振12M,精确延时请使用汇编
  83          ------------------------------------------------*/
  84          void DelayMs(unsigned char t)
  85          {
  86   1           
  87   1       while(t--)
  88   1       {
  89   2           //大致延时1mS
  90   2           DelayUs2x(245);
  91   2               DelayUs2x(245);
  92   2       }
  93   1      }
  94          /*------------------------------------------------
  95           显示函数,用于动态扫描数码管
  96           输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
  97           如输入0表示从第一个显示。
  98           Num表示需要显示的位数,如需要显示99两位数值则该值输入2
  99          ------------------------------------------------*/
 100          void Display(unsigned char FirstBit,unsigned char Num)
 101          {
 102   1            static unsigned char i=0;
 103   1                
 104   1      
 105   1                 DataPort=0;   //清空数据,防止有交替重影
 106   1             LATCH1=1;     //段锁存
 107   1             LATCH1=0;
 108   1      
 109   1             DataPort=dofly_WeiMa[i+FirstBit]; //取位码 
 110   1             LATCH2=1;     //位锁存
 111   1             LATCH2=0;
 112   1      
 113   1             DataPort=TempData[i]; //取显示数据,段码
 114   1             LATCH1=1;     //段锁存
 115   1             LATCH1=0;
C51 COMPILER V7.06   __键_佑抑磷笫_入                                                      06/15/2010 18:32:26 PAGE 3   

 116   1             
 117   1                 i++;
 118   1             if(i==Num)
 119   1                    i=0;
 120   1      
 121   1      
 122   1      }
 123          /*------------------------------------------------
 124                              定时器初始化子程序
 125          ------------------------------------------------*/
 126          void Init_Timer0(void)
 127          {
 128   1       TMOD |= 0x01;    //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                 
 129   1       //TH0=0x00;          //给定初值
 130   1       //TL0=0x00;
 131   1       EA=1;            //总中断打开
 132   1       ET0=1;           //定时器中断打开
 133   1       TR0=1;           //定时器开关打开
 134   1      }
 135          /*------------------------------------------------
 136                           定时器中断子程序
 137          ------------------------------------------------*/
 138          void Timer0_isr(void) interrupt 1 
 139          {
 140   1       TH0=(65536-2000)/256;            //重新赋值 2ms
 141   1       TL0=(65536-2000)%256;
 142   1       
 143   1       Display(0,8);       // 调用数码管扫描
 144   1      
 145   1      }
 146          
 147          /*------------------------------------------------
 148          按键扫描函数,返回扫描键值
 149          ------------------------------------------------*/
 150          unsigned char KeyScan(void)
 151          {
 152   1      /********************************************************/  
 153   1      if(!KEY1)  //如果检测到低电平,说明按键按下
 154   1          {
 155   2               DelayMs(10); //延时去抖,一般10-20ms
 156   2           if(!KEY1)     //再次确认按键是否按下,没有按下则退出
 157   2                 {
 158   3              while(!KEY1);//如果确认按下按键等待按键释放,没有则退出
 159   3                     {
 160   4                         return 1;
 161   4                              }
 162   3                 }
 163   2              }
 164   1      /********************************************************/  
 165   1      else if(!KEY2)  //如果检测到低电平,说明按键按下
 166   1          {
 167   2               DelayMs(10); //延时去抖,一般10-20ms
 168   2           if(!KEY2)     //再次确认按键是否按下,没有按下则退出
 169   2                 {
 170   3              while(!KEY2);//如果确认按下按键等待按键释放,没有则退出
 171   3                     {
 172   4                         return 2;
 173   4                              }
 174   3                 }
 175   2              }
 176   1      /********************************************************/  
 177   1      else if(!KEY3)  //如果检测到低电平,说明按键按下
C51 COMPILER V7.06   __键_佑抑磷笫_入                                                      06/15/2010 18:32:26 PAGE 4   

 178   1          {
 179   2               DelayMs(10); //延时去抖,一般10-20ms
 180   2           if(!KEY3)     //再次确认按键是否按下,没有按下则退出
 181   2                 {
 182   3              while(!KEY3);//如果确认按下按键等待按键释放,没有则退出
 183   3                     {
 184   4                         return 3;
 185   4                              }
 186   3                 }
 187   2              }
 188   1      /********************************************************/  
 189   1      else if(!KEY4)  //如果检测到低电平,说明按键按下
 190   1          {
 191   2               DelayMs(10); //延时去抖,一般10-20ms
 192   2           if(!KEY4)     //再次确认按键是否按下,没有按下则退出
 193   2                 {
 194   3              while(!KEY4);//如果确认按下按键等待按键释放,没有则退出
 195   3                     {
 196   4                         return 4;
 197   4                              }
 198   3                 }
 199   2              }
 200   1      /********************************************************/  
 201   1      else if(!KEY5)  //如果检测到低电平,说明按键按下
 202   1          {
 203   2               DelayMs(10); //延时去抖,一般10-20ms
 204   2           if(!KEY5)     //再次确认按键是否按下,没有按下则退出
 205   2                 {
 206   3              while(!KEY5);//如果确认按下按键等待按键释放,没有则退出
 207   3                     {
 208   4                         return 5;
 209   4                              }
 210   3                 }
 211   2              }
 212   1      /********************************************************/  
 213   1      else if(!KEY6)  //如果检测到低电平,说明按键按下
 214   1          {
 215   2               DelayMs(10); //延时去抖,一般10-20ms
 216   2           if(!KEY6)     //再次确认按键是否按下,没有按下则退出
 217   2                 {
 218   3              while(!KEY6);//如果确认按下按键等待按键释放,没有则退出
 219   3                     {
 220   4                         return 6;
 221   4                              }
 222   3                 }
 223   2              }
 224   1      /********************************************************/  
 225   1      else if(!KEY7)  //如果检测到低电平,说明按键按下
 226   1          {
 227   2               DelayMs(10); //延时去抖,一般10-20ms
 228   2           if(!KEY7)     //再次确认按键是否按下,没有按下则退出
 229   2                 {
 230   3              while(!KEY7);//如果确认按下按键等待按键释放,没有则退出
 231   3                     {
 232   4                         return 7;
 233   4                              }
 234   3                 }
 235   2              }
 236   1      /********************************************************/  
 237   1      else if(!KEY8)  //如果检测到低电平,说明按键按下
 238   1          {
 239   2               DelayMs(10); //延时去抖,一般10-20ms
C51 COMPILER V7.06   __键_佑抑磷笫_入                                                      06/15/2010 18:32:26 PAGE 5   

 240   2           if(!KEY8)     //再次确认按键是否按下,没有按下则退出
 241   2                 {
 242   3              while(!KEY8);//如果确认按下按键等待按键释放,没有则退出
 243   3                     {
 244   4                         return 8;
 245   4                              }
 246   3                 }
 247   2              }
 248   1      /********************************************************/  
 249   1      else
 250   1          return 0;
 251   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    356    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      10
   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 + -