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

📄 display.lst

📁 89C54构成MC4511锁相环稳定性扫描测试仪器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 1   


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

stmt level    source

   1          #define  uchar unsigned char
   2          #define  uint  unsigned int 
   3          #include <AT89x51.H>
   4          #include <stdio.h>
   5          #include <intrins.h>
   6          #include <ctype.h> 
   7          #include <string.h>
   8          
   9          //给出显示闪烁初值
  10          #define  DB_val       100 
  11          
  12          //定义
  13          #define  reload_high  0x4c
  14          #define  reload_low   0xb0
  15          #define  reload_high1 0xfe
  16          #define  reload_low1  0x16
  17          
  18          sfr   dispdata=0x80;           //定义显示口
  19          sfr   keybord_row=0xA0;        //定义键盘的行和列地址
  20          sfr   keybord_col=0xB0;
  21          sfr   dataout=0x90;
  22          
  23          sbit  FLASH=dataout^0;
  24          sbit  F=keybord_row^5;
  25          sbit  RF=dataout^7;
  26          sbit  pulse_control=dataout^6;
  27          sbit  D5=dataout^5;
  28          sbit  D4=dataout^4;
  29          sbit  D3=dataout^3;
  30          sbit  D2=dataout^2;
  31          sbit  D1=dataout^1;
  32          sbit  D0=dataout^0;
  33          uchar RFOUT;
  34          uchar led_buf[4];            //显示缓冲区  
  35          uchar bdata flag;
  36          sbit  time_init=flag^0;
  37          sbit  auto_flush=flag^1;
  38          sbit  message_disp=flag^3;
  39          sbit  message_flag=flag^2;   //需刷新显示置位
  40          sbit  auto_scanl=flag^4;
  41          sbit  auto_scanh=flag^5;
  42          uint  message_time;
  43          bit   fre_init=0;    
  44          
  45          typedef struct {
  46          uchar tho,hun,dec,num;       //定义千,百,十,个;
  47          }fredispstruct;
  48          fredispstruct curfre,        //存当前频显
  49              freholder;               //存显示频点
  50          
  51          char code bcdmap[42][4]={
  52            "F999","1000","1001","1004","1005","1006","1009","1010",  
  53            "1011","1029","1030","1031","1049","1050","1051","1054",
  54            "1055","1056","1059","1060","1061","1064","1065","1066",
  55            "1069","1070","1071","1089","1090","1091","1109","1110",
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 2   

  56            "1111","1114","1115","1116","1119","1120","1121","1059",
  57            "1060","1061"
  58          };
  59          
  60          //函数声明
  61          void  init_sys(void);                     //初始化系统
  62          uchar get_ch(uchar);                      //键盘输入函数
  63          uchar * get_str(uchar *,uint );
  64          void  delay(int);                         //延迟时间函数
  65          bit   kb_hit(void);                       //判断是否有键按下
  66          void  put_0ff_leds(void);                 //关显示
  67          void  monitor(void);
  68          void  switch_power(void);                 //put off switch_power
  69          void  disp_data(void);
  70          void  set_led_buf(uchar,uchar,uchar);
  71          void  led_buf_auto_flush(void) reentrant;
  72          void  error_message(void);
  73          void  set_fre_disp(void);
  74          void  scan_fre_bufL(void);
  75          void  scan_fre_bufH(void);
  76          void  fre_outl(void);
  77          void  fre_outm(void);
  78          void  fre_outh(void);
  79          void  pulse_switch(void);
  80          void  fre_up(void);
  81          void  fre_down(void);
  82          bit   compare_fre_disp(void);
  83          
  84          /*********************************************************************
  85          函数原型:void put_off_leds(void)
  86          功    能:关闭LED显示器
  87          *********************************************************************/
  88          void put_off_leds(void)
  89          {
  90   1        dispdata=0x0f;
  91   1        message_disp=!message_disp;
  92   1      }
  93          
  94          //延时程序
  95          void delay(int delayValue)
  96          {
  97   1       int i;
  98   1       for(i=0;i<delayValue;i++)
  99   1        {};
 100   1      }
 101          
 102          /*********************************************************************
 103          函数原型:void init_sys(void)
 104          功    能:初始化系统
 105          *********************************************************************/
 106          void init_sys(void)
 107          {
 108   1        uint b,j;
 109   1        for(b=0;b<5;b++)
 110   1        {
 111   2          for(j=0;j<=DB_val;j++)                //系统初始化,开显示并显示8888
 112   2           {
 113   3                delay(25);
 114   3            dispdata=0xe8;
 115   3            delay(25);
 116   3            dispdata=0xd8;
 117   3            delay(25);
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 3   

 118   3            dispdata=0xb8;
 119   3            delay(25);
 120   3            dispdata=0x78;
 121   3           };
 122   2          for(j=0;j<=DB_val;j++)                //系统初始化,关显示         
 123   2           {
 124   3                delay(100);
 125   3                dispdata=0xf8;
 126   3           };
 127   2         }
 128   1      }
 129          
 130          /*********************************************************************
 131          函数原型:void get_ch(void)
 132          功    能:读出按键值
 133          *********************************************************************/
 134          uchar get_ch(void)
 135          {
 136   1        uchar row=0,col=0;
 137   1        uchar mask;
 138   1        uchar rmask;
 139   1        uchar pic;
 140   1        keybord_row=0xff;
 141   1        keybord_col=0xff;
 142   1        mask=keybord_row&0xfe;    //使第1列线为0
 143   1        rmask=keybord_row&0xdf;
 144   1        if(!kb_hit()) return(0);  //无键按下,输入不成功,返回0。
 145   1        //分析按键所在的列号。
 146   1        keybord_row=mask;         //使第1列线为0
 147   1          while(((keybord_col&0x1f)==0x1f)&&(mask>rmask))
 148   1            {
 149   2               ++col;
 150   2               mask=_crol_(mask,1);
 151   2               keybord_row=mask;
 152   2            }
 153   1        //分析按键所在的行号
 154   1        pic=keybord_col&0x1f; 
 155   1        mask=0x01;
 156   1          while(pic&mask)
 157   1            {
 158   2              ++row;
 159   2              mask=_crol_(mask,1);    
 160   2            }
 161   1        //等待按键释放。
 162   1        while((keybord_col&0x1f)!=0x1f);
 163   1        //delay(20);
 164   1        keybord_row=keybord_row|0x1f;
 165   1        //计算按键编码值并以ASCII码值返回
 166   1        pic=(row*5)+col;
 167   1        if(pic<10) pic+='0';
 168   1        else  pic+='A'-10;
 169   1       switch(pic)
 170   1        {
 171   2         case '0':pic='9';break;
 172   2         case '1':pic='8';break;
 173   2         case '2':pic='7';break;
 174   2         case '5':pic='6';break;
 175   2         case '6':pic='5';break;
 176   2         case '7':pic='4';break;
 177   2         case 'A':pic='3';break;
 178   2         case 'B':pic='2';break;
 179   2         case 'C':pic='1';break;
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 4   

 180   2         case 'F':pic='0';break;
 181   2         case '3':pic='A';break;
 182   2         case '4':pic='B';break;
 183   2         case '8':pic='C';break;
 184   2         case '9':pic='D';break;
 185   2         case 'D':pic='E';break;
 186   2         case 'E':pic='F';break;
 187   2         default:break;
 188   2        }
 189   1       return(pic);
 190   1      }
 191          
 192          /*********************************************************************
 193          函数原型:* get_str(uchar * str, uchar len);
 194          功    能:从矩阵键盘输入长度为len的字符串,并将其储在由指针str所指向的空间,
 195          并返回该指针。
 196          *********************************************************************/
 197          uchar * get_str(uchar * str, uint len)
 198          {
 199   1      //uchar data i;
 200   1      uchar data ch;
 201   1      uchar data keybord_buf[4];                //键盘缓冲区
 202   1      uchar data ledbuf_pos=0,keybuf_pos=0;     //消除显示缓冲区 
 203   1      set_led_buf(0x0f,0,4);                    //关显示 
 204   1      while(keybuf_pos<len)
 205   1       {
 206   2        disp_data();
 207   2        ch=get_ch();
 208   2      /*如果成功,将显示缓冲区原字符向左滚动一位*/
 209   2      /*并将新字符放在显示缓冲区末尾,并送键盘缓冲区*/
 210   2       if(isdigit(ch))
 211   2        {
 212   3         if(ledbuf_pos>3) ledbuf_pos=3;
 213   3          led_buf[ledbuf_pos++]=ch;
 214   3         keybord_buf[keybuf_pos++]=ch;
 215   3        }
 216   2       }
 217   1      //for(i=0;i<100;i++) 
 218   1      disp_data();                //短时显示最后输入的字符
 219   1      memcpy(str,keybord_buf,len);
 220   1      return(str);
 221   1      }
 222          
 223          /*********************************************************************
 224          函数原型:bit kb_hit(void);
 225          功    能:按键
 226          *********************************************************************/
 227          bit kb_hit(void)
 228          {
 229   1        uchar kb_row;
 230   1        uchar kb_col;
 231   1        keybord_row=0x0ff;                    
 232   1        keybord_col=0x0ff;
 233   1        kb_row=keybord_row&0xe0;                   //往矩正列线送0
 234   1        keybord_row=kb_row;  
 235   1        kb_col=keybord_col;                        //读出行线状态
 236   1        if((keybord_col&0x1f)==0x1f)               //输入并见检查行线
 237   1         return((bit) 0);                          //行线为1则还回0
 238   1         delay(100);
 239   1        if((keybord_col&0x1f)==0x1f)
 240   1        return((bit) 0);
 241   1       return((bit) 1);                       
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 5   

 242   1      }
 243          
 244          /*********************************************************************
 245          函数原型:void monitor(void)
 246          功    能:
 247          *********************************************************************/
 248          void monitor(void)
 249          {
 250   1        uchar ccommand;
 251   1        while(1)
 252   1        {
 253   2          if(message_disp)                                 //判断显示
 254   2          disp_data();
 255   2          if(message_time==0)
 256   2              {
 257   3               message_flag=0;
 258   3               auto_flush=1;
 259   3              }
 260   2              if((ccommand=get_ch()))
 261   2              {
 262   3               message_flag=0;
 263   3               message_time=0;
 264   3              }
 265   2              switch(ccommand)
 266   2              {
 267   3               //case 'M':if(!compare_fre_disp())
 268   3                    //     error_message(); break;
 269   3               case 'F':set_fre_disp();   break;
 270   3               case 'A':switch_power();   break;
 271   3           case 'C':put_off_leds();   break;                 
 272   3               case 'B':scan_fre_bufL();  break;                 //扫描频率缓冲区中的值
 273   3               case 'D':scan_fre_bufH();  break; 
 274   3               case 'I':fre_outl();       break;
 275   3               case 'H':fre_outm();       break;
 276   3               case 'G':fre_outh();       break;
 277   3           case 'E':pulse_switch();   break;
 278   3               case 'O':fre_up();         break;
 279   3               case 'N':fre_down();       break;
 280   3               default:break;
 281   3               }
 282   2        }
 283   1      }
 284          
 285          /*********************************************************************
 286          函数原型:void disp_data(void)
 287          功    能:将当前显示缓冲区的字符输出到LED显示
 288          *********************************************************************/
 289          void disp_data(void)
 290          {
 291   1         uchar dmask=0xef;
 292   1         uchar pos;
 293   1         for(pos=0;pos<4;pos++)
 294   1           {
 295   2             dispdata=(led_buf[pos]&0x0f)|(dmask&0xf0);
 296   2             delay(200);  
 297   2                 dispdata=0xff;
 298   2                 delay(10);
 299   2                 dmask=_crol_(dmask,1);
 300   2               auto_flush=0;
 301   2               };
 302   1      }
 303          
C51 COMPILER V7.06   DISPLAY                                                               02/21/2006 10:19:59 PAGE 6   

 304          /*********************************************************************
 305          函数原型:void timer0(void)
 306          功    能:中断服务程序
 307          *********************************************************************/
 308          void timer0(void) interrupt 1 using 2
 309          {
 310   1        static uchar click;           //中断次数变量
 311   1        static uchar scanl;
 312   1        static uchar scanh;
 313   1        static uchar out;
 314   1        TH0=reload_high;
 315   1        TL0=reload_low;
 316   1        if(auto_flush) led_buf_auto_flush();
 317   1        //if(!fre_init) return;           //如果设置不成功,则返回
 318   1        ++click;
 319   1        if(click>=10)
 320   1         { 
 321   2          click=0;
 322   2              //根据消息标志决定是否将消息显示时间减少一秒。
 323   2              if(message_flag&&message_time)  --message_time;
 324   2         if(auto_flush) led_buf_auto_flush();
 325   2         }
 326   1        ++scanl;
 327   1        if(scanl>=60)
 328   1         {
 329   2          scanl=0;
 330   2          if(!auto_scanl)
 331   2          {
 332   3               dataout=(out&0x3f)|(dataout&0xc0);
 333   3           freholder.tho=bcdmap[out][0];
 334   3           freholder.hun=bcdmap[out][1];
 335   3           freholder.dec=bcdmap[out][2];
 336   3           freholder.num=bcdmap[out][3];
 337   3               led_buf_auto_flush();

⌨️ 快捷键说明

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