pca_lcd.lst

来自「c8051f020单片机的例程」· LST 代码 · 共 322 行 · 第 1/2 页

LST
322
字号
C51 COMPILER V7.20   PCA_LCD                                                               09/14/2008 19:58:08 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE PCA_LCD
OBJECT MODULE PLACED IN ..\..\..\程序\PCA_LCD.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\..\程序\PCA_LCD.c BROWSE DEBUG OBJECTEXTEND PRINT(.\PCA_LCD.lst) OBJE
                    -CT(..\..\..\程序\PCA_LCD.obj)

line level    source

   1          #include <c8051f020.h>                    // SFR declarations
   2          #include <intrins.h>
   3          #include <stdio.h>
   4          #define ulong unsigned long
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          
   8          
   9          
  10          void SYSCLK_Init (void);         /*时钟初始化*/
  11          void handle(void);
  12          void PORT_Init (void);          //I/O口初始化
  13          void PCA_Init (void);           //PCA初始化
  14          void PCA_ISR (void);            //PCA中断服务子程序
  15          
  16          void delay(ulong i);            //延时
  17          void disp (float f);
  18          void LCD_Init(void);
  19          
  20          
  21          unsigned int ii, jj ;
  22          float data0,ti,freq;          //ti(周期);freq(频率);
  23          
  24          void main (void)
  25           {
  26   1         uint i;
  27   1      
  28   1         /*关看门狗*/
  29   1         WDTCN = 0xde;
  30   1         WDTCN = 0xad;
  31   1      
  32   1         SYSCLK_Init ();         /*时钟初始化*/
  33   1         PORT_Init ();                        /*IO口初始化*/
  34   1         delay(1000);
  35   1         for(i=0;i<100;i++);
  36   1      
  37   1         while (1)
  38   1         { 
  39   2         
  40   2         ii=0;   
  41   2         jj=0;        
  42   2         EA = 1;                                             /*开中断*/
  43   2         PCA_Init ();                                /*PCA初始化*/   
  44   2         while (jj<0x65);                             /*PCA发生中断100次 到否?;*/
  45   2         PCA0CN=0x00;                                    /*禁止PCA定时器/计数器*/
  46   2         EIE1 = 0x00;                                    /*禁止PCA0中断*/
  47   2         handle();                                   /*处理数据*/
  48   2         delay(1000);
  49   2         disp(freq);
  50   2         delay(385000);
  51   2         delay(385000);
  52   2         delay(385000);
  53   2                         
  54   2          }
C51 COMPILER V7.20   PCA_LCD                                                               09/14/2008 19:58:08 PAGE 2   

  55   1      }      
  56          
  57          void  handle(void)/*处理数据*/
  58           {
  59   1      
  60   1          data0=(PCA0CPH0*256+PCA0CPL0);                    /*处理来自PCA0CPH0,CA0CPL0的数据*/
  61   1          ti=(data0+ii*65535)/2211.84;                       //单位 us
  62   1          freq=(1000000)/ti;                           /*计算被测波形的频率*/
  63   1      
  64   1        }
  65          void PORT_Init (void)    //I/O口初始化
  66          {
  67   1         XBR0 = 0x4c;                 //CEX0-->P0.3
  68   1         XBR1 = 0X00;
  69   1         XBR2 = 0x40;      // Enable crossbar and weak pull-ups
  70   1        // P0MDOUT |= 0x01;                    // enable TX0 as a push-pull output
  71   1         P1MDOUT  = 0xff;                    // P1口设为推挽方式
  72   1         P2MDOUT  = 0xff;                    // P2口设为推挽方式
  73   1         P3MDOUT  = 0xff;                    // P3口设为推挽方式
  74   1         P74OUT   = 0xC0;                    // P7口设为推挽方式
  75   1      
  76   1        // P74OUT = 0XFF;
  77   1      }
  78          void PCA_Init (void)     //PCA初始化
  79          {
  80   1              EIE1 = 0x08;             /*使能PCA0中断*/        
  81   1              PCA0MD = 0x09;       /*PCA定时器时钟源SYSCLK选择:01(1/12),03(1/4),09(1)*/
  82   1              PCA0L    = 0x00;
  83   1              PCA0H    = 0x00;
  84   1              PCA0CPL0 = 0x00;
  85   1              PCA0CPH0 = 0x00;
  86   1          PCA0CPM0 = 0x21;     /*PCA0正边沿捕捉方式,CCF0=1,允许辅捉/比较标志的中断申请*/
  87   1          PCA0CN = 0x40;               /*允许PCA定时器/计数器*/
  88   1      }
  89          
  90          /*PCA中断服务子程序*/
  91          void PCA_ISR (void) interrupt 9
  92          {
  93   1          if (CCF0==1) 
  94   1           {
  95   2                   jj++;                              /*计中断次数*/
  96   2                   CCF0 = 0;                  /*清匹配中断标志*/
  97   2            }
  98   1          if (CF==0)             //记时钟溢出次数,标志位
  99   1               {
 100   2            ii++;
 101   2                CF = 0;
 102   2           }
 103   1         
 104   1      }
 105          
 106          
 107          //-----------------------------------------------------------------------------
 108          // SYSCLK配置
 109          //-----------------------------------------------------------------------------
 110          // 配置系统时钟使用外部晶振22.1184MHz
 111          
 112          void SYSCLK_Init (void)
 113          {
 114   1         int a;                              // delay counter
 115   1      
 116   1         OSCXCN = 0x67;                      // start external oscillator with
C51 COMPILER V7.20   PCA_LCD                                                               09/14/2008 19:58:08 PAGE 3   

 117   1                                             // 22.1184MHz crystal
 118   1         for (a=0; a < 256; a++) ;           // XTLVLD blanking interval (>1ms)
 119   1      
 120   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
 121   1      
 122   1         OSCICN = 0x88;                      // select external oscillator as SYSCLK
 123   1                                             // source and enable missing clock
 124   1                                             // detector
 125   1      }
 126          
 127          
 128          /********************************************************
 129          * 延时程序                                            *
 130          ********************************************************/
 131          void delay(ulong i)  
 132          { 
 133   1          while(i--);   
 134   1      }
 135          
 136              
 137          //------LCD显示----------------
 138          void disp (float f)
 139          {     
 140   1              uint i,b1,b2;
 141   1                      ulong b,temp;
 142   1                      uchar c[8],d[6];
 143   1                                                    //"Temperature  "
 144   1              uchar xdata onedata[16]={"Frequency:      "};       //第一行
 145   1                                       //"温度值 "
 146   1              uchar xdata twodata[16]={"                "};//第二行
 147   1              static unsigned char lcddata;

⌨️ 快捷键说明

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