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

📄 serialdac.lst

📁 51单片机C语言应用程序实例精讲,讲解了大量51单片机的应用知识,并附有程序和电路图.
💻 LST
字号:
C51 COMPILER V7.02b   SERIALDAC                                                            12/09/2005 11:54:47 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE SERIALDAC
OBJECT MODULE PLACED IN SerialDAC.OBJ
COMPILER INVOKED BY: E:\EDATOOLS\KEILC7.0\C51\BIN\C51.EXE SerialDAC.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************/
   2          /* Copyright (c) 2005, 通信工程学院      */
   3          /* All rights reserved.                  */
   4          /* 作    者:戴 佳                                           */
   5          /*****************************************/
   6          
   7          #include "SerialDAC.h"
   8          
   9          /* 延时t毫秒 */
  10          void delay(uint t)
  11          {
  12   1              uint i;
  13   1              while(t--)
  14   1              {
  15   2                      /* 对于12M时钟,约延时1ms */
  16   2                      for (i=0;i<125;i++)
  17   2                      {}
  18   2              }
  19   1      }
  20          
  21          /* 向MAX7219写入字节(8位)*/
  22          void SendChar (uchar ch)
  23          {
  24   1              uchar i,temp;
  25   1          _nop_();
  26   1          for (i=0;i<8;i++)
  27   1          {
  28   2                      temp=ch&0x80;
  29   2              ch=ch<<1;
  30   2              if(temp)
  31   2              {
  32   3                      DIN=1;
  33   3                      CLK=0;
  34   3                      CLK=1;
  35   3              }
  36   2              else
  37   2              {
  38   3                      DIN=0;
  39   3                      CLK=0;
  40   3                      CLK=1;
  41   3              }
  42   2          }
  43   1      }
  44          
  45          /* 向MAX7219写入字(16位)*/
  46          void WriteWord (uchar addr,uchar num)
  47          {
  48   1          LOAD=0;
  49   1          _nop_();
  50   1          SendChar(addr);
  51   1          _nop_();
  52   1          SendChar(num);
  53   1          _nop_();
  54   1          LOAD=1;                             // 锁存进相应寄存器
  55   1      }
C51 COMPILER V7.02b   SERIALDAC                                                            12/09/2005 11:54:47 PAGE 2   

  56          
  57          /* MAX7219初始化 */
  58          void InitDisplay (void)
  59          {
  60   1          WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
  61   1          WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
  62   1          WriteWord (Intensity,IntensityGrade);    // 设置亮度
  63   1          WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
  64   1      }
  65          
  66          /* 开始条件子函数 */
  67          void start(void)
  68          {
  69   1              SDA = 1;
  70   1              SCL = 1;
  71   1              _nop_();
  72   1              SDA = 0;
  73   1              _nop_();
  74   1      }
  75          
  76          /* 结束条件子函数 */
  77          void stop(void)
  78          {
  79   1              SDA = 0;
  80   1              SCL = 1;
  81   1              _nop_();
  82   1              SDA = 1;
  83   1              _nop_();
  84   1      }
  85          
  86          /* 应答子函数 */
  87          void ack(void)
  88          {
  89   1              SDA = 0;
  90   1              _nop_();
  91   1              SCL = 1;
  92   1              _nop_();
  93   1              SCL = 0;
  94   1      }
  95          
  96          /* 发送数据子程序,ch为要发送的数据 */
  97          void send(uchar ch)
  98          {
  99   1              uchar BitCounter = 8;                   //位数控制
 100   1              uchar tmp;                                              //中间变量控制
 101   1              do
 102   1              {
 103   2                      tmp = ch;
 104   2                      SCL = 0;
 105   2                      if ((tmp&0x80)==0x80)           //如果最高位是1
 106   2                              SDA = 1;
 107   2                      else
 108   2                              SDA = 0;
 109   2                      SCL = 1;
 110   2                      tmp = ch<<1;                            //左移
 111   2                      ch = tmp;
 112   2                      BitCounter--;
 113   2              }
 114   1              while(BitCounter);
 115   1              SCL = 0;
 116   1      }
 117          
C51 COMPILER V7.02b   SERIALDAC                                                            12/09/2005 11:54:47 PAGE 3   

 118          /* 串行DA转换子函数 */
 119          void DACOut(uchar ch)
 120          {
 121   1              start();                                                // 发送启动信号
 122   1              send(0x58);                                             // 发送地址字节
 123   1              ack();
 124   1              send(0x00);                                             // 发送命令字节
 125   1              ack();
 126   1              send(ch);                                               // 发送数据字节
 127   1              ack();
 128   1              stop();                                                 // 结束一次转换
 129   1      }
 130          
 131          /* 主函数 */
 132          void main(void)
 133          {
 134   1              InitDisplay ();                                                 // MAX7219初始化 
 135   1      
 136   1              WriteWord(DisplayTest,TestMode);                // 开始显示测试,点亮所有LED
 137   1              delay(2000);                                                    // 延时约2s
 138   1              WriteWord (DisplayTest,TextEnd);                // 退出显示测试模式
 139   1      
 140   1              while(1)
 141   1              {
 142   2                      uchar i,j;
 143   2                      /* 对数字0~255进行数模转换,并用数码管显示正在转换的数字 */
 144   2              for (i=0;i<=255;i++)
 145   2              {
 146   3                      delay(1000);                                    // 间隔约1s
 147   3                  InitDisplay();
 148   3                              for (j=0;j<=7;j++)
 149   3                                      DisBuffer[j]=((i>>j)&0x01);
 150   3                  
 151   3                              WriteWord (Digit0,DisBuffer[0]);
 152   3                  WriteWord (Digit1,DisBuffer[1]);
 153   3                  WriteWord (Digit2,DisBuffer[2]);
 154   3                  WriteWord (Digit3,DisBuffer[3]);
 155   3                  WriteWord (Digit4,DisBuffer[4]);
 156   3                  WriteWord (Digit5,DisBuffer[5]);
 157   3                  WriteWord (Digit6,DisBuffer[6]);
 158   3                  WriteWord (Digit7,DisBuffer[7]);
 159   3      
 160   3                              DACOut(i);
 161   3              }
 162   2                      delay(2000);                                            // 延时2s
 163   2          }
 164   1      }
 165          
 166          
 167          
 168          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    338    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V7.02b   SERIALDAC                                                            12/09/2005 11:54:47 PAGE 4   


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

⌨️ 快捷键说明

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