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

📄 timer01.lst

📁 这是用51开发的电子时钟
💻 LST
字号:
C51 COMPILER V8.05a   TIMER01                                                              02/07/2009 16:55:59 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE TIMER01
OBJECT MODULE PLACED IN timer01.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE timer01.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*shi fen miao 是char 型的为什么不用赋初值?
   2          *s1 能进行时分秒位选择,但只能选择一次
   3          *s2 不能完成对时分秒的位的加
   4          */
   5          #include<reg52.h>
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          uchar s1num;
   9          uchar count;
  10          char shi,fen,miao;
  11          uint i;
  12          sbit rs=P3^5;
  13          sbit lcden=P3^4;
  14          sbit s1=P2^0;
  15          sbit s2=P2^1;
  16          sbit s3=P2^2;
  17          uchar code table[]="  2007-7-30 MON";//第一行显示
  18          uchar code table1[]="    00:00:00";//第二行     共12个字符,地址从零开始计0~11
  19          /*液晶内延时函数*/
  20          void delay(uint z)
  21          {
  22   1        uint x,y;
  23   1        for(x=z;x>0;x--)
  24   1           for(y=110;y>0;y--);
  25   1      }
  26          /*1602液晶写指令初始化,条件是rs为低电平,E为高脉冲*/
  27          void write_com(uchar com)
  28          {
  29   1        rs=0;
  30   1        lcden=0;
  31   1        P0=com;//写入指令
  32   1        delay(5);//延时5ms
  33   1        lcden=1;
  34   1        delay(5);
  35   1        lcden=0;
  36   1      }
  37          /*1602液晶写数据初始化,条件是rs为高电平电平,E为高脉冲*/
  38          
  39          void write_date(uchar date)
  40          {
  41   1        rs=1;
  42   1        lcden=0;
  43   1        P0=date;//写入指令
  44   1        delay(5);//延时5ms
  45   1        lcden=1;
  46   1        delay(5);
  47   1        lcden=0;
  48   1      }
  49          /*初始化液晶1602,说明书上有初始化设置,设置液晶的显示方式*/
  50          void init()
  51          {
  52   1        lcden=0;
  53   1        write_com(0x38);//显示模式设置,设置为16*2,5*7点阵,8位数据接口
  54   1        write_com(0x0c);//开显示,不显示光标,光标不显示。
  55   1        write_com(0x06);//当读或写一个字符后地址指针加1,且光标加1。
C51 COMPILER V8.05a   TIMER01                                                              02/07/2009 16:55:59 PAGE 2   

  56   1        write_com(0x01);//刷新,数据指针清零、所有显示清零,不写的话刚显示会有一个黑团
  57   1        write_com(0x80);//初始化地址,默认地址80H从第二行开始显示write_com(0x80+0x40h)
  58   1         TMOD=0x01;
  59   1         TH0=(65536-50000)/256;//12mhZ
  60   1         TL0=(65536-50000)%256;//50MS
  61   1         EA=1;
  62   1         ET0=1;
  63   1         TR0=1;
  64   1        for (i=0;i<=12;i++)
  65   1         write_date(table[i]);
  66   1                write_com(0x80+0x40);
  67   1        for(i=0;i<12;i++)
  68   1           write_date(table1[i]);
  69   1      }
  70          void write_sfm(uchar add ,uchar date)//时分秒函数,add为地址变量,date为写入的时分秒
  71          {
  72   1         uchar shi ,ge;
  73   1         shi=date/10;
  74   1         ge=date%10;//分离date时分秒的十位和个位用数码管也得分离
  75   1         write_com(0x80+0x40+add);//时分秒的地址
  76   1         write_date(0x30+shi);//跟据acs码,先送十位
  77   1         write_date(0x30+ge);
  78   1      }
  79          void keyscan()
  80          {
  81   1          if(s1==0)
  82   1                 {
  83   2                    delay(5);
  84   2                        if(s1==0)
  85   2                        {     
  86   3                          s1num++;
  87   3                          while(!s1);
  88   3                          switch(s1num)
  89   3                          {
  90   4                            case 1: 
  91   4                                 {
  92   5                                    write_com(0x80+0x40+11);
  93   5                                write_com(0x0f);
  94   5                                TR0=0;
  95   5                                 }        break;
  96   4                            case 2:
  97   4                                  {
  98   5                                        write_com(0x80+0x40+8) ;
  99   5                                        write_com(0x0f);
 100   5                                        TR0=0; 
 101   5                                      }               break;
 102   4                                case 3:
 103   4                                  {
 104   5                                        write_com(0x80+0x40+5);
 105   5                                        write_com(0x0f);
 106   5                                        TR0=0;
 107   5                                      }               break;
 108   4                                default:
 109   4                                  {
 110   5                                        write_com(0x0c);
 111   5                                        TR0=1;
 112   5                                      }
 113   4                           }
 114   3                              }//s1键被按下
 115   2                        if(s1num!=0)
 116   2                        {
 117   3                               if(s2==0)
C51 COMPILER V8.05a   TIMER01                                                              02/07/2009 16:55:59 PAGE 3   

 118   3                       {
 119   4                                  delay(5);
 120   4                                  if(s2==0)
 121   4                                      {
 122   5                                         while(!s2);
 123   5                                         switch(s1num)
 124   5                                         {
 125   6                                case 1:
 126   6                                                  {
 127   7                                                        miao++;
 128   7                                                        if(miao==60) miao=0;
 129   7                                                        write_sfm(10,miao);
 130   7                                                      }  break;
 131   6                                                case 2:
 132   6                                                  {
 133   7                                                         fen++;
 134   7                                                         if(fen==60) fen=0;
 135   7                                                         write_sfm(7,fen);
 136   7                                                      }  break;
 137   6                                                default:
 138   6                                                  {
 139   7                                                         shi++;
 140   7                                                         if(shi==24) shi=0;
 141   7                                                         write_sfm(4,shi);
 142   7                                                      }
 143   6      
 144   6                                         }
 145   5                                      }
 146   4                               }
 147   3                        }      
 148   2                  }
 149   1              }
 150          
 151            void main()
 152          {
 153   1         init();
 154   1        while(1)
 155   1        {
 156   2          keyscan();
 157   2        }
 158   1      }
 159          void timer0() interrupt 1
 160          {
 161   1        TH0=(65536-50000)/256;
 162   1        TL0=(65536-50000)%256;
 163   1         count++;
 164   1       if(count==20)//1s
 165   1       {
 166   2          count=0;
 167   2          miao++;
 168   2          if(miao==60)// 判断秒是否到达60
 169   2          {
 170   3             miao=0;
 171   3             fen++;
 172   3             if(fen==60)
 173   3              {
 174   4                 fen=0;
 175   4                 shi++;
 176   4                 if (shi==24)
 177   4                 {
 178   5                      shi=0;
 179   5                  }
C51 COMPILER V8.05a   TIMER01                                                              02/07/2009 16:55:59 PAGE 4   

 180   4                  write_sfm(4,shi);
 181   4               }
 182   3               write_sfm(7,fen);
 183   3           }
 184   2           write_sfm(10,miao);//根据table1[]中秒的十位的地址
 185   2        } 
 186   1      
 187   1      }                


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    458    ----
   CONSTANT SIZE    =     29    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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