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

📄 7219.lst

📁 基于C51的通用人机界面程序
💻 LST
字号:
C51 COMPILER V7.08   7219                                                                  02/27/2006 16:50:27 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE 7219
OBJECT MODULE PLACED IN .\output\7219.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 7219.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\output\7219.obj)

line level    source

   1          /**************************************************************************
   2          7219.H
   3          
   4          7219接口函数
   5          ***************************************************************************/
   6          #define _7219_ 
   7          #include "general.h"
   8          
   9          //led显示码表,位置码表
  10          //static uchar code code_led_09[10]=    {0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};
  11          //                                                              0       1       2       3       4               5       6       7       8               9       
  12          #define TABLELEN        30
  13          static struct {uchar asc; uchar cod;}code code_led[TABLELEN] =
  14           {
  15           {0x00,0x7e}, {0x01,0x30}, {0x02,0x6d}, {0x03,0x79}, {0x04,0x33},
  16           {0x05,0x5b}, {0x06,0x5f}, {0x07,0x70}, {0x08,0x7f}, {0x09,0x7b},
  17           {'A',0x77}, {'S',0x5b}, {'C',0x4e}, {'o',0x1d}, {'E',0x4f},
  18           {'F',0x47}, {'G',0x5e}, {'O',0x7e}, {'P',0x67}, {'U',0x3e},
  19           {'r',0x05}, {'T',0x46}, {'.',0x80}, {'-',0x01}, {'=',0x09},
  20           {'^',0x63}, {'/',0x02}, {'"',0x22}, {' ',0x00}, {0xff,0xff}//度、分、秒、空格、无键
  21          };
  22                  
  23          static uchar code code_led_bit[10]={0x01,0x02,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
  24          //左高右低
  25          //显示缓冲区
  26          static uchar data buf_disp[10];
  27          
  28          //定义MAX7219寄存器
  29          #define nop             0x00
  30          #define digit0          0x01
  31          #define digit1          0x02
  32          #define digit2          0x03
  33          #define digit3          0x04
  34          #define digit4          0x05
  35          #define digit5          0x06
  36          #define digit6          0x07
  37          #define digit7          0x08
  38          #define decodemode      0x09
  39          #define intensity       0x0a
  40          #define scanlimit       0x0b
  41          #define shutdown        0x0c
  42          #define displaytest 0x0f     
  43          
  44          //定义硬件引脚
  45          sbit    clk=P1^2;
  46          sbit    load=P1^1;
  47          sbit    din=P1^0;
  48          
  49          /*---------------------------------------
  50          向一个MAX7219写8bit
  51          ---------------------------------------
  52          void sendbyte(uchar d)//
  53          {
  54              char i;
  55               for(i=8;i>=1;i--)
C51 COMPILER V7.08   7219                                                                  02/27/2006 16:50:27 PAGE 2   

  56                 {
  57                      din=d&0x80;
  58                      d=d<<1;
  59                      clk=1;
  60                      _nop_();
  61                                  _nop_();
  62                                  _nop_();
  63                                  _nop_();
  64                      clk=0;
  65                   }
  66          
  67          }*/
  68          /******************************************************
  69          操作两片7219,送32字节子函数
  70          *******************************************************/
  71          void send32(uchar add1,uchar dat1,uchar add2,uchar dat2)
  72          { 
  73   1              uchar tmp8,i,j;
  74   1              load=0;
  75   1              i=0;
  76   1              while(i<32)
  77   1              {
  78   2             if(i<8)          {tmp8=add1;}
  79   2             else if(i<16){tmp8=dat1;}
  80   2                 else if(i<24){tmp8=add2;}
  81   2                 else                 {tmp8=dat2;}
  82   2             for(j=8;j>=1;j--)
  83   2             {
  84   3                  din=tmp8&0x80;
  85   3                 tmp8=tmp8<<1;
  86   3                  clk=1;
  87   3                  _nop_();
  88   3                              _nop_();
  89   3                              _nop_();
  90   3                              _nop_();
  91   3                  clk=0;
  92   3             }
  93   2             i=i+8;
  94   2         }
  95   1         load=1;
  96   1      }
  97          
  98          
  99          
 100          /*---------------------------------------
 101          全部熄灭
 102          ---------------------------------------*/
 103          
 104          void cls(void)
 105          {
 106   1              unsigned int i;
 107   1              for(i=0x01;i<=0x08;i+=0x01)
 108   1              send32(i,0x00,i,0x00);
 109   1              
 110   1      }
 111          /******************************************
 112          关闭显示
 113          ******************************************
 114          void dispoff()
 115          {
 116          cls();
 117          load=1;
C51 COMPILER V7.08   7219                                                                  02/27/2006 16:50:27 PAGE 3   

 118          }
 119          /****************************************
 120          缓冲区操作,从pos开始填充n个c
 121          *****************************************
 122          void set_buf_disp(uchar c,uchar pos, uchar n) 
 123          {
 124                  uchar buf_pos;
 125                  dispoff();
 126                  for(buf_pos=pos-1; n>0; n--) 
 127                  {
 128                buf_disp[buf_pos]=c;
 129                buf_pos++;
 130                //if(buf_pos>=10) buf_pos=0;
 131             }
 132           }
 133          /*----------------------------------------
 134          初始化MAX7219,并清屏
 135          -----------------------------------------*/
 136          
 137          void init_max7219(void)
 138          {
 139   1      /*  send16(decodemode,0x00);            //设置无解码方式
 140   1          send16(intensity,0x0f);             //设置亮度为max
 141   1          send16(scanlimit,0x07);             //8段全扫描
 142   1          send16(shutdown,0x01);              //设置为正常模式
 143   1          send16(displaytest,0x01);           //进行LED测试,全部点亮
 144   1          delay(100);
 145   1          send16(displaytest,0x00);           //测试完毕
 146   1          cls();
 147   1      */
 148   1              cls();
 149   1              send32(decodemode,0x00,decodemode,0x00);        //设置解码方式:00-无,ff-BCD
 150   1              send32(intensity,0x04,intensity,0x0f);          //设置亮度为max(注意调节两片亮度一致)
 151   1              send32(scanlimit,0x01,scanlimit,0x07);          //高2位,低8位
 152   1              send32(shutdown,0x01,shutdown,0x01);            //设置为正常模式
 153   1              send32(displaytest,0x01,displaytest,0x01);              //进行LED测试,全部点亮
 154   1          delay(500);
 155   1          send32(displaytest,0x00,displaytest,0x00);          //测试完毕
 156   1              cls();
 157   1              
 158   1      
 159   1      }
 160          /******************************************
 161          查LED码表
 162          ******************************************/
 163          uchar get_seg(uchar c)
 164          {
 165   1              uchar i=0;
 166   1              while(code_led[i].asc != c) 
 167   1              i++;
 168   1              return(code_led[i].cod);
 169   1              //if(i>=TABLELEN)return(0x00);
 170   1       }
 171          /*****************************************
 172          将显存写寄存器显示         
 173          ****************************************
 174          void dispon()
 175          {
 176             //uchar dmask=0x01;                               // 显示位控制码
 177             uchar pos,dat;
 178             for(pos=0; pos<10; pos++) 
 179                  {
C51 COMPILER V7.08   7219                                                                  02/27/2006 16:50:27 PAGE 4   

 180                  dat=get_seg(buf_disp[pos]);                             // 输出字型 
 181                          if(pos<2){send32((pos+1),dat,nop,nop);}
 182                          else{send32(nop,nop,(pos-1),dat);}
 183                   
 184                  
 185                //delay(1);                                    // 延时1ms 
 186                //dmask=_crol_(dmask,1);                       // 修改位控制码 
 187             }
 188           }
 189          
 190           /*********************************************
 191           在第pos位寄存器写char
 192           **********************************************/
 193           void disp(uchar c,uchar pos)
 194           {
 195   1              uchar dat;
 196   1              dat=get_seg(c);
 197   1              if(pos<3)       {send32(pos,dat,nop,nop);}
 198   1              else            {send32(nop,nop,(pos-2),dat);}
 199   1      
 200   1       }
 201          /*******************************************
 202          在第pos位寄存器写char,加小数点,
 203          ********************************************/
 204          void disp_dp(uchar c,uchar pos)
 205          {
 206   1              uchar dat;
 207   1              dat=get_seg(c)+0x80;
 208   1              if(pos<3)       {send32(pos,dat,nop,nop);}
 209   1              else            {send32(nop,nop,(pos-2),dat);}
 210   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    284    ----
   CONSTANT SIZE    =     70    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       6
   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 + -