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

📄 time.lst

📁 使用C语言编写的单片机控制LCD显示程序
💻 LST
字号:
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND TABS(2)

stmt level    source

   1          #include <AT89X52.H>
   2          #include <absacc.h>
   3          
   4          #define  uchar  unsigned char
   5          #define  uint   unsigned int
   6          
   7          extern void delay(uint dtime);
   8          /*串口操作 *************************                  ******************************/
   9          extern char getbyte(void);        //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
  10          extern putbyte(char c);         //放入一个字节到发送缓冲区
  11          extern putstring(uchar  *puts);     //发送一个定义在程序存储区的字符串到串口
  12          extern putbytes(uchar *outplace,uint j);//放一串数据到发送缓冲区,需要定义发送的字节数
  13          extern puthex(uchar c);         //发送一个字节的hex码,分成两个字节发。
  14          extern  bit   inbufsign;        //串口接收到数据标志
  15          extern void serial_init (void);       //串口初始化
  16          #define CR putstring("\r\n")      //发送一个回车换行
  17          
  18          /*液晶操作***/
  19          extern void lcd_cls(void);              //清屏
  20          extern void lcd_string(uchar attr,uchar *string);   //显示字符串
  21          extern void lcd_rect();
  22          extern void lcd_char(uchar attr,uchar num);
  23          extern void lcd_char1(uchar attr,uchar num);
  24          extern void lcd_cursor(uchar x, uchar y);
  25          //8279操作
  26          extern void init8279();
  27          //变量声明
  28          //不能对绝对变量进行初始化,对于函数和bit类型变量不能采用这种方法进行绝对地址定位
  29          uchar xdata time_num[6] _at_ 0x2020;
  30          uchar xdata time_num1[6] _at_ 0x2030;
  31          
  32          uchar xdata s0 _at_ 0x2000;
  33          uchar xdata s1 _at_ 0x2001;
  34          uchar xdata m0 _at_ 0x2002;
  35          uchar xdata m1 _at_ 0x2003;
  36          uchar xdata h0 _at_ 0x2004;
  37          uchar xdata h1 _at_ 0x2005;
  38          
  39          uint  xdata num _at_ 0x2006 ;
  40          
  41          uchar data aa=0,key_data=0;
  42          bit bdata flag1=0,flag2=0; //flag2控制第一次输出00:00:00
  43          //**********键盘操作
  44          extern uchar data key;
  45          //函数声明
  46          bit GetKeyInput(void);
  47          void updatetime();
  48          void time_1ms();
  49          //变量初始化
  50          void var_init()
  51          {
  52   1        s0=0;
  53   1        s1=0;
  54   1        m0=0;
  55   1        m1=0;
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 2   

  56   1        h0=0;
  57   1        h1=0;
  58   1        num=0;
  59   1      }
  60          
  61          //函数定义
  62          void func_up() //按下向上键时的处理函数
  63          {
  64   1        if(aa==1||aa==3)
  65   1          {
  66   2            time_num[aa-1]++;
  67   2            if(time_num[aa-1]==10)
  68   2              time_num[aa-1]=0;
  69   2              return;
  70   2          }
  71   1        if(aa==2||aa==4)
  72   1          {
  73   2            time_num[aa-1]++;
  74   2            if(time_num[aa-1]==6)
  75   2              time_num[aa-1]=0; 
  76   2              return;                 
  77   2          } 
  78   1         if(aa==5&&time_num[5]<=1)
  79   1            {
  80   2              time_num[aa-1]++;
  81   2              if(time_num[aa-1]==10)
  82   2                time_num[aa-1]=0;
  83   2                return; 
  84   2            }
  85   1          if(aa==6)
  86   1            {
  87   2              time_num[aa-1]++;
  88   2              if(time_num[aa-1]==3)
  89   2                time_num[aa-1]=0;     
  90   2            }                 
  91   1      
  92   1      }
  93          void func_down()//按下向下键时的处理函数
  94          {
  95   1        if(aa==1||aa==3)
  96   1        {
  97   2          if(time_num[aa-1]==0)
  98   2            time_num[aa-1]=10;
  99   2            time_num[aa-1]--;
 100   2            return;
 101   2          
 102   2        }
 103   1        if(aa==2||aa==4)
 104   1        {
 105   2          if(time_num[aa-1]==0)
 106   2            time_num[aa-1]=6; 
 107   2            time_num[aa-1]--;
 108   2            return;
 109   2                            
 110   2        } 
 111   1        if(aa==5&&time_num[5]<=1)
 112   1          {
 113   2            if(time_num[aa-1]==0)
 114   2            time_num[aa-1]=10;    
 115   2            time_num[aa-1]--;
 116   2            return;
 117   2          }
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 3   

 118   1        if(aa==6)
 119   1          {
 120   2            switch(time_num[aa-1])
 121   2              {
 122   3                case 2:
 123   3                  time_num[aa-1]=1;
 124   3                  break;
 125   3                case 1:
 126   3                  time_num[aa-1]=0;
 127   3                  break;
 128   3                case 0:
 129   3                  time_num[aa-1]=2;
 130   3                  break;    
 131   3              }
 132   2          }                   
 133   1      
 134   1      }
 135          void time_out()
 136          {   
 137   1          if(flag2==0) //第一次输出"00:00:00"
 138   1            {
 139   2              lcd_cls();
 140   2              flag2=1;
 141   2              lcd_cursor(3,1);
 142   2              lcd_string(0,"00:00:00");
 143   2            }
 144   1         if(time_num[5]!=time_num1[5])
 145   1            {
 146   2              lcd_cursor(3,1);
 147   2              lcd_char1(0,time_num[5]);
 148   2              time_num1[5]=time_num[5];
 149   2            }   
 150   1      
 151   1         if(time_num[4]!=time_num1[4])
 152   1            {
 153   2              lcd_cursor(4,1);
 154   2              lcd_char1(0,time_num[4]);
 155   2              time_num1[4]=time_num[4];
 156   2            }
 157   1      
 158   1          if(time_num[3]!=time_num1[3])
 159   1            {
 160   2              lcd_cursor(6,1);
 161   2              lcd_char1(0,time_num[3]);
 162   2              time_num1[3]=time_num[3];
 163   2            }
 164   1      
 165   1          if(time_num[2]!=time_num1[2])
 166   1            {
 167   2              lcd_cursor(7,1);
 168   2              lcd_char1(0,time_num[2]);
 169   2              time_num1[2]=time_num[2];
 170   2            }
 171   1      
 172   1          if(time_num[1]!=time_num1[1])
 173   1            {
 174   2              lcd_cursor(9,1);  
 175   2              lcd_char1(0,time_num[1]);
 176   2              time_num1[1]=time_num[1];
 177   2            }
 178   1      
 179   1          lcd_cursor(10,1);
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 4   

 180   1          lcd_char1(0,time_num[0]);
 181   1      }
 182          void init_main()
 183          {
 184   1        
 185   1        serial_init();  
 186   1        init8279();
 187   1        var_init();
 188   1      //**************
 189   1        T2CON=0x00;
 190   1        RCAP2L=(65536-1843)%256;
 191   1        RCAP2H=(65536-1843)/256;
 192   1        TL2 = RCAP2L;
 193   1        TH2 = RCAP2H;
 194   1        ET2 = 1; // 允许T2中断  
 195   1        TR2=1;//启动定时器
 196   1      //********************* 
 197   1        lcd_cls();
 198   1        delay(100);
 199   1      }
 200          void get_data()
 201          {
 202   1       if(num==1000)
 203   1        {
 204   2          flag1=1;
 205   2          updatetime();
 206   2          num=0;
 207   2          time_num[0]=s0;
 208   2          time_num[1]=s1;
 209   2          time_num[2]=m0;
 210   2          time_num[3]=m1;
 211   2          time_num[4]=h0;
 212   2          time_num[5]=h1;
 213   2         }
 214   1      }
 215          void main(void) //recursive 递归
 216          {
 217   1        init_main();
 218   1        for(;;)
 219   1        { 
 220   2          if(GetKeyInput()==1)
 221   2            {                 
 222   3                  if(key_data==3)
 223   3                      {
 224   4                        aa++;
 225   4                        TR2=0;  //关定时器
 226   4                        flag1=1; //保证每次修改数据后进行LCD刷新
 227   4                      }
 228   3                  if(aa==7)
 229   3                      aa=1; 
 230   3                  switch(key_data)
 231   3                    {
 232   4                      case 1: 
 233   4                          func_up();
 234   4                          flag1=1; //保证每次修改数据后进行LCD刷新
 235   4                          break;
 236   4                      case 2:
 237   4                          func_down();
 238   4                          flag1=1; //保证每次修改数据后进行LCD刷新
 239   4                          break;
 240   4                      case 4: //完成设置
 241   4                          s0=time_num[0];
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 5   

 242   4                          s1=time_num[1];
 243   4                          m0=time_num[2];
 244   4                          m1=time_num[3];
 245   4                          h0=time_num[4];
 246   4                          h1=time_num[5]; 
 247   4                          TR2=1;  //重新启动定时器
 248   4                          break;    
 249   4                    }
 250   3             }
 251   2          if(flag1==1)
 252   2            {
 253   3              flag1=0;
 254   3              time_out();               
 255   3            }
 256   2        }
 257   1      
 258   1      }
 259          
 260          bit GetKeyInput(void)
 261          {  
 262   1        uchar bdata flag=0;//由数据时为1
 263   1        switch(key)
 264   1          {
 265   2            case 0x00:
 266   2                  return 0;
 267   2            case 0xd2:
 268   2               key_data=1;//上
 269   2               flag=1;
 270   2               break;
 271   2            case 0xda: //下
 272   2              key_data=2;
 273   2              flag=1;
 274   2              break;
 275   2            case 0xdb://左
 276   2               key_data=3;
 277   2               flag=1;
 278   2               break;
 279   2            case 0xdc:
 280   2               key_data=4; //完成
 281   2               flag=1;
 282   2               break;  
 283   2          }
 284   1          key=0; 
 285   1          return flag;  
 286   1      }
 287          
 288          //定时器0中断处理函数
 289          void time_1ms() interrupt 5//定时一毫秒
 290          {
 291   1        TF2=0; //软件清除T2溢出标志
 292   1        num++;
 293   1        get_data();
 294   1      }
 295          //计时函数
 296          void updatetime()
 297          {
 298   1        if(s0==9) //如果10ms位需要进位,则进入语句
 299   1        {
 300   2          s0=0;
 301   2          if(s1==5) //如果100ms位需要进位,则进入语句
 302   2          {
 303   3            s1=0;
C51 COMPILER V7.06   TIME                                                                  09/02/2005 08:49:54 PAGE 6   

 304   3            if(m0==9) //如果1sec位需要进位,则进入语句
 305   3            {
 306   4              m0=0;
 307   4              if(m1==5) //如果10sec位需要进位,则进入语句
 308   4              {
 309   5                m1=0;
 310   5                if(h0==9&&h1<=1)
 311   5                {h0=0;
 312   6                h1++;}
 313   5                else if(h0==3&&h1==2)
 314   5                {h0=0;
 315   6                h1=0;}
 316   5                else h0++;
 317   5              }
 318   4              else m1++;
 319   4            }
 320   3            else m0++;
 321   3          }
 322   2          else s1++;
 323   2        }
 324   1        else s0++;
 325   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1094    ----
   CONSTANT SIZE    =      9    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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