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

📄 text2.lst

📁 单片机控制的12864液晶显示器的驱动程序,通过按键控制
💻 LST
字号:
C51 COMPILER V7.02a   TEXT2                                                                11/14/2005 10:27:26 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "C8051F200.h"
   2          #include "TEXT2.H"
   3          #include "display.h"
   4          #include "disdrive.h"
   5          #include "KEY.H"
   6          
   7          //定义串口缓冲区和结构体
   8          
   9          #define  ADDRESSL    0xFF       //地址校验码地位
  10          #define  ADDRESSH    0xFF       //地址校验码高位
  11          
  12          #define  BufferLen          30
  13          #define  SEARIALTIME    0x64    //串口接收完所有数据的最大时间,100ms
  14          
  15          unsigned char data RealReceiveLen ;     //实际接收到个数
  16          unsigned char data CheckSum  ;          //校验码
  17          unsigned char data ReceivBuf[BufferLen];
  18          unsigned char data SerialTime ;         //串口接收数据时间计数器,在接收中大于一个数可以认为此次接收丢失
  19          unsigned char data ReceiveState ; //接收状态标志位
  20          
  21          //
  22          unsigned  int   ResetLedBackTime;       //背光灯熄灭时间计数器 
  23          unsigned  int   CountTimeTime;          //累计时间计数器
  24          
  25          //申明应用定义在KEY.C中的文件
  26          extern  struct TIME    idata  NowTime; 
  27          extern  struct INCOME  idata  Incomedata;
  28          
  29          extern  unsigned char data  IsKeyDown;
  30          extern  unsigned char data  AutoKeyTime;
  31          extern  unsigned char data  KeyDelayTime;
  32          
  33          extern char code * code Page_CurrentTime[];
  34          extern char code * code Message_ZhiLiuLiang[];
  35          
  36          void FeedDog(void)      //喂狗
  37          {       
  38   1              WDTCN = 0xA5;
  39   1      }
  40          
  41          void WatchDog(void) 
  42          {
  43   1              WDTCN = 0x07;                                   // Watchdog Timer Control Register // 超时间隔94ms
  44   1              WDTCN = 0xFF;                                   // 禁止看门狗失效,一直有效并关不掉
  45   1              WDTCN = 0xA5;                                   // 复位并允许;
  46   1      }
  47          
  48          void KillDog(void) 
  49          {
  50   1              EA = 0;
  51   1              WDTCN = 0xDE;                                   // Disable WDT
  52   1              WDTCN = 0xAD;
  53   1      }
  54          
  55          // 11.0592M
C51 COMPILER V7.02a   TEXT2                                                                11/14/2005 10:27:26 PAGE 2   

  56          void SYSCLK_Init(void)
  57          {
  58   1              OSCXCN = 0x20;          //00100000      // start external oscillator with 模式为晶振
  59   1                                                                              // 11.0592MHz crystal
  60   1              OSCICN = 0x88;                                  // select external oscillator as SYSCLK
  61   1                                                                              // source and enable missing clock
  62   1                                                                              // detector
  63   1      }
  64          
  65          // port init
  66          void PORT_Init(void)
  67          {
  68   1      
  69   1              PRT0MX = 0x01;  //端口P00和P01配置为串口数据线
  70   1              PRT1MX = 0x00;
  71   1              PRT2MX = 0x00;
  72   1      
  73   1      }
  74          
  75          void UART_Init(void)    // 串口初始化
  76          {                                       
  77   1              SCON    = 0x50;                                         // 串口工作方式1                        
  78   1              T2CON   = 0x30;                                         // 定时器2作为串口1的波特率发生器
  79   1              RCAP2   = -(SYSCLK/BAUDRATE/32);
  80   1              TR2             = 1;                                            // TR2=1
  81   1              REN     = 1;
  82   1      }
  83          
  84          void Timer01_Init(void) {               //定时器0、1初始化
  85   1      
  86   1              TMOD    = 0x11;                                         //定时器0和1工作在16位定时器方式;
  87   1              CKCON   = 0x00;                                         //使用系统时钟的12分频作为定时器时钟
  88   1              TH0             = TIMER0_H;                                     //定时1ms
  89   1              TL0             = TIMER0_L;
  90   1              TH1             = TIMER1_H;                                     //定时50ms
  91   1              TL1             = TIMER1_L;
  92   1              TR0  = 1;                                                       //开始计数      
  93   1      }
  94          
  95          void InterruptEnable_Init(void) 
  96          {
  97   1              IE   = 0x12;                                            // 屏蔽所有中断,开中断UART0,T0
  98   1              IP   = 0x10;                                            // 串口优先级高,其余采用默认优先级
  99   1              EIE1 = 0x00;                                            // 其余中断禁止                                 
 100   1              EIE2 = 0x00;                                            
 101   1              EIP1 = 0x00;
 102   1              EIP2 = 0x00;
 103   1              ES   = 1;
 104   1              EA   = 1;
 105   1      }
 106          
 107          
 108          void SYSINI(void)
 109          {
 110   1              KillDog();
 111   1              SYSCLK_Init();                                          // initialize oscillator
 112   1              PORT_Init();                                            // initialize crossbar and GPIO
 113   1              UART_Init();
 114   1              Timer01_Init();
 115   1              InterruptEnable_Init();
 116   1              HardInitailLED();
 117   1              InitialKey();
C51 COMPILER V7.02a   TEXT2                                                                11/14/2005 10:27:26 PAGE 3   

 118   1              Serial_init();
 119   1              WatchDog();                                                     // 打开看门狗;
 120   1      }
 121          
 122          
 123          void main(void)
 124          {       
 125   1              SYSINI();
 126   1              WriteTime_Init();
 127   1              LedFillNULL();
 128   1              ShowWait();
 129   1              delay(0xFFFF);
 130   1              FeedDog();
 131   1              while(1)
 132   1              {       
 133   2                      FeedDog();
 134   2                      KeyPro();
 135   2                      if(ReceiveState == ENDRECEIVE)
 136   2                      {       
 137   3                                      if(CheckSum == 0x01) 
 138   3                                              ReadSerialBufData((unsigned int *)ReceivBuf,&(Incomedata.InputUA),14);
 139   3                                      Serial_init();
 140   3                      }
 141   2                      if(((ReceiveState == RECEIVING)||(ReceiveState == STARTRECEIVE2))&&(SerialTime >= SEARIALTIME))
 142   2                                      Serial_init();
 143   2              }
 144   1              
 145   1      }
 146          
 147          void  TO_INT(void) interrupt 1
 148          {
 149   1                      TF0 = 0;
 150   1                      if (IsKeyDown == NO_KEY_DOWN)
 151   1                      {               
 152   2                                      if(AutoKeyTime < KEY_AUTOUPDATE_TIME) AutoKeyTime++;
 153   2                                      if(ResetLedBackTime < RESET_LEDBACK_TIME) ResetLedBackTime++;
 154   2                                      else    LEDBACKLIGNT = 1; //Reset LEDBackLight
 155   2                      }               
 156   1              if ( IsKeyDown == KEY_DOWN_TRIGGER)
 157   1              {
 158   2                      if (KeyDelayTime < KEY_DELAY ) KeyDelayTime++; //key down and delay time counting
 159   2                                      else
 160   2                                      {
 161   3                                      IsKeyDown = KEY_DOWN_DELAY_OVER;//set key delay time is over;trigger IsKeyDown
 162   3                                      LEDBACKLIGNT = 0;//LEDBack Light On
 163   3                                       }
 164   2      
 165   2                      }
 166   1              if ( IsKeyDown ==  KEY_PRO_COMPLETE_DELAY)      //key pro completed delay
 167   1              {
 168   2                      if ( KeyDelayTime < KEY_COMPLETE_DELAY ) KeyDelayTime++;
 169   2                      else
 170   2                      {
 171   3                                                      KeyDelayTime = 0;
 172   3                                                      AutoKeyTime = 0;
 173   3                                                      ResetLedBackTime = 0;
 174   3                              IsKeyDown = NO_KEY_DOWN;
 175   3                      }
 176   2              }
 177   1                      if(SerialTime < SEARIALTIME) SerialTime++;      
 178   1                      TH0             = TIMER0_H;                                     //定时1ms
 179   1                      TL0             = TIMER0_L;
C51 COMPILER V7.02a   TEXT2                                                                11/14/2005 10:27:26 PAGE 4   

 180   1      }
 181                 
 182          
 183          void Receive_INT(void) interrupt  4     
 184          {
 185   1                      unsigned  char  datatemp;
 186   1                      RI = 0;
 187   1                      TI = 0;
 188   1                      datatemp = SBUF;
 189   1                      if( ReceiveState == STARTRECEIVE1 && datatemp == ADDRESSL ) //收第一个起始地址
 190   1                      {
 191   2                                      ReceiveState = STARTRECEIVE2;
 192   2                                      SerialTime = 0;
 193   2                                      CheckSum =      CheckSum + datatemp;
 194   2      
 195   2                      }
 196   1                      else  if(ReceiveState == STARTRECEIVE2 && datatemp==ADDRESSH)   //收第二个起始地址
 197   1                  {
 198   2                                      ReceiveState = RECEIVING ;      
 199   2                                      CheckSum =      CheckSum + datatemp;
 200   2                      }
 201   1                      
 202   1                  else  if(ReceiveState == RECEIVING)         //处于数据接收中 
 203   1                      {
 204   2                                      ReceivBuf[RealReceiveLen]=datatemp;
 205   2                                      RealReceiveLen++;
 206   2                                      CheckSum =      CheckSum + datatemp;
 207   2      
 208   2                      }
 209   1                      if( RealReceiveLen >= BufferLen )                       //数据接收完成
 210   1                                      ReceiveState = ENDRECEIVE;
 211   1      }
 212          
 213          void ReadSerialBufData(unsigned int *Bufferptr,unsigned int *Structptr,unsigned char num)
 214          {
 215   1                      unsigned char i;
 216   1                      for(i=0;i<num;i++)
 217   1                              {
 218   2                                      *( Structptr+i) = *(Bufferptr+i);
 219   2                          }
 220   1      }
 221          
 222          void Serial_init(void)
 223          {
 224   1              ReceiveState = STARTRECEIVE1;
 225   1              RealReceiveLen = 0;
 226   1              CheckSum = 0;
 227   1      }
 228          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    485    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     38       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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