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

📄 time.lst

📁 个人做的电子钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <stdio.h>
   2          #include <reg51.h>
   3          #include <math.h>
   4          //#include "eeprom.h"
   5          #define uchar  unsigned char
   6          #define uint   unsigned int
   7          #define BUSY  0x80                               //lcd忙检测标志
   8          #define LCD_DATA P0                             //定义P0口为LCD通讯端口
   9          sbit RS=P1^0;                                                            //数据/命令端
  10          sbit RW=P1^1;                                                            //读/写选择端
  11          sbit E=P1^3;
  12          sbit speaker=P1^2;                                      
  13          char second=0,minite=0,hour=0;    //定义并初始化时钟变量
  14          uint day=1,month=1,year=2000;           //定义并初始化日期变量
  15          uint k,k1,k2,s1,s2,s3,s4,m,n,x,y;
  16          int set=0,set1,set2;
  17          uchar mstcnt0=0,mstcnt1=0, status=0,ss=0,view=0;disturb=0,week1,next=0;
  18          //uchar *week[]={"SUN","MON","TUE","WEN","THU","FRI","SAT"}; 
  19          uchar code *week[]={"Today is Sunday   ","Today is Monday   ","Today is Tuesday  ","Today is Wednesday","T
             -oday is Thursday ","Today is Friday   ","Today is Saturday "};
  20          uchar idata string1[18];
  21          //uchar idata string2[22];
  22          uchar idata string2[]="is a leap year";
  23          uchar idata string3[]="isn't a leap year"; 
  24          //uchar idata time[]={0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00
             -,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00};
  25          /*uchar code datechina[3][8]= {{0x08,0x0f,0x12,0x0f,0x10a,0x1f,0x02,0x02},
  26                                        {0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00},
  27                                                                {0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00}};         */
  28          //char code gd[200];
  29          char code dateclock[7]={0x40,0x02,0x04,0x08,0x10,0x20,0x01};            
  30          char idata clockjudge[32]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  31                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  32                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  33                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  34                                     }; 
  35          //char idata stopwatchjudge[1][3];                                                               
  36          char idata hourjudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  37                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  38                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  40          char idata minitejudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  41                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  42                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  44          void delay(uint k);
  45          void init_timer0(void); 
  46          void init_timer1(void);                                                                                                 //LCD延时子程序
  47          void LCDInit(void);                                                                                                     //LCD初始化子程序
  48          void ReadStatus(void);                                                                                                  //LCD检测忙子程序
  49          void WriteCommand(uchar WC);                              //写指令到ICM子函数
  50          void WriteData(uchar WD);                                             //写数据到LCM子函数
  51          void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
  52          void DisplayListChar(uchar X,uchar Y,uchar *DData);                    //显示指定坐标的一串字符子函数
  53          void init_timer0(void);
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 2   

  54          void LCDchina(void);
  55          void displaytime(void);
  56          void displaydate(void);
  57          void displayclock(void);
  58          void displaystopwatch(void);
  59          void changehour(void);
  60          void changeminite(void);
  61          void changeyear(void);
  62          void changemonth(void);
  63          void changeday(void);
  64          void displaytimejudge(void);
  65          void displayclockjudge(void);
  66          //void displaystopwatchjudge(void);
  67          //void displaydateclock(void);
  68          //void displayhourjudge(void);
  69          //void displayminitejudge(void);
  70          void keyscan(void );
  71          void menu_key(void);                                                                                       
  72          void tab_key(void);
  73          void inc_key(void);
  74          void dec_key(void);
  75          void inc_time(void);
  76          void dec_time(void);
  77          void inc_stopwatch(void);
  78          void dec_stopwatch(void);
  79          void changesecond(void);
  80          void inc_clock(void);
  81          void dec_clock(void);
  82          void inc_stopwatch(void);
  83          void dec_stopwatch(void);
  84          int dayjudge(int year,int month);
  85          int date(int year,int month);
  86          int yearchange(int year);
  87          
  88          //void dishz(uint chn);
  89          //uchar inva(uchar m);
  90          /*********延时K*1ms,12.000mhz**********/
  91          
  92          void delay(uint k)
  93          {
  94   1          uint i,j;
  95   1          for(i=0;i<k;i++)
  96   1          {
  97   2              for(j=0;j<60;j++);
  98   2                      
  99   2          }
 100   1      }
 101          /**********写指令到LCD子函数************/
 102          
 103          void WriteCommand(uchar WC)
 104          {
 105   1          
 106   1              ReadStatus();
 107   1              LCD_DATA=WC;
 108   1          RS=0;                   // 选中指令寄存器
 109   1          RW=0;                       // 写模式       
 110   1          E=1;
 111   1              E=0;
 112   1      }
 113          
 114          /**********写数据到LCD子函数************/
 115          
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 3   

 116          void WriteData(uchar WD)
 117          {
 118   1          ReadStatus();               //检测忙信号
 119   1              LCD_DATA=WD;
 120   1          RS=1;                   // 选中数据寄存器
 121   1          RW=0;                   // 写模式
 122   1          E=1;
 123   1          E=0;
 124   1      }
 125          
 126          /***********LCD内部等待函数*************/
 127          
 128          
 129          void  ReadStatus(void)
 130          {
 131   1          LCD_DATA=0xff;      
 132   1              E=1;
 133   1          RS=0;                       
 134   1          RW=1;                       
 135   1          
 136   1          while(LCD_DATA&BUSY)
 137   1              {  E=0;
 138   2                 E=1;
 139   2                 }
 140   1              E=0;    
 141   1      }
 142          
 143          
 144          /**********LCD初始化子函数***********/
 145          
 146          void LCDInit(void) //LCM初始化
 147          {
 148   1              LCD_DATA=0;     
 149   1          WriteCommand(0x38);    //8bit数据传送,2行显示,5*7字型,检测忙信号
 150   1          WriteCommand(0x08);    //关闭显示,检测忙信号
 151   1          WriteCommand(0x01);    //清屏,检测忙信号
 152   1          //WriteCommand(0x06);    //显示光标右移设置,检测忙信号
 153   1          WriteCommand(0x0c);    //显示屏打开,光标不显示,不闪烁,检测忙信号
 154   1      }
 155          
 156          /****************显示指定坐标的一个字符子函数*************/
 157          
 158          void DisplayOneChar(uchar X,uchar Y,uchar DData)
 159          {
 160   1          Y&=1;
 161   1          X&=15;
 162   1          if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
 163   1          X|=0x80;                    //指令码为地址码+0X80
 164   1          WriteCommand(X);
 165   1          WriteData(DData);
 166   1      }
 167          
 168          /***********显示指定坐标的一串字符子函数***********/
 169          
 170          void DisplayListChar(uchar X,uchar Y,uchar  *DData)
 171          {
 172   1          uchar ListLength=0;
 173   1          Y&=0x01;
 174   1          X&=0x0f;
 175   1         while(DData[ListLength]!=0x00)
 176   1          {
 177   2              DisplayOneChar(X,Y,DData[ListLength]);
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 4   

 178   2              ListLength++;
 179   2              X++;
 180   2          }
 181   1      }
 182           /*
 183          void LCDchina(void)
 184          {
 185          unsigned char i=0;
 186          for(i=0;i<8;i++)
 187                {                       //也是CGRAM的地址AC不能到0,进行了这样的处理
 188                      WriteCommand(0x40+i);
 189                          
 190                  WriteData(datechina[j][i]);
 191                }
 192          }
 193           */
 194          
 195          /***************液晶显示时间子函数1*****************/
 196          
 197          void displaytimejudge(void)
 198          {                               
 199   1              DisplayOneChar(5,1,hour/10+0x30);                       //液晶上显示小时
 200   1              DisplayOneChar(6,1,hour%10+0x30);
 201   1      //      DisplayOneChar(7,1,0x3A);
 202   1              DisplayOneChar(8,1,minite/10+0x30);                     //液晶上显示分
 203   1              DisplayOneChar(9,1,minite%10+0x30);
 204   1      //      DisplayOneChar(10,1,0x3A);
 205   1              DisplayOneChar(11,1,second/10+0x30);            //液晶上显示秒
 206   1              DisplayOneChar(12,1,second%10+0x30);
 207   1              yearchange(year);
 208   1              DisplayOneChar(10,0,month/10+0x30);                     //液晶上显示月
 209   1              DisplayOneChar(11,0,month%10+0x30);
 210   1      //      DisplayOneChar(12,0,0x2D);
 211   1              DisplayOneChar(13,0,day/10+0x30);               //液晶上显示日
 212   1              DisplayOneChar(14,0,day%10+0x30);
 213   1          DisplayOneChar(5,0,s1+0x30);                        //液晶上显示年
 214   1              DisplayOneChar(6,0,s2+0x30);    
 215   1              DisplayOneChar(7,0,s3+0x30);    
 216   1              DisplayOneChar(8,0,s4+0x30);
 217   1      //      DisplayOneChar(9,0,0x2D);
 218   1      }
 219          
 220          
 221          /************液晶显示时间子函数3***************/
 222          
 223          void changeminite(void)
 224          {
 225   1              DisplayOneChar(5,1,hour/10+0x30);                     
 226   1              DisplayOneChar(6,1,hour%10+0x30);
 227   1      
 228   1              DisplayOneChar(8,1,minite/10+0x30);                     //液晶上显示分
 229   1              DisplayOneChar(9,1,minite%10+0x30);     
 230   1      
 231   1              delay(250);
 232   1              DisplayOneChar(8,1,0x20);
 233   1              DisplayOneChar(9,1,0x20);
 234   1              delay(250);
 235   1      }
 236          
 237          /**************液晶显示时间子函数2*****************/
 238          
 239          
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 5   

 240          void changehour(void)
 241          {
 242   1      
 243   1          DisplayOneChar(5,1,hour/10+0x30);                   //液晶上显示小时
 244   1              DisplayOneChar(6,1,hour%10+0x30);
 245   1      
 246   1          delay(250);
 247   1              DisplayOneChar(5,1,0x20);
 248   1              DisplayOneChar(6,1,0x20);
 249   1              delay(250);
 250   1      }
 251          
 252          /**************液晶显示日期子函数1*****************/
 253          void changesecond(void)
 254          {
 255   1          DisplayOneChar(8,1,minite/10+0x30);                 //液晶上显示分
 256   1              DisplayOneChar(9,1,minite%10+0x30);
 257   1              DisplayOneChar(11,1,second/10+0x30);            //液晶上显示秒
 258   1              DisplayOneChar(12,1,second%10+0x30);
 259   1              delay(250);
 260   1              DisplayOneChar(11,1,0x20);
 261   1              DisplayOneChar(12,1,0x20);
 262   1              delay(250);
 263   1      }
 264          
 265          /**************液晶显示日期子函数2*****************/
 266          void changeday(void)
 267          {
 268   1          DisplayOneChar(10,0,month/10+0x30);                 //液晶上显示月
 269   1              DisplayOneChar(11,0,month%10+0x30);
 270   1      
 271   1              DisplayOneChar(13,0,day/10+0x30);               //液晶上显示日
 272   1              DisplayOneChar(14,0,day%10+0x30);
 273   1      
 274   1          delay(250);
 275   1              DisplayOneChar(14,0,0x20);
 276   1              DisplayOneChar(13,0,0x20);
 277   1              delay(250);
 278   1      }
 279          /**************液晶显示日期子函数3*****************/
 280          void changemonth(void)
 281          {
 282   1              yearchange(year);
 283   1              DisplayOneChar(5,0,s1+0x30);                    //液晶上显示年
 284   1              DisplayOneChar(6,0,s2+0x30);    
 285   1              DisplayOneChar(7,0,s3+0x30);    
 286   1              DisplayOneChar(8,0,s4+0x30);
 287   1              DisplayOneChar(10,0,month/10+0x30);                     //液晶上显示月
 288   1              DisplayOneChar(11,0,month%10+0x30);
 289   1          delay(250);
 290   1              DisplayOneChar(11,0,0x20);
 291   1              DisplayOneChar(10,0,0x20);
 292   1              delay(250);
 293   1      }
 294          /**************液晶显示日期子函数4*****************/
 295          void changeyear(void)
 296          {
 297   1          DisplayOneChar(11,1,second/10+0x30);                //液晶上显示秒
 298   1              DisplayOneChar(12,1,second%10+0x30);
 299   1              yearchange(year);
 300   1          DisplayOneChar(5,0,s1+0x30);                        //液晶上显示年
 301   1              DisplayOneChar(6,0,s2+0x30);    
C51 COMPILER V8.02   TIME                                                                  08/15/2008 20:57:00 PAGE 6   

 302   1              DisplayOneChar(7,0,s3+0x30);    
 303   1              DisplayOneChar(8,0,s4+0x30);
 304   1          delay(250);
 305   1              DisplayOneChar(6,0,0x20);
 306   1              DisplayOneChar(7,0,0x20);
 307   1              DisplayOneChar(8,0,0x20);
 308   1              DisplayOneChar(5,0,0x20);
 309   1              delay(250);
 310   1      }
 311          void displayclockjudge(void)
 312          {
 313   1       DisplayOneChar(9,1,hourjudge[set]/10+0x30);
 314   1       DisplayOneChar(10,1,hourjudge[set]%10+0x30);
 315   1       DisplayOneChar(12,1,minitejudge[set]/10+0x30);
 316   1       DisplayOneChar(13,1,minitejudge[set]%10+0x30);
 317   1       DisplayListChar(8,0,"SMTWTFS");
 318   1       delay(250);
 319   1       for(m=0;m<7;m++)
 320   1       {
 321   2        if((clockjudge[set]&dateclock[m])==0)
 322   2         {DisplayOneChar(8+m,0,0x20);}
 323   2       }
 324   1       if(set1==1)
 325   1       {
 326   2        DisplayOneChar(9,1,0x20);
 327   2        DisplayOneChar(10,1,0x20);
 328   2       }
 329   1       if(set1==2)
 330   1       {
 331   2        DisplayOneChar(12,1,0x20);

⌨️ 快捷键说明

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