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

📄 main.lst

📁 AD转换的另外一个例子,对初学者很有帮助的一个例子
💻 LST
字号:
C51 COMPILER V8.05a   MAIN                                                                 08/08/2007 09:35:58 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst)
                    - OBJECT(main.obj)

line level    source

   1          //*************************************************************************************************
   2          //*************************************************************************************************
   3          //**<程序名>:简易函数发生器                                                                                                                                     **
   4          //**<功能>:根据键盘控制产生10~500Hz的正弦信号。                                                                                                **
   5          //**<版本说明>:这是第1.3版,LCD显示的是采点变化时计时器溢出的次数。                                                     **
   6          //**<作者>:程沛                                                                                                                                                                 **
   7          //**<完成时间>:2007年8月8日                                                                                                                                     **
   8          //**<联系方式>:superyongzhe@163.com                                                                                                                     **
   9          //*************************************************************************************************
  10          //*************************************************************************************************
  11          
  12          
  13          //*************************************************************************************************
  14          //*                                                                                                                                                                                               *
  15          //*                      ******************************头文件及宏定义**************************                           *
  16          //*                                                                                                                                                                                               *
  17          //*************************************************************************************************
  18          #include "includes.h"
  19          
  20          #define START P3_4              //0--开启DA转换;1--关闭DA转换。
  21          
  22          #define TIME0H 0xFF             //定时器0溢出时间:0.001ms
  23          
  24          #define TIME1H 0x3C
  25          #define TIME1L 0xB0             //定时器1溢出时间:50ms
  26          
  27          
  28          
  29          //*************************************************************************************************
  30          //*                                                                                                                                                                                               *
  31          //*                       ********************************全局变量******************************                          *
  32          //*                                                                                                                                                                                               *
  33          //*************************************************************************************************
  34          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  35          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DA转换>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  36          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  37          unsigned char uca_SinaCode[]={0x7F,0xA6,0xCA,0xE6,0xF8,0xFE,0xF8,0xE6,0xCA,0xA6,
  38                                                                    0x7F,0x58,0x34,0x18,0x06,0x00,0x06,0x18,0x34,0x58};
  39                                                                    //正弦函数采点。
  40          
  41          unsigned char uc_DACount=0;             //DA转换采点选择计数。
  42          
  43          unsigned long ul_TimeCount=0;   //DA转换定时器0计数。
  44          
  45          unsigned long ul_TimeMax=50;            //DA转换定时器0计数最大值,调整此值可以调整输出频率。
  46          
  47          
  48          
  49          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  50          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  51          //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  52          bit b_KeyShock=0;                                       //键盘防抖动标志位。
  53                                                                                  //当按键中断产生时,首先判断此位。
  54                                                                                  //0--执行键盘扫描及键码处理程序;1--不执行。
C51 COMPILER V8.05a   MAIN                                                                 08/08/2007 09:35:58 PAGE 2   

  55          
  56          bit b_KillShock=0;                                      //防抖标志清除位:0--不清除;1--清除。
  57          
  58          unsigned char uc_KillCount=1;           //抖动标志清除计数,使用定时器1。
  59          
  60          
  61          //*************************************************************************************************
  62          //*                                                                                                                                                                                               *
  63          //*             *****************************************主函数*************************************      *
  64          //*                                                                                                                                                                                               *
  65          //*************************************************************************************************
  66          void main()
  67          {
  68   1              vdInitialize();                                                  //初始化LCD。
  69   1              vWriteCMD(0x83);                                                 //输出提示信息。
  70   1              vShowChar("Frequency:");
  71   1      //      vShowFrequency(ul_TimeMax);
  72   1              vWriteCMD(0xC9);
  73   1              vShowChar("Count");
  74   1      
  75   1              P1=0x0F;                                                                 //初始化键盘。
  76   1      
  77   1              START=0;                                                                 //开启AD转换。
  78   1      
  79   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  80   1              IT0=1;                   //     中断方式:下降沿。
  81   1              EX0=1;                   //     开启外部中断。
  82   1              PX0=1;
  83   1      
  84   1      
  85   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化定时器>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  86   1              TMOD=0x02;               //定时器0:模式2;定时器1:模式0。
  87   1      
  88   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0,定时改变DA输出>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  89   1              TH0=TIME0H;
  90   1              TR0=1;
  91   1              ET0=1;
  92   1      
  93   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  94   1              TH1=TIME1H;
  95   1              TL1=TIME1L;
  96   1              TR1=1;                   //开启定时器1。
  97   1              ET1=1;                   //开定时器1中断。
  98   1      
  99   1              EA=1;                    //开启总中断。
 100   1      
 101   1              while(1);
 102   1      }
 103          
 104          //*************************************************************************************************
 105          //*                                                                                                                                                                                               *
 106          //*             ****************************外部中断0,用于开启键盘扫描及键码处理********************     *
 107          //*                                                                                                                                                                                               *
 108          //*************************************************************************************************
 109          void vINT0(void) interrupt 0
 110          {
 111   1              if(b_KeyShock==0)
 112   1                      {
 113   2                              vKeyProcess(ucKeyScan());                       //开启键盘扫描标志。
 114   2                              b_KeyShock=1;                                           //设置防抖动标志。
 115   2                      }
 116   1              else b_KeyShock=0;                                                      //如果有抖动则不执行键扫描,恢复防抖动标志。
C51 COMPILER V8.05a   MAIN                                                                 08/08/2007 09:35:58 PAGE 3   

 117   1      
 118   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
 119   1              if(b_KeyShock==1)
 120   1                      b_KillShock=1;                          //如果防抖动标志位开启则开启防抖动标志清除位,
 121   1                                                                              //300ms后清除防抖动标志。
 122   1      
 123   1      }
 124          
 125          
 126          //*************************************************************************************************
 127          //*                                                                                                                                                                                               *
 128          //*             **************************定时器0中断,定时改变DA输出*****************************      *
 129          //*                                                                                                                                                                                               *
 130          //*************************************************************************************************
 131          void vTimer0() interrupt 1
 132          {
 133   1              if(ul_TimeCount==ul_TimeMax)                       //此句,ul_TimeCount++;和ul_TimeCount=0;用于控制频率。
 134   1                      {
 135   2                      P0=uca_SinaCode[uc_DACount];
 136   2      
 137   2                      if(uc_DACount==19)                                         //此句用于采点选择循环。
 138   2                              uc_DACount=0;
 139   2                      else
 140   2                              uc_DACount++;
 141   2      
 142   2                      ul_TimeCount=0;
 143   2                      }
 144   1              else
 145   1                      ul_TimeCount++;
 146   1      } 
 147          
 148          
 149          //*************************************************************************************************
 150          //*                                                                                                                                                                                               *
 151          //*             ***************************定时器1中断,用于防抖动标志清除***************************     *
 152          //*                                                                                                                                                                                               *
 153          //*************************************************************************************************
 154          void vTimer1(void) interrupt 3
 155          {
 156   1              if(b_KillShock==1)
 157   1                      {
 158   2                      if(uc_KillCount==5)                      //当防抖动标志位为1时,计时300ms后清除抖动标志位。
 159   2                              {
 160   3                              b_KeyShock=0;
 161   3                              b_KillShock=0;
 162   3                              uc_KillCount=1;
 163   3                              }
 164   2                      else uc_KillCount++;
 165   2                      }
 166   1      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 167   1              TH1=TIME1H;
 168   1              TL1=TIME1L;
 169   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    321    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     30    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.05a   MAIN                                                                 08/08/2007 09:35:58 PAGE 4   

   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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