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

📄 key_display.lst

📁 motor_control.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   KEY_DISPLAY                                                           09/06/2007 19:43:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KEY_DISPLAY
OBJECT MODULE PLACED IN key_display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key_display.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**************COPYRIGHT RESERVED BY DU************************/
   2          //key_display.c
   3          #include "c8051F020.h"
   4          #include "intrins.h"
   5          #include "CH452CMD.H"   // 定义常用命令码及外部子程序
   6          #include "pin.h"
   7          #include "math.h"
   8          
   9          
  10          #ifndef    __UNSIGNEDS
  11          #define    __UNSIGNEDS
  12          #define     uint      unsigned int
  13          #define     uchar     unsigned char
  14          #define     ushort    unsigned short
  15          #define     ulong         unsigned long
  16          #endif
  17          
  18          /***********关看门狗*********************/
  19          void Reset_Sources_Init()
  20          {
  21   1          WDTCN     = 0xDE;
  22   1          WDTCN     = 0xAD;
  23   1      
  24   1      }
  25          
  26          
  27          /***********系统时钟4M*********************/
  28          void Oscillator_Init()
  29          {
  30   1          OSCICN    = 0x05;
  31   1      }
  32          
  33          
  34          
  35          /***********ADC输入初始化,改变AMX0SL=0x01-0x07为AIN1-AIN7*********************/
  36          void ADC_Init()
  37          {        
  38   1          AMX0SL    = 0x01;   //AIN1作为AD输入,30管脚  
  39   1          //ADC0CF    = 0x08;
  40   1          ADC0CN    = 0x80;    //ADC使能
  41   1      
  42   1      }
  43          /***********DAC输出初始化*********************/
  44          void DAC_Init()
  45          {
  46   1          DAC0CN    = 0x80;     //DAC使能
  47   1      
  48   1      }
  49          
  50          /***********参考电压初始化*********************/
  51          void Voltage_Reference_Init()
  52          {
  53   1          REF0CN    = 0x03;     //内部参考电压2.5V
  54   1      
  55   1      }
C51 COMPILER V8.02   KEY_DISPLAY                                                           09/06/2007 19:43:26 PAGE 2   

  56          /***输出占空比不同的PWM可以设定P0.0,0.1...改变PCA0CPH0.PCA0CPM1改变占空比 *****/
  57          void PCA_Init()
  58          {
  59   1          PCA0CN    = 0x40;     /*允许PCA定时器/计数器*/
  60   1              PCA0L     = 0x00;
  61   1              PCA0H     = 0x00;//PCA0MD    = 0x80;
  62   1          PCA0CPM0  = 0x43;    /*8位PWM方式,当CCF0=1时,允许辅捉/比较标志的中断申请*/
  63   1              PCA0CPL0  = 0x00;       /*置初值*/
  64   1          PCA0CPH0  = 0x80;   //  PCA0CPH0  = 0xC0    //PCA0MD = 0x01;        /*PCA定时器/计数器溢出中断禁止*/
  65   1              PCA0CPM1  = 0x43;       /*8位PWM方式,当CCF1=1时,允许辅捉/比较标志的中断申请*/
  66   1              PCA0CPL1  = 0x00;       /*置初值*/
  67   1          PCA0CPH1  = 0x80;
  68   1      
  69   1      
  70   1      
  71   1      }
  72          
  73          
  74          
  75          /***定时器0,1初始化 TMOD设置几位什么方式CKCON是时基是系统的几倍*****/
  76          void Timer_Init()
  77           {
  78   1              TR0=0;                                                          //关定时器0
  79   1              TR1=0;                                                          //关定时器1
  80   1              TMOD      = 0x11;       
  81   1          CKCON=0x00;                                                 //定时器1的时基与系统1/12
  82   1              TH0=0x7D        ;                                               //全程定时
  83   1              TL0=0xCC        ;
  84   1              TH1=0x7D        ;                                               //初值  1s
  85   1              TL1=0xFB        ;
  86   1      }
  87          
  88          
  89          /***********延时n ms******************/
  90          void delayms(uint n)       
  91          {       
  92   1              uint i,j,k;
  93   1              for(i=0;i<n;i++)
  94   1                      for(j=0;j<200;j++)
  95   1                              for(k=0;k<10;k++)
  96   1                                      _nop_();
  97   1      
  98   1      }
  99          
 100          
 101          /***********ADC输入实现****************uchar i,uchar j*****/
 102          float AD_IN(void)                                                                                          
 103          {
 104   1      //    float tmp;
 105   1          uint temp;
 106   1        // AMX0P     = 0x10;
 107   1          delayms(10);
 108   1          AD0BUSY=1;
 109   1          while(AD0INT == 0);
 110   1          temp=ADC0H<<8;
 111   1          temp+=ADC0L;
 112   1          // tmp=(2.5*(temp/4095.0))*1000;
 113   1          //return(tmp);
 114   1          return(temp);
 115   1      }
 116          
 117          
C51 COMPILER V8.02   KEY_DISPLAY                                                           09/06/2007 19:43:26 PAGE 3   

 118          /***********DAC输出实现*********************/
 119          void DA_OUT(uint dat)                                                                                                                     
 120          { 
 121   1        uint dah,dal;
 122   1        dah=dat>>8;
 123   1        dal=dat&0x00FF;
 124   1        DAC0L=(uchar)dal;
 125   1        DAC0H=(uchar)dah;
 126   1          
 127   1      }
 128          
 129          
 130          /***********CH452写入*********************/
 131          void CH452_Write(ushort cmd)
 132          {
 133   1              uchar i;
 134   1              DISABLE_KEY_INTERRUPT;            //禁止键盘中断,防止传输过程中被CH452中断而进入中断服务程序中再次传输
 135   1              CH452_LOAD_CLR;                 //命令开始,LOAD=0
 136   1              CH452_LOAD_D_OUT;               // 设置LOAD为输出方向
 137   1              CH452_DOUT_D_IN;                // 设置DOUT为输入方向
 138   1              CH452_DIN_D_OUT;                // 设置DIN为输出方向
 139   1              CH452_DCLK_D_OUT;               // 设置DCLK为输出方向
 140   1              for(i=0;i!=12;i++)                              //送入12位数据,低位在前
 141   1              {
 142   2               if (cmd&1) {CH452_DIN_SET;}
 143   2                  else {CH452_DIN_CLR;}  // 输出位数据
 144   2                                         // 另外的表达CH452_DIN=cmd&1;
 145   2               CH452_DCLK_CLR;
 146   2               cmd>>=1;
 147   2               DELAY_1US;
 148   2               DELAY_1US;     
 149   2                 CH452_DCLK_SET;             //上升沿有效
 150   2              }
 151   1              CH452_LOAD_SET;         //加载数据,LOAD上升沿
 152   1              DELAY_1US;                              //命令数据加载周期不小于6US,CH451不需要该周期
 153   1              DELAY_1US;
 154   1              DELAY_1US;
 155   1              DELAY_1US;
 156   1              DELAY_1US;
 157   1              DELAY_1US;
 158   1              DELAY_1US;                              //命令数据加载周期不小于6US,CH451不需要该周期
 159   1              DELAY_1US;
 160   1              DELAY_1US;
 161   1              DELAY_1US;
 162   1              DELAY_1US;
 163   1              DELAY_1US;
 164   1              DELAY_1US;                              //命令数据加载周期不小于6US,CH451不需要该周期
 165   1              DELAY_1US;
 166   1              DELAY_1US;
 167   1              DELAY_1US;
 168   1              DELAY_1US;
 169   1              DELAY_1US;
 170   1              
 171   1              ENABLE_KEY_INTERRUPT;
 172   1      }
 173          
 174          
 175          
 176          /***********CH452读出*********************/
 177          uchar CH452_Read( void )
 178          {
 179   1              uchar i;
C51 COMPILER V8.02   KEY_DISPLAY                                                           09/06/2007 19:43:26 PAGE 4   

 180   1              uchar cmd,keycode;              //定义命令字,和数据存储器
 181   1              DISABLE_KEY_INTERRUPT;                  //禁止键盘中断,防止传输过程中被CH452中断而进入中断服务程序中再次传输    
 182   1              cmd=0x07;                               //读按键的命令字
 183   1              CH452_LOAD_CLR;
 184   1              for(i=0;i!=4;i++)                       // 只需要发出高4位,多发也可以,但应该确保最后留下的4位是该命令码
 185   1              {
 186   2                      if (cmd&1) {CH452_DIN_SET;}
 187   2                      else {CH452_DIN_CLR;}           // 输出位数据
 188   2              CH452_DCLK_CLR;                  
 189   2              cmd>>=1;                                //往右移一位
 190   2              CH452_DCLK_SET;                         //产生时钟上升沿锁通知CH451输入位数据
 191   2              }
 192   1              CH452_LOAD_SET;                         //产生加载上升沿通知CH451处理命令数据
 193   1              keycode=0;                              //清除keycode
 194   1              for(i=0;i!=7;i++)
 195   1              {
 196   2                      keycode<<=1;                    //数据移入keycode,高位在前,低位在后
 197   2                      if (CH452_DOUT) keycode++;      //从高到低读入451的数据
 198   2              CH452_DCLK_CLR;                         //产生时钟下升沿通知CH451输出下一位
 199   2              CH452_DCLK_SET;
 200   2              }
 201   1              CLEAR_KEY_INTER_FLAG;                   //清中断标志
 202   1              ENABLE_KEY_INTERRUPT;
 203   1              return(keycode);                        //反回键值
 204   1      }
 205          /***********CH452初始化*********************/
 206          void CH452_Init(void)            
 207          {
 208   1          //CH452_Write(CH452_RESET);     //此套020板子千万不可用020复位,否则数码管不亮
 209   1          DELAY_1US;
 210   1              DELAY_1US;
 211   1              DELAY_1US;
 212   1              DELAY_1US;
 213   1              DELAY_1US;
 214   1              DELAY_1US;
 215   1          CH452_Write( CH452_SYSON2 );                    /* 启用键盘和数码管 */
 216   1          CH452_Write( CH452_BCD );   /* BCD译码,8个数码管 */ //      | CH452_SCANLIMIT_7 

⌨️ 快捷键说明

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