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

📄 zlg7290yanshi.lst

📁 用单片机级zlg7290做的一个简易计算器
💻 LST
字号:
C51 COMPILER V7.50   ZLG7290YANSHI                                                         11/26/2008 19:53:14 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7290YANSHI
OBJECT MODULE PLACED IN ZLG7290yanshi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ZLG7290yanshi.C BROWSE ORDER INTVECTOR(0X8000) DEFINE(Monitor,c51) DEBUG OB
                    -JECTEXTEND

line level    source

   1          #include<reg52.h>
   2          /*
   3          ZLG7290 演示程序
   4          */
   5          #include "I2C.h"
   6          #include "ZLG7290.h"
   7          //定义键盘中断标志,FlagINT=1 表示有键按下
   8          volatile bit FlagINT = 0;
   9          sbit rst=P1^0;
  10          /*
  11          函数:INT0_SVC()
  12          功能:ZLG7290 键盘中断服务程序
  13          说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
  14          */
  15          void INT0_SVC() interrupt 0
  16          {
  17   1      FlagINT = 1;
  18   1      }
  19          /*
  20          函数:Delay()
  21          功能:延时10ms~655.36s
  22          参数:
  23          t>0 时,延时(t*0.01)s
  24          t=0 时,延时655.36s
  25          说明:
  26          晶振采用11.0592MHz
  27          */
  28          void Delay(unsigned int t)
  29          {
  30   1      do
  31   1        {
  32   2      TH0 = 0xDC;
  33   2      TL0 = 0x00;
  34   2      TR0 = 1;
  35   2      while ( !TF0 );
  36   2      TF0 = 0;
  37   2      TR0 = 0;
  38   2      } while (--t);
  39   1      }
  40          /*
  41          函数:SystemInit()
  42          功能:系统初始化
  43          */
  44          void SystemInit()
  45          {
  46   1      I2C_Init();
  47   1      TMOD = 0x01;
  48   1      Delay(30); //等待ZLG7290 复位完毕
  49   1      }
  50          /*
  51          函数:ClearAll()
  52          功能:清除所有显示
  53          */
  54            
C51 COMPILER V7.50   ZLG7290YANSHI                                                         11/26/2008 19:53:14 PAGE 2   

  55          void ClearAll()
  56          {
  57   1      unsigned char x;
  58   1      for ( x=0; x<8; x++ )
  59   1      {
  60   2      ZLG7290_Download(x,0,0,31);
  61   2      }
  62   1      }
  63          /*
  64          函数:Test_DispBuf()
  65          功能:测试直接写显存
  66          */
  67            
  68          void Test_DispBuf()
  69          {
  70   1      code char DispDat[16] =
  71   1      {//字母AbCdEFgHiJkLoPqr 的字形数据
  72   1      0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,
  73   1      0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A
  74   1       };
  75   1      unsigned char n;
  76   1      unsigned char x;
  77   1      unsigned char reg;
  78   1      unsigned char dat;
  79   1      for ( n=0; n<16; n++ )
  80   1      {
  81   2      for ( x=0; x<8; x++ )
  82   2      {
  83   3      reg = ZLG7290_DpRam + x;
  84   3      dat = DispDat[n];
  85   3      ZLG7290_WriteReg(reg,dat);
  86   3      }
  87   2      Delay(50);
  88   2      }
  89   1      }
  90          /*
  91          函数:Test_Download()
  92          功能:测试下载数据功能
  93          */
  94           
  95          void Test_Download()
  96          {
  97   1      unsigned char x;
  98   1      bit dp;
  99   1      bit flash;
 100   1      char dat;
 101   1      //点亮所有数码管
 102   1      dp = 1;
 103   1      flash = 0;
 104   1      dat = 8;
 105   1      for ( x=0; x<8; x++ )
 106   1      {
 107   2      ZLG7290_Download(x,dp,flash,dat);
 108   2      }
 109   1      Delay(100);
 110   1      //依次显示所有字型
 111   1      dp = 0;
 112   1      flash = 0;
 113   1      for ( dat=0; dat<32; dat++ )
 114   1      {
 115   2      for ( x=0; x<8; x++ )
 116   2      {
C51 COMPILER V7.50   ZLG7290YANSHI                                                         11/26/2008 19:53:14 PAGE 3   

 117   3      ZLG7290_Download(x,dp,flash,dat);
 118   3      
 119   3       }
 120   2      Delay(50);
 121   2      }
 122   1      }
 123          /*
 124          函数:Test_ScanNum()
 125          功能:测试不同扫描位数
 126          说明:扫描位数越少,数码管就越亮
 127          */
 128           
 129          void Test_ScanNum()
 130          {
 131   1      unsigned char x;
 132   1      for ( x=0; x<8; x++ )
 133   1      {
 134   2      ZLG7290_Download(x,1,0,8);
 135   2      }
 136   1      Delay(100);
 137   1      for ( x=0; x<8; x++ )
 138   1      {
 139   2      ZLG7290_WriteReg(ZLG7290_ScanNum,x);
 140   2      Delay(100);
 141   2      }
 142   1      }
 143          /*
 144          函数:Test_Flash()
 145          功能:测试闪烁功能
 146          */
 147            
 148          void Test_Flash()
 149          {
 150   1      char dat = 0x01;
 151   1      unsigned char x;
 152   1      //显示01234567
 153   1      for ( x=0; x<8; x++ )
 154   1      {
 155   2      ZLG7290_Download(x,0,0,x);
 156   2      }
 157   1      //设置闪烁控制寄存器
 158   1      ZLG7290_WriteReg(ZLG7290_FlashOnOff,0x11);
 159   1      //闪烁演示
 160   1      for ( x=0; x<8; x++ )
 161   1      {
 162   2      ZLG7290_Flash(dat);
 163   2      
 164   2      dat <<= 1;
 165   2      Delay(300);
 166   2      }
 167   1      //数码管的8 个位一起闪烁
 168   1      ZLG7290_Flash(0xFF);
 169   1      Delay(350);
 170   1      //停止闪烁
 171   1      ZLG7290_Flash(0x00);
 172   1      Delay(50);
 173   1      }
 174          /*
 175          函数:Test_SegOnOff()
 176          功能:测试段寻址功能
 177          */
 178          
C51 COMPILER V7.50   ZLG7290YANSHI                                                         11/26/2008 19:53:14 PAGE 4   

 179          void Test_SegOnOff()
 180          {
 181   1      unsigned char seg;
 182   1      ClearAll();
 183   1      Delay(100);
 184   1      for ( seg=0; seg<64; seg++ )
 185   1      {
 186   2      ZLG7290_SegOnOff(seg,1);
 187   2      Delay(30);
 188   2      }
 189   1      Delay(100);
 190   1      for ( seg=0; seg<64; seg++ )
 191   1      {
 192   2      ZLG7290_SegOnOff(seg,0);
 193   2      Delay(30);
 194   2      }
 195   1      Delay(100);
 196   1      }
 197          /*
 198          函数:DispValue()
 199          功能:显示100 以内的数值
 200          参数:
 201          x:显示位置,取值0~6
 202          dat:要显示的数据,取值0~99
 203          */
 204          void DispValue(char x, unsigned char dat)
 205          {
 206   1      unsigned char d;
 207   1        d = dat / 10;
 208   1      ZLG7290_Download(x,0,0,d);
 209   1      d = dat - d * 10;
 210   1      ZLG7290_Download(x+1,0,0,d);
 211   1      }
 212          /*
 213          函数:DispHexValue()
 214          功能:以16 进制方式显示数值
 215          参数:
 216          x:显示位置,取值0~6
 217          dat:要显示的数据,取值0~255
 218          */
 219          void DispHexValue(char x, unsigned char dat)
 220          {
 221   1      unsigned char d;
 222   1      d = dat / 16;
 223   1      ZLG7290_Download(x,0,0,d);
 224   1      d = dat - d * 16;
 225   1      ZLG7290_Download(x+1,0,0,d);
 226   1      }
 227          /*
 228          函数:Test_Key()
 229          功能:测试按键功能
 230          */
 231          void Test_Key()
 232          {
 233   1      unsigned char KeyValue;
 234   1      unsigned char RepeatCnt;
 235   1      unsigned char FnKeyValue;
 236   1      ClearAll();
 237   1      EA = 0;
 238   1      IT0 = 1; //负边沿触发中断
 239   1      EX0 = 1; //允许外部中断
 240   1      EA = 1;
C51 COMPILER V7.50   ZLG7290YANSHI                                                         11/26/2008 19:53:14 PAGE 5   

 241   1      for (;;)
 242   1      {
 243   2      if ( FlagINT ) //如果有键按下
 244   2      {
 245   3      //清除中断标志
 246   3      FlagINT = 0;
 247   3      //读取键值、连击计数器值、功能键值
 248   3      ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
 249   3       ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
 250   3      ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
 251   3      //显示键值、连击计数器值、功能键值
 252   3      DispValue(0,KeyValue);
 253   3      DispHexValue(3,RepeatCnt);
 254   3      DispHexValue(6,FnKeyValue);
 255   3      }
 256   2      PCON |= 0x01; //使CPU 进入空闲状态,任一中断可唤醒
 257   2      }
 258   1      }
 259          void main()
 260          {
 261   1       rst=0;
 262   1       Delay(10);
 263   1       rst=1;
 264   1      SystemInit(); //系统初始化
 265   1      Test_DispBuf(); //测试直接写显存
 266   1      Test_Download(); //测试下载数据
 267   1      Test_ScanNum(); //测试不同扫描位数
 268   1      Test_Flash(); //测试闪烁功能
 269   1      Test_SegOnOff(); //测试段寻址功能
 270   1      Test_Key(); //测试键盘功能
 271   1      while (1);
 272   1      }


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


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

⌨️ 快捷键说明

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