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

📄 display.lst

📁 电子开发网培训用的51单片机内部培训代码
💻 LST
字号:
C51 COMPILER V7.06   DISPLAY                                                               05/14/2006 19:44:03 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE display.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //****************************************************
   2          //实现功能:把键盘输入的键盘码,用led显示出来
   3          //目标板:
   4          //****************************************************
   5          
   6          #include <reg51.h>
   7          
   8          #define p_key P1
   9          #define led_date P0
  10          #define choose_p P2
  11          unsigned char change(unsigned char i);
  12          unsigned int display_num=0;
  13          //******************时间延迟函数**********************
  14          //描  述:用指令实现延时一段时间
  15          //入口参数:int i,为时间延迟参数
  16          //出口参数:无
  17          //设计人:ycj
  18          //最后修改:时间(2006.4.26)  修改人(ycj)
  19          //****************************************************
  20          void delay_time(int i)
  21          {
  22   1       while(i)
  23   1        i--;
  24   1      }
  25          
  26          //******************按键扫描函数**********************
  27          //描    述:对4*4键盘进行扫描,程序只适合4*4键盘使用,
  28          //              键盘占用一组完整的i/o口,在使用这个程序前
  29          //              要宏定义p_key为用户实际连接键盘的i/o口 
  30          //              #define p_key Pn;//(n=0、1、2、3)
  31          //入口参数:无
  32          //返回参数:若有检测到按键就返回按键的编号,否则返回0xff
  33          //设计人:ycj
  34          //最后修改:时间(2006.4.26)修改人(ycj)
  35          //****************************************************
  36          unsigned char read_key(void)
  37          {
  38   1       unsigned char j,key,key_buf=0;
  39   1       p_key=0xff;
  40   1       //检测是否有建按下//
  41   1       p_key=0xf0;
  42   1       key=p_key;
  43   1       if(key==0xf0)
  44   1          {
  45   2               return(0xff);//没按键按下,返回0xff
  46   2              }
  47   1       //有按下,延时去抖//
  48   1       delay_time(5000);
  49   1       //确认是否有建按下//
  50   1       p_key=0xf0;
  51   1       key=p_key;
  52   1       if(key==0xf0)
  53   1          {
  54   2               return(0xff);//没按键按下,返回0xff
  55   2              }
C51 COMPILER V7.06   DISPLAY                                                               05/14/2006 19:44:03 PAGE 2   

  56   1       //真的有按键按下,扫描是哪一行有按键按下//
  57   1       for(j=0;j<4;j++)
  58   1       {key=p_key&(0x10<<j);
  59   2        if (key)
  60   2           {
  61   3                key=p_key;
  62   3               }
  63   2        else
  64   2           {
  65   3                key_buf=j*4;
  66   3                p_key=~(0x10<<j);//第j行的按键按下了,第j行输出0,其他的i/o口输出1
  67   3                //扫描是第j行的哪个按键按下//
  68   3                for(j=0;j<4;j++)
  69   3                      {
  70   4                       key=p_key&(1<<j);
  71   4               if (key)
  72   4                      {
  73   5                               key=p_key;
  74   5                              }
  75   4                       else
  76   4                      {
  77   5                               key_buf+=j;
  78   5                               return(key_buf);//扫描到按键的确定位置,返回按键的编号
  79   5                              }
  80   4                      }
  81   3               }
  82   2       }
  83   1      //没扫描到按键,//
  84   1      return(0xff);
  85   1      }
  86          //***************七段数码管显示函数*******************
  87          //描    述:对四位的扫描型七段数码管进行扫描显示,在使用
  88          //          前要定义一个全局变量display_num
  89          //          unsigned int display_num;
  90          //入口参数:unsigned int num,要显示的数字(0-9999)
  91          //返回参数:无
  92          //设计人:ycj
  93          //最后修改:时间(2006.4.26)修改人(ycj)
  94          //****************************************************
  95          void display(unsigned int num)
  96          {
  97   1       if(num<10000)
  98   1              {
  99   2               display_num=num;
 100   2          }
 101   1               choose_p|=3;//先关显示
 102   1               led_date=change(display_num/1000);//得到千位的数字,并转换成七段码型
 103   1               choose_p&=0xfe;//选通千位
 104   1               delay_time(50);//延时一段时间
 105   1           choose_p|=1;//关显示
 106   1           display_num=display_num%1000;
 107   1           led_date=change(display_num/100);//得到百位的数字,并转换成七段码型
 108   1               choose_p&=0xfd;//选通百位
 109   1               delay_time(50);//延时一段时间
 110   1               choose_p|=2;//关显示
 111   1               display_num=display_num%100;
 112   1           led_date=change(display_num/10);//得到十位的数字,并转换成七段码型
 113   1               choose_p&=0xfb;//选通十位
 114   1               delay_time(50);//延时一段时间
 115   1               choose_p|=4;//关显示
 116   1               led_date=change(display_num%10);//得到个位的数字,并转换成七段码型
 117   1               choose_p&=0xf7;//选通十位
C51 COMPILER V7.06   DISPLAY                                                               05/14/2006 19:44:03 PAGE 3   

 118   1               delay_time(50);//延时一段时间
 119   1               choose_p|=8;//关显示
 120   1      }
 121          //****************数字-码型转换函数*******************
 122          //描    述:把数字转换成七段码型,此程序仅配合共阳的七
 123          //          段数码管使用
 124          //入口参数:unsigned char i,要转换的数字(0-9),
 125          //返回参数:转换后的七段码型,0xff表示转换失败
 126          //设计人:ycj
 127          //最后修改:时间(2006.4.26)修改人(ycj)
 128          //****************************************************
 129          
 130          unsigned char change(unsigned char i)
 131           {
 132   1        switch(i)
 133   1              {
 134   2               case 0:
 135   2                     return(0xc0);//0的七段码型
 136   2               case 1:
 137   2                     return(0xf9);//1的七段码型
 138   2               case 2:
 139   2                     return(0xa4);//2的七段码型
 140   2               case 3:
 141   2                     return(0xb0);//3的七段码型
 142   2               case 4:
 143   2                     return(0x99);//4的七段码型
 144   2               case 5:
 145   2                     return(0x92);//5的七段码型
 146   2               case 6:
 147   2                     return(0x82);//6的七段码型
 148   2               case 7:
 149   2                     return(0xf8);//7的七段码型
 150   2               case 8:
 151   2                     return(0x80);//8的七段码型
 152   2               case 9:
 153   2                     return(0x90);//9的七段码型
 154   2           default:
 155   2                     return(0xff);//转换失败
 156   2              }
 157   1       }
 158          //*********************主函数*************************
 159          //描    述:把键盘输入的键盘码,用led显示出来
 160          //入口参数:无
 161          //返回参数:无
 162          //设计人:ycj
 163          //最后修改:时间(2006.4.26)修改人(ycj)
 164          //****************************************************
 165          int main(void)
 166          {unsigned char i;
 167   1      while(1)
 168   1              {
 169   2               i=read_key();//扫描键盘
 170   2               if(i<16)
 171   2                display((unsigned int)i);//有效的键盘值
 172   2               else
 173   2            display(0xffff);//数据无效
 174   2              }
 175   1      
 176   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.06   DISPLAY                                                               05/14/2006 19:44:03 PAGE 4   

   CODE SIZE        =    366    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       1
   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 + -