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

📄 main.lst

📁 单片机LCD驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   MAIN                                                                  11/29/2008 23:08:07 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <c8051f310.h>
   2          #include <intrins.h>
   3          #include "Lcd.h"
   4          
   5          sbit Lcd_EN=P2^2;
   6          sbit Lcd_RW=P2^1;
   7          sbit Lcd_RS=P2^0;
   8          sbit Busy=P1^7;
   9          
  10          sbit Led1=P2^7;
  11          sbit Led2=P2^6;
  12          sbit Led3=P2^5;
  13          
  14          sbit Key1=P0^1;
  15          sbit Key2=P0^0;
  16          
  17          sbit Key3=P3^1;
  18          sbit Key4=P3^2;
  19          sbit Key5=P3^3;
  20          
  21          unsigned char Key_Value=0;
  22          unsigned char Need_to_Send=0;
  23          
  24          unsigned char Present_State=0;
  25          unsigned int Time_Out_Count=0;
  26          unsigned int Recv_Out_Times=0;
  27          unsigned int Recv_Time_Out=0;
  28          unsigned int Work_Time_Out=0;
  29          
  30          unsigned char Buf_Temp;
  31          unsigned char Uart_Coun=0;
  32          unsigned char Uart_Flag=0;
  33          unsigned char delay_num=0;
  34          //unsigned char x,y;
  35          unsigned char serial_rx_buff[8];
  36          unsigned char serial_tx_buff[8];
  37          unsigned char LED_Count;
  38          unsigned char Uart_Enable=0;
  39          unsigned char Key_Enable=1;
  40          
  41          //unsigned char KEY[2][3]={1,2,3,4,5,6};
  42          
  43          void INIT_SYS_CLK(void)
  44          {
  45   1      
  46   1              OSCXCN = 0x67;     //启动外部振荡器用 24 MHz 晶体 设置外部振荡器控制寄存器                      
  47   1              while (!(OSCXCN & 0x80)); // 等待晶体稳定       
  48   1              CLKSEL = 0x01;     //设置CLKSL0为1,选择外部振荡  设置时钟选择寄存器
  49   1              OSCICN = 0x08;     //选择外部振荡器作为系统时钟源 //使能丢失时钟检测器                   
  50   1      } 
  51          
  52          void WDT_Init(void)
  53          {
  54   1        PCA0MD&= ~0x40;            //禁止WDT
  55   1        PCA0MD= 0x00;     
C51 COMPILER V7.07   MAIN                                                                  11/29/2008 23:08:07 PAGE 2   

  56   1      }
  57          
  58          //void SendChar(unsigned char chr)
  59          //{
  60          //  SBUF0=chr;                                      /*将接收到数据送出*/
  61          //  while(!TI0);
  62          //  TI0 = 0;
  63          //}
  64          
  65          void SendString (unsigned char *str, unsigned char strlen)
  66          {
  67   1        unsigned char m = 0;
  68   1              do
  69   1              {
  70   2                 SBUF0 = *(str + m); 
  71   2                 while(!TI0);
  72   2                 TI0 = 0;        
  73   2                 m ++;
  74   2              }
  75   1              while (m < strlen);
  76   1      }
  77          
  78          void Timer0_Init (void)
  79          {
  80   1              CKCON|=0x04;
  81   1              TMOD|=0x1;                        //16Bit
  82   1              TR0 = 0;                          // 停止定时器0
  83   1              TH0 = (-SYSCLK/1000) >> 8;        // 定时器1ms溢出
  84   1              TL0 = -SYSCLK/1000;
  85   1              TR0 = 1;                              // 启动定时器
  86   1              IE|= 0x2;                                                                                       //定时器0中断允许
  87   1      }
  88                  
  89          void Timer0_ISR (void) interrupt 1  //1ms
  90          {
  91   1                TH0 = (-SYSCLK/1000) >> 8;  
  92   1              TL0 = -SYSCLK/1000;
  93   1                delay_num++;
  94   1                Time_Out_Count++;
  95   1                Recv_Time_Out++;
  96   1                if (Recv_Time_Out>=1000)
  97   1                {
  98   2                      Recv_Time_Out=0;
  99   2                      Recv_Out_Times++;
 100   2                }
 101   1                TF0=0;
 102   1      }
 103          
 104          void UATR0_ISR(void)  interrupt 4
 105          {
 106   1              if(RI0)
 107   1              {                                           
 108   2                      RI0 = 0;
 109   2                      //Led2=~Led2;
 110   2                      Buf_Temp =SBUF0;
 111   2                      if (Uart_Coun<8)
 112   2                      {
 113   3                         serial_rx_buff[Uart_Coun]=Buf_Temp;
 114   3                         Uart_Coun++;
 115   3                      }
 116   2                      if (Uart_Coun >=8)
 117   2                      {
C51 COMPILER V7.07   MAIN                                                                  11/29/2008 23:08:07 PAGE 3   

 118   3                         Uart_Flag=1;
 119   3                         Uart_Coun=0;
 120   3                         Led2=~Led2;
 121   3                      }               
 122   2              }
 123   1      }
 124          
 125          void RS232_Init (void)
 126          {
 127   1         SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
 128   1         if (SYSCLK/BAUD_RATE/2/256 < 1) 
 129   1         {
 130   2            TH1 = -(SYSCLK/BAUD_RATE/2);
 131   2            CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
 132   2            CKCON |=  0x08;
 133   2         } 
 134   1         else if (SYSCLK/BAUD_RATE/2/256 < 4) 
 135   1         {
 136   2            TH1 = -(SYSCLK/BAUD_RATE/2/4);
 137   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01                  
 138   2            CKCON |=  0x09;
 139   2         } 
 140   1         else if (SYSCLK/BAUD_RATE/2/256 < 12) 
 141   1         {
 142   2            TH1 = -(SYSCLK/BAUD_RATE/2/12);
 143   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
 144   2         } 
 145   1         else 
 146   1         {
 147   2            TH1 = -(SYSCLK/BAUD_RATE/2/48);
 148   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
 149   2            CKCON |=  0x02;
 150   2         }
 151   1      
 152   1         TL1 = TH1;                          // init Timer1
 153   1         TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
 154   1         TMOD |=  0x20;                       
 155   1         TR1 = 1;                            // START Timer1
 156   1         ES0 = 1;
 157   1         TI0 = 0;
 158   1         RI0 = 0;     
 159   1      }
 160          
 161          void INIT_PORT (void)
 162          {
 163   1              XBR1 = 0x40 ;   //XBARE位置1,交叉开关使能。
 164   1        XBR0 = 0x09 ;   //SYSCLK位置1:/SYSCLK连到端口引脚。URT0E置1,1:UART TX0, RX0连到端口引脚P0.4和P0.5。  
             -        
 165   1      
 166   1              P0MDIN = 0xf3 ; //端口0输入寄存器配置,p0.2,p0.3接外部晶振,数字输入置1
 167   1              P0SKIP = 0x0c;  //端口0跳过寄存器配置,p0.2,p0.3接外部晶振
 168   1      
 169   1              P1MDIN = 0xff;
 170   1              P1MDOUT = 0xff;
 171   1      
 172   1              P0MDOUT |= 0x10;
 173   1        P2MDOUT = 0xff ;//设置为推挽输出
 174   1      }
 175          
 176          void DetectBusy(void)
 177          {
 178   1              P1MDOUT = 0x00;
C51 COMPILER V7.07   MAIN                                                                  11/29/2008 23:08:07 PAGE 4   

 179   1              Lcd_EN = 0;
 180   1              Lcd_RS = 0 ;
 181   1              Lcd_RW = 1 ;
 182   1              _nop_();
 183   1              Lcd_EN = 1;
 184   1              _nop_();
 185   1              _nop_();
 186   1              _nop_();
 187   1              _nop_();
 188   1              _nop_();
 189   1        while(Busy==1) ;  //Busy为P1.7        
 190   1              delay_num=0;
 191   1              while(delay_num<2)      //2ms
 192   1              {;}
 193   1        Lcd_EN = 0;
 194   1              P1MDOUT = 0xff;
 195   1      }
 196          
 197          void LcdWriteCmd(unsigned char value)
 198          {       
 199   1              Lcd_RS = 0 ; //写命令为0,写数据为1
 200   1              Lcd_RW = 0 ; //写为0,读为1
 201   1              P1 = value ;
 202   1              Lcd_EN = 1;  //EN高脉冲
 203   1              _nop_();
 204   1              Lcd_EN = 0;
 205   1      }
 206          
 207          void LcdWriteData(unsigned char value)
 208          {       
 209   1              Lcd_RS = 1 ; //写命令为0,写数据为1
 210   1              Lcd_RW = 0 ; //写为0,读为1
 211   1              P1 = value ;
 212   1              Lcd_EN = 1;  //EN高脉冲
 213   1              _nop_();
 214   1              Lcd_EN = 0;
 215   1      }

⌨️ 快捷键说明

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