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

📄 time.lst

📁 电子时钟带有闹钟功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   TIME                                                                  06/05/2008 19:24:28 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^2;
  12          sbit speaker=P1^3;                                      
  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,j,m,n;
  16          int set=0,set1,weekjudge;
  17          uchar mstcnt0=0,mstcnt1=0, status=0,ss=0,view=0;disturb=0,clockview;
  18          //uchar *week[]={"SUN","MON","TUE","WEN","THU","FRI","SAT"}; 
  19          //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};
  20          /*uchar code datechina[3][8]= {{0x08,0x0f,0x12,0x0f,0x10a,0x1f,0x02,0x02},
  21                                        {0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00},
  22                                                                {0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00}};         */
  23          //char code gd[200];
  24          //char idata dateclock[7]={0x40,0x02,0x04,0x08,0x10,0x20,0x01};         
  25          char idata clockjudge[32]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  26                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  27                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  28                                                             0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
  29                                     }; 
  30          //char idata stopwatchjudge[1][3];                                                               
  31          char idata hourjudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  32                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  33                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  34                                   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  35          char idata minitejudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36                                   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          void delay(uint k);
  40          void init_timer0(void); 
  41          void init_timer1(void);                                                                                                 //LCD延时子程序
  42          void LCDInit(void);                                                                                                     //LCD初始化子程序
  43          void ReadStatus(void);                                                                                                  //LCD检测忙子程序
  44          void WriteCommand(uchar WC);                              //写指令到ICM子函数
  45          void WriteData(uchar WD);                                             //写数据到LCM子函数
  46          void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
  47          void DisplayListChar(uchar X,uchar Y,uchar *DData);                    //显示指定坐标的一串字符子函数
  48          void init_timer0(void);
  49          //void LCDchina(void);
  50          void displaytime(void);
  51          //void displaydate(void);
  52          void displayclock(void);
  53          //void displaystopwatch(void);
  54          void changehour(void);
C51 COMPILER V8.02   TIME                                                                  06/05/2008 19:24:28 PAGE 2   

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

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

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

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

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

⌨️ 快捷键说明

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