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

📄 zh.lst

📁 基于单片机的步进电机课程设计(基于2803驱动芯片)
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE ZH
OBJECT MODULE PLACED IN zh.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE zh.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <REG51.H>
   2          #include <intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          sbit  DS1302_CLK = P1^0;              //实时时钟时钟线引脚 
   6          sbit  DS1302_IO  = P1^1;              //实时时钟数据线引脚 
   7          sbit  DS1302_RST = P1^2;              //实时时钟复位线引脚
   8          sbit  wireless_1 = P3^0;
   9          sbit  wireless_2 = P3^1;
  10          sbit  wireless_3 = P3^2;
  11          sbit  wireless_4 = P3^4;
  12          sbit  ACC0 = ACC^0;
  13          sbit  ACC7 = ACC^7;
  14          char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;  //秒,分,时到日,月,年位闪的计数
  15          sbit Set = P1^4;       //模式切换键
  16          sbit Up = P1^5;        //加法按钮
  17          sbit Down = P1^6;      //减法按钮
  18          sbit out = P1^7;       //立刻跳出调整模式按钮
  19          sbit DQ = P3^3;        //温度传送数据IO口
  20          char done,count,temp,flag,up_flag,down_flag;
  21          uchar temp_value;      //温度值
  22          uchar TempBuffer[5],week_value[2];
  23          
  24          
  25          void show_time();   //液晶显示程序
  26          /***********1602液晶显示部分子程序****************/
  27          
  28          
  29          //Port Definitions**********************************************************
  30          sbit LcdRs              = P2^0;
  31          sbit LcdRw              = P2^1;
  32          sbit LcdEn      = P2^2;
  33          sfr  DBPort     = 0x80;         //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
  34          
  35          //内部等待函数**************************************************************************
  36          unsigned char LCD_Wait(void)
  37          {
  38   1              LcdRs=0;
  39   1              LcdRw=1;        _nop_();
  40   1              LcdEn=1;        _nop_();
  41   1                                                       
  42   1              LcdEn=0;
  43   1              return DBPort;          
  44   1      }
  45          //向LCD写入命令或数据************************************************************
  46          #define LCD_COMMAND                     0      // Command
  47          #define LCD_DATA                        1      // Data
  48          #define LCD_CLEAR_SCREEN        0x01      // 清屏
  49          #define LCD_HOMING              0x02      // 光标返回原点
  50          void LCD_Write(bit style, unsigned char input)
  51          {
  52   1              LcdEn=0;
  53   1              LcdRs=style;
  54   1              LcdRw=0;                _nop_();
  55   1              DBPort=input;   _nop_();//注意顺序
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 2   

  56   1              LcdEn=1;                _nop_();//注意顺序
  57   1              LcdEn=0;                _nop_();
  58   1              LCD_Wait();     
  59   1      }
  60          
  61          //设置显示模式************************************************************
  62          #define LCD_SHOW                        0x04    //显示开
  63          #define LCD_HIDE                        0x00    //显示关          
  64          
  65          #define LCD_CURSOR                      0x02    //显示光标
  66          #define LCD_NO_CURSOR           0x00    //无光标                     
  67          
  68          #define LCD_FLASH                       0x01    //光标闪动
  69          #define LCD_NO_FLASH            0x00    //光标不闪动
  70          
  71          void LCD_SetDisplay(unsigned char DisplayMode)
  72          {
  73   1              LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
  74   1      }
  75          
  76          //设置输入模式************************************************************
  77          #define LCD_AC_UP                       0x02
  78          #define LCD_AC_DOWN                     0x00      // default
  79          
  80          #define LCD_MOVE                        0x01      // 画面可平移
  81          #define LCD_NO_MOVE                     0x00      //default
  82          
  83          void LCD_SetInput(unsigned char InputMode)
  84          {
  85   1              LCD_Write(LCD_COMMAND, 0x04|InputMode);
  86   1      }
  87          
  88          //初始化LCD************************************************************
  89          void LCD_Initial()
  90          {
  91   1              LcdEn=0;
  92   1              LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
  93   1              LCD_Write(LCD_COMMAND,0x38);
  94   1              LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
  95   1              LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  96   1              LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
  97   1      }
  98          
  99          //液晶字符输入的位置************************
 100          void GotoXY(unsigned char x, unsigned char y)
 101          {
 102   1              if(y==0)
 103   1                      LCD_Write(LCD_COMMAND,0x80|x);
 104   1              if(y==1)
 105   1                      LCD_Write(LCD_COMMAND,0x80|(x-0x40));
 106   1      }
 107          
 108          //将字符输出到液晶显示
 109          void Print(unsigned char *str)
 110          {
 111   1              while(*str!='\0')
 112   1              {
 113   2                      LCD_Write(LCD_DATA,*str);
 114   2                      str++;
 115   2              }
 116   1      }
 117          
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 3   

 118          
 119          
 120          
 121          
 122          
 123          /***********DS1302时钟部分子程序******************/
 124          typedef struct __SYSTEMTIME__
 125          {
 126                  unsigned char Second;
 127                  unsigned char Minute;
 128                  unsigned char Hour;
 129                  unsigned char Week;
 130                  unsigned char Day;
 131                  unsigned char Month;
 132                  unsigned char  Year;
 133                  unsigned char DateString[11];
 134                  unsigned char TimeString[9];
 135          }SYSTEMTIME;    //定义的时间类型
 136          SYSTEMTIME CurrentTime;
 137          
 138          
 139          #define AM(X)   X
 140          #define PM(X)   (X+12)                    // 转成24小时制
 141          #define DS1302_SECOND   0x80          //时钟芯片的寄存器位置,存放时间
 142          #define DS1302_MINUTE   0x82
 143          #define DS1302_HOUR             0x84 
 144          #define DS1302_WEEK             0x8A
 145          #define DS1302_DAY              0x86
 146          #define DS1302_MONTH    0x88
 147          #define DS1302_YEAR             0x8C 
 148          
 149          void DS1302InputByte(unsigned char d)   //实时时钟写入一字节(内部函数)
 150          { 
 151   1          unsigned char i;
 152   1          ACC = d;
 153   1          for(i=8; i>0; i--)
 154   1          {
 155   2              DS1302_IO = ACC0;               //相当于汇编中的 RRC
 156   2              DS1302_CLK = 1;
 157   2              DS1302_CLK = 0;
 158   2              ACC = ACC >> 1; 
 159   2          } 
 160   1      }
 161          
 162          unsigned char DS1302OutputByte(void)    //实时时钟读取一字节(内部函数)
 163          { 
 164   1          unsigned char i;
 165   1          for(i=8; i>0; i--)
 166   1          {
 167   2              ACC = ACC >>1;                          //相当于汇编中的 RRC 
 168   2              ACC7 = DS1302_IO;
 169   2              DS1302_CLK = 1;
 170   2              DS1302_CLK = 0;
 171   2          } 
 172   1          return(ACC); 
 173   1      }
 174          
 175          void Write1302(unsigned char ucAddr, unsigned char ucDa)        //ucAddr: DS1302地址, ucData: 要写的数据
 176          {
 177   1          DS1302_RST = 0;
 178   1          DS1302_CLK = 0;
 179   1          DS1302_RST = 1;
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 4   

 180   1          DS1302InputByte(ucAddr);            // 地址,命令 
 181   1          DS1302InputByte(ucDa);              // 写1Byte数据
 182   1          DS1302_CLK = 1;
 183   1          DS1302_RST = 0;
 184   1      } 
 185          
 186          unsigned char Read1302(unsigned char ucAddr)    //读取DS1302某地址的数据
 187          {
 188   1          unsigned char ucData;
 189   1          DS1302_RST = 0;
 190   1          DS1302_CLK = 0;
 191   1          DS1302_RST = 1;
 192   1          DS1302InputByte(ucAddr|0x01);        // 地址,命令 
 193   1          ucData = DS1302OutputByte();         // 读1Byte数据
 194   1          DS1302_CLK = 1;
 195   1          DS1302_RST = 0;
 196   1          return(ucData);
 197   1      }
 198          
 199          
 200          
 201          void DS1302_GetTime(SYSTEMTIME *Time)  //获取时钟芯片的时钟数据到自定义的结构型数组
 202          {
 203   1      
 204   1              Time->Second =Read1302(DS1302_SECOND);
 205   1              Time->Minute = Read1302(DS1302_MINUTE);
 206   1              Time->Hour = Read1302(DS1302_HOUR);
 207   1              Time->Day = Read1302(DS1302_DAY);
 208   1              Time->Week =  Read1302(DS1302_WEEK);
 209   1              Time->Month = Read1302(DS1302_MONTH);
 210   1              Time->Year = Read1302(DS1302_YEAR);
 211   1      }
 212          
 213          void DateToStr(SYSTEMTIME *Time)    //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]
 214          {   if(hide_year<2)                 //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2
             -007/07/22
 215   1          {                               
 216   2                Time->DateString[0] = '2';
 217   2                Time->DateString[1] = '0';     
 218   2                Time->DateString[2] = Time->Year/16 + '0';
 219   2                Time->DateString[3] = Time->Year%16 + '0';
 220   2              }
 221   1                else
 222   1                  { 
 223   2                    Time->DateString[0] = ' ';
 224   2                    Time->DateString[1] = ' ';                 
 225   2                    Time->DateString[2] = ' ';
 226   2                    Time->DateString[3] = ' ';
 227   2                      }
 228   1              Time->DateString[4] = '/';
 229   1              if(hide_month<2)
 230   1              {
 231   2                Time->DateString[5] = Time->Month/16 + '0';
 232   2                Time->DateString[6] = Time->Month%16 + '0';
 233   2              }
 234   1                else
 235   1                {
 236   2                  Time->DateString[5] = ' ';
 237   2                  Time->DateString[6] = ' ';
 238   2                }
 239   1              Time->DateString[7] = '/';
 240   1              if(hide_day<2)
C51 COMPILER V6.23a  ZH                                                                    04/27/2008 20:51:21 PAGE 5   

 241   1              {
 242   2                Time->DateString[8] = Time->Day/16 + '0';
 243   2                Time->DateString[9] = Time->Day%16 + '0';
 244   2              }
 245   1                else
 246   1                {
 247   2                  Time->DateString[8] = ' ';
 248   2                  Time->DateString[9] = ' ';      
 249   2                }
 250   1              if(hide_week<2)
 251   1              {
 252   2                week_value[0] = Time->Week%16 + '0';  //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为
             -等一下要在最后显示
 253   2              }
 254   1                else
 255   1                {
 256   2                  week_value[0] = ' ';
 257   2                }
 258   1                week_value[1] = '\0';
 259   1      
 260   1              Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符
 261   1      }
 262          
 263          void TimeToStr(SYSTEMTIME *Time)  //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];

⌨️ 快捷键说明

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