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

📄 main.lst

📁 基于51单片机实现UART通信 SPI通信 和IIC通信
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  05/31/2008 19:14:38 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C_H\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) OBJECT(main.obj)

line level    source

   1          #include        "Includes.h"
   2          
   3          
   4           unsigned char datTem[2]={0,0};      //温度值储存  datTem[1]高8位  datTem[0]低8位
   5           unsigned char  key=0;                          //键盘扫描键值
   6           unsigned char uart_receive_date=0;     //串口接收数据
   7           bit flag=0;
   8          
   9           unsigned char code uart_transmit[]={"uart transmit"};
  10           unsigned char code spi_transmit[]={"SPI transmit"};
  11          
  12           void send_char_uart( unsigned char date); //串口发送
  13           void com_init();    //串口初始化
  14          
  15          /*********************LCD初始化后显示"hello"****************************************/
  16          void  hello(void)                                                   
  17          {  
  18   1          unsigned  char X[14]={"Hello everyone"},a=0x80,i;
  19   1                  WriteCommandLCM(0x01,1);
  20   1                  for(i=0;i<14;i++,a++){
  21   2                                       display_lcm(X[i],a);
  22   2                                       Delay_Xms(5); Delay_Xms(5);
  23   2                                        }
  24   1                   for(i=0;i<200;i++){
  25   2                           Delay_Xms(5); Delay_Xms(5);
  26   2                           }
  27   1                  WriteCommandLCM(0x01,1);
  28   1      }
  29          /***************显示温度************/
  30          void  temp_view(unsigned char *ddate)  
  31           {
  32   1         unsigned int  temp1=0,temp0=0,a,b,c,g,h,i,j,z;
  33   1         if((ddate[0]==0xFF)&&(ddate[1]==0xFF)){ ddate[0]=0;ddate[1]=0;}
  34   1         z=ddate[1]&0xF0;
  35   1          if(z>0)                                                  //正负温度符号判断显示
  36   1              display_lcm('-',0xc0);
  37   1          else  
  38   1              display_lcm('+',0xc0);
  39   1              if(z==0){                                                                               //正温度处理
  40   2                   temp1= ((ddate[1]&0x0F)<<4)+((ddate[0]&0xF0)>>4);
  41   2                   temp0=(ddate[0]&0x0F)*625;
  42   2                        }
  43   1          else {                                                                                                         //负温度处理
  44   2                     temp1= (((~ddate[1])&0x0F)<<4)+(((~ddate[0]+8)&0xF0)>>4);
  45   2                 temp0=((~ddate[0]+1)&0x0F)*625;
  46   2                        }
  47   1          a=(temp1%1000)/100;
  48   1            display_lcm(a+'0',0xc1);
  49   1          b=(temp1%100)/10;
  50   1            display_lcm(b+'0',0xc2);
  51   1          c=(temp1%10)/1;
  52   1            display_lcm(c+'0',0xc3); 
  53   1                 
  54   1            display_lcm('.',0xc4);    // 显示小数点
  55   1      
C51 COMPILER V7.50   MAIN                                                                  05/31/2008 19:14:38 PAGE 2   

  56   1          g=(temp0%10000)/1000;
  57   1            display_lcm(g+'0',0xc5); 
  58   1          h=(temp0%1000)/100;
  59   1            display_lcm(h+'0',0xc6); 
  60   1          i=(temp0%100)/10;
  61   1            display_lcm(i+'0',0xc7); 
  62   1          j=(temp0%10)/1;
  63   1            display_lcm(j+'0',0xc8);
  64   1      
  65   1       }
  66          
  67          /***************主函数***********************************/
  68          void main()
  69          {  
  70   1         unsigned char  baiwei=0,gewei=0,shiwei=0;
  71   1         unsigned int   shifen=0,baifen=0,qianfen=0,wanfen=0;
  72   1               
  73   1         LCMInit();
  74   1         com_init();
  75   1         hello();
  76   1         do{ 
  77   2             temp_view(datTem);
  78   2             key=keyscan();
  79   2             
  80   2      
  81   2                 if(uart_receive_date!=0)  display_lcm(uart_receive_date,0x8f);
  82   2                 
  83   2                    baiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%1000/100)+48;
  84   2                        shiwei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%100/10)+48;
  85   2                gewei=((((datTem[1]&0x0F)<<4)+((datTem[0]&0xF0)>>4))%10/1)+48;
  86   2                        shifen=(((datTem[0]&0x0F)*625)%10000/1000)+48;
  87   2                        baifen=(((datTem[0]&0x0F)*625)%1000/100)+48;
  88   2                        qianfen=(((datTem[0]&0x0F)*625)%100/10)+48;
  89   2                        wanfen=(((datTem[0]&0x0F)*625)%10/1)+48;
  90   2      
  91   2      
  92   2                 switch(key-'A')
  93   2                        {
  94   3                                 case 0: {key=0;SPI_Transmit('A');} break;         
  95   3                                 case 1: {key=0;SPI_Transmit('B');} break;          
  96   3                                 case 2: {key=0;SPI_Transmit('C');} break;                                 
  97   3                                 case 3: {key=0;SPI_Transmit('D');} break;                                 
  98   3                                 case 4: {key=0;SPI_Transmit('E');} break;                                 
  99   3                                 case 5: {key=0;SPI_Transmit('F');} break;     
 100   3                                 case 6: {  key=0;                                                              //G串口通信
 101   4                                            diaplay_string(uart_transmit,13);
 102   4                                                        send_char_uart(baiwei);
 103   4                                            send_char_uart(shiwei);
 104   4                                                        send_char_uart(gewei);
 105   4                                                        send_char_uart('.');
 106   4                                                        send_char_uart(shifen);
 107   4                                                        send_char_uart(baifen);
 108   4                                                        send_char_uart(qianfen);
 109   4                                                        send_char_uart(wanfen);
 110   4                                                        send_char_uart(' ');
 111   4                                            WriteCommandLCM(0x01,1); 
 112   4                                              } break;          
 113   3                                 case 7: {key=0;SPI_Transmit('G');} break;                                 
 114   3                                 default :  {} break;
 115   3                        if(uart_receive_date!=0)       display_lcm(uart_receive_date,0x8f);
 116   3                 uart_receive_date=0;
 117   3                        }
C51 COMPILER V7.50   MAIN                                                                  05/31/2008 19:14:38 PAGE 3   

 118   2            }while(1);
 119   1      }
 120          
 121          /************************************************
 122          UART 串口通信程序
 123          *************************************************/
 124          /*************串口初始化*********************/
 125          void com_init()         
 126           { 
 127   1        TMOD=0x20;                      //定时器1方式2
 128   1        TH1=0xfd;                           //波特率9600
 129   1        TL1=0xfd;
 130   1        SCON=0x50;                      //串口工作方式1,允许接收 
 131   1        PCON= 0x00;             // 波特率不倍增   
 132   1        TR1=1;                                  //启动定时
 133   1        IE=0x91;                            //开串口中断 等效于 EA=1;ES=1;EX0=1
 134   1       }
 135           
 136          
 137          /*************向串口发送一个字符*********************/
 138          void send_char_uart( unsigned char date) 
 139          {  
 140   1         EA=0;
 141   1         SBUF=date; 
 142   1         while(TI==0);
 143   1         TI= 0 ;
 144   1         EA=1;
 145   1      } 
 146          
 147          /*************串口中断函数*********************/
 148          void Uart_receive(void) interrupt 4  //串口中断接收
 149           {      
 150   1         EA=0;   
 151   1         if(RI)                                  
 152   1            {
 153   2              uart_receive_date=SBUF;
 154   2                      key=uart_receive_date;
 155   2                      RI=0;
 156   2                }     
 157   1         else TI=0;      //发送中断。则无操作
 158   1         EA=1;        
 159   1        }
 160          /*************INT1中断函数*********************/
 161          void SPI_INT0(void) interrupt 0  
 162          {
 163   1         EA=0;
 164   1         while(MOSI==0){
 165   2         if(flag==0){ datTem[1]=SPI_Receive(); flag=~flag;}
 166   2         else {datTem[0]=SPI_Receive(); flag=~flag;}
 167   2         }
 168   1         EA=1;                                                                                                                              
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                                        
             -                                                                                                             
 169   1      }
 170          /************************************************
 171          THE END OF FILE
 172          *************************************************/


C51 COMPILER V7.50   MAIN                                                                  05/31/2008 19:14:38 PAGE 4   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1105    ----
   CONSTANT SIZE    =     41    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      36
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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