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

📄 main.lst

📁 数据采集系统的好参考资料,高精度的传感器采集系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  09/13/2006 09:30:06 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 MAIN.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //头文件包含-----------------------------------------------------
   2          #include<LCD.H>
   3          #include<12887.H>
   4          #include<DS18B20.H>
   5          #include<WAVE.H>
   6          #include<reg51.h>
   7          //全局变量--------------------------------------------------------------
   8          bit Ex0Flag=0;                                                                  //外部中断标志
   9          bit AlarmFlag=0;                                                                //定时中断标志
  10          
  11          idata unsigned char Key=0;                                              //键值
  12          idata unsigned char CurIndex=0;                                 //主菜单标号
  13          
  14          idata unsigned char DisBuf;                                             //距离变量
  15          idata unsigned char TempBuf;                                    //温度变量
  16          idata unsigned char DateBuf[6]={6,9,7,4,2,0};   //时间日期变量
  17          idata unsigned char AlarmBuf[3]={0};                    //定时时间变量
  18          idata unsigned char DateTbl[6]={2,6,10,0,4,8};  //时间在字符串中的位置
  19          
  20          idata char Date[]="2006年09月08日";                             //日期显示缓冲区
  21          idata char Time[]="00:00:00";                                 //时间显示缓冲区
  22          idata char Dis[]="测试距离:000mm";                              //距离显示缓冲区
  23          idata char Temp[]="温度:00^C";                                 //温度显示缓冲区
  24          //系统函数声明--------------------------------------------------------
  25          void FstGrap(void);                                                             //显示开机画面函数
  26          void ShowTime(void);                                                    //显示时间函数
  27          void ShowDate(void);                                                    //显示日期函数
  28          void ShowDis(void);                                                             //显示距离函数
  29          void ShowTemp(void);                                                    //显示温度函数
  30          void ShowDis(void);                                                             //显示距离函数
  31          void SetDate(void);                                                             //设置时间日期函数
  32          void SetClk(void);                                                              //设置定时时间函数
  33          unsigned char ReadKey(void);                                    //按键扫描函数                  
  34          void delay1(unsigned int t);                                    //延时函数
  35          struct MENU{                                                                    //菜单结构体
  36                  char code *name;                                                                //菜单的名字
  37                  void (*Fun)(void);}                                                             //对应的函数指针
  38          Menu[]={                                                                                //菜单结构体数组初始化
  39          {"显示时间",ShowTime},
  40          {"显示日期",ShowDate},
  41          {"显示温度",ShowTemp},
  42          {"检测距离",ShowDis},
  43          {"设置时间日期",SetDate},
  44          {"设置定时时间",SetClk}};
  45          //主函数----------------------------------------------------------------
  46          main()
  47          {
  48   1              unsigned char i;
  49   1      entry:  
  50   1              Lcd_init();                                                     //系统初始化函数
  51   1              DS12887_init();
  52   1              Clr_grap();Scr_clr();
  53   1              delay1(5000);
  54   1              FstGrap();
  55   1              
C51 COMPILER V7.50   MAIN                                                                  09/13/2006 09:30:06 PAGE 2   

  56   1              do{Key=ReadKey();}
  57   1              while(Key==0);
  58   1              Clr_grap();
  59   1              Scr_clr();
  60   1              while(1)
  61   1              {
  62   2                      if(Key!=0)                                              //如果有间按下则进行相应的处理  
  63   2                      {
  64   3                              switch(Key)                                             //按键处理程序
  65   3                              {
  66   4                                      case 1:                                                 //确定键,执行相应的函数
  67   4                                              Menu[CurIndex].Fun();
  68   4                                              break;
  69   4                                      case 2:                                                 //光标上移
  70   4                                              if(CurIndex++==5)
  71   4                                                      CurIndex=0;
  72   4                                              break;
  73   4                                      case 3:                                                 //光标下移
  74   4                                              if(CurIndex--==0)
  75   4                                                      CurIndex=5;
  76   4                                              break;
  77   4                                      case 4:                                                 //取消键,返回
  78   4                                              goto entry;
  79   4                                              break;
  80   4                              }
  81   3                                                      
  82   3                              Scr_clr();                                              //重新绘制显示界面
  83   3                              Set_addr(1,2);
  84   3                              if(CurIndex<4)                                          //绘制前四个菜单
  85   3                              {
  86   4                                      for(i=0;i<4;i++)
  87   4                                      {
  88   5                                              Set_addr(i+1,2);
  89   5                                              Write_str(Menu[i].name);
  90   5                                      }
  91   4      
  92   4                                      Set_addr(CurIndex+1,1);                 //绘制光标
  93   4                                      Write_char(62);                                         
  94   4                              }
  95   3                              else
  96   3                              {
  97   4                                      Set_addr(1,2);                                  //绘制后两个菜单
  98   4                                      Write_str(Menu[4].name);
  99   4                                      Set_addr(2,2);
 100   4                                      Write_str(Menu[5].name);
 101   4                                      
 102   4                                      Set_addr((CurIndex+1)%4,1);             //绘制光标
 103   4                                      Write_char(62);                                         
 104   4                         }
 105   3                      }
 106   2                      Key=ReadKey();
 107   2                      if(AlarmFlag)                                                           //如果闹铃开了,检测定时时间是否到了
 108   2                      {
 109   3                              Read_12887(DateBuf);
 110   3                              if((AlarmBuf[0]==DateBuf[3])&&(AlarmBuf[1]==DateBuf[4])&&(AlarmBuf[2]==DateBuf[5]))
 111   3                              {
 112   4                                      Scr_clr();
 113   4                                      delay1(5000);
 114   4                                      Set_addr(2,2);
 115   4                                      Write_str("定时时间到了");
 116   4                                      do{Key=ReadKey();}
 117   4                                      while(Key==0);
C51 COMPILER V7.50   MAIN                                                                  09/13/2006 09:30:06 PAGE 3   

 118   4                                      Key=2;
 119   4                              }
 120   3                      }
 121   2              }
 122   1      }
 123          //中断函数-------------------------------------------------------
 124          void extern0_ISR() interrupt 0
 125          {
 126   1              EX0=0;TR0=0;//WAV=0;
 127   1              Ex0Flag=1;
 128   1      }
 129          //函数定义部分----------------------------------------------------
 130          void delay1(unsigned int t)
 131          {
 132   1              while(--t);
 133   1      }
 134          //---------------------------------------------
 135          //函数:unsigned char ReadKey(void)
 136          //功能:按键扫描程序
 137          //返回:返回按键值
 138          //---------------------------------------------
 139          unsigned char ReadKey(void)
 140          {
 141   1              unsigned char KeyValue,a,i;
 142   1              char code keytbl[]={0x02,0x01,0x20,0x80};
 143   1              P2=P2|0xa3;         
 144   1              KeyValue=P2;
 145   1              KeyValue=~KeyValue;
 146   1              KeyValue=KeyValue&0xa3;
 147   1              if(!KeyValue) return(0);
 148   1              delay1(1000);
 149   1              P2=P2|0xa3;
 150   1              KeyValue=P2;
 151   1              KeyValue=~KeyValue;
 152   1              KeyValue=KeyValue&0xa3;
 153   1              if(!KeyValue) return(0);
 154   1              do{a=P2|~0xa3;}
 155   1              while(a!=0xff);
 156   1              for(i=0;i<4;i++)
 157   1                      if(KeyValue==keytbl[i])
 158   1                              return(i+1);
 159   1      }
 160          //---------------------------------
 161          //函数:char* itoa(unsigned char c)
 162          //功能:将数值转换成字符串
 163          //---------------------------------
 164          char* itoa(unsigned char c)
 165          {
 166   1              char str1[2];
 167   1              str1[0]=c/10+48;
 168   1              str1[1]=c%10+48;
 169   1              return(str1);
 170   1      }
 171          void ProcAlarm(void)
 172          {
 173   1              char *a;
 174   1              a=itoa(AlarmBuf[0]);                                    //时
 175   1              Time[DateTbl[3]]=a[0];Time[DateTbl[3]+1]=a[1];
 176   1              a=itoa(AlarmBuf[1]);                                    //分
 177   1              Time[DateTbl[4]]=a[0];Time[DateTbl[4]+1]=a[1];
 178   1              a=itoa(AlarmBuf[2]);                                    //秒
 179   1              Time[DateTbl[5]]=a[0];Time[DateTbl[5]+1]=a[1];
C51 COMPILER V7.50   MAIN                                                                  09/13/2006 09:30:06 PAGE 4   

 180   1      }
 181          void ProcTime(void)
 182          {
 183   1              char *a;
 184   1              a=itoa(DateBuf[3]);                                     //时
 185   1              Time[DateTbl[3]]=a[0];Time[DateTbl[3]+1]=a[1];
 186   1              a=itoa(DateBuf[4]);                                     //分
 187   1              Time[DateTbl[4]]=a[0];Time[DateTbl[4]+1]=a[1];
 188   1              a=itoa(DateBuf[5]);                                     //秒
 189   1              Time[DateTbl[5]]=a[0];Time[DateTbl[5]+1]=a[1];
 190   1      }
 191          void ProcDate(void)
 192          {
 193   1              char *a;
 194   1              a=itoa(DateBuf[0]);                                     //年
 195   1              Date[DateTbl[0]]=a[0];Date[DateTbl[0]+1]=a[1];
 196   1              a=itoa(DateBuf[1]);                                     //月
 197   1              Date[DateTbl[1]]=a[0];Date[DateTbl[1]+1]=a[1];
 198   1              a=itoa(DateBuf[2]);                                     //日
 199   1              Date[DateTbl[2]]=a[0];Date[DateTbl[2]+1]=a[1];
 200   1      }
 201          //------------------------------------------------------------
 202          //函数:void ShowTime(void)
 203          //功能:在液晶上显示时间
 204          //------------------------------------------------------------
 205          void ShowTime(void)
 206          {
 207   1              unsigned int t=0;                                               //时分秒添加到成字符串
 208   1              Key=0;
 209   1              Scr_clr();Set_addr(2,2);
 210   1              while(Key==0)
 211   1              {
 212   2                      Read_12887(DateBuf);                            //读取时间信息
 213   2              
 214   2                      ProcTime();                                                     //将数值转换成字符串
 215   2      
 216   2                      Set_addr(2,2);                                          //在液晶上显示
 217   2                      Write_str("当前时间为");
 218   2                      Set_addr(3,2);
 219   2                      Write_str(Time);
 220   2                      
 221   2                      Key=ReadKey();
 222   2                      delay1(5000);
 223   2              }
 224   1      }
 225          //------------------------------------------------------------------
 226          //函数:void ShowDateBuf(void)
 227          //功能:将读取的时间转换成字符串,在液晶中显示
 228          //-------------------------------------------------------------------
 229          void ShowDate(void)
 230          {
 231   1              Key=0;                                                          //年月日添加到成字符串
 232   1              Scr_clr();Set_addr(2,2);

⌨️ 快捷键说明

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