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

📄 shizhong.lst

📁 很实用的单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE SHIZHONG
OBJECT MODULE PLACED IN shizhong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shizhong.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h>
   2          #include<define.h>
   3          void delay(uint z)//延时函数
   4          {
   5   1              uint x,y;
   6   1              for(x=z;x>0;x--)
   7   1                      for(y=110;y>0;y--);
   8   1      }
   9          void di() //蜂鸣器报警声音
  10          {
  11   1              beep=0;
  12   1              delay(100);
  13   1              beep=1;
  14   1      }
  15          void write_com(uchar com)
  16          {//写液晶命令函数
  17   1              rs=0;
  18   1              lcden=0;
  19   1              P0=com;
  20   1              delay(3);
  21   1              lcden=1;
  22   1              delay(3);
  23   1              lcden=0;        
  24   1      }
  25          void write_date(uchar date)
  26          {//写液晶数据函数
  27   1              rs=1;
  28   1              lcden=0;
  29   1              P0=date;
  30   1              delay(3);
  31   1              lcden=1;
  32   1              delay(3);
  33   1              lcden=0;        
  34   1      }
  35          void init()
  36          {//初始化函数
  37   1              uchar num;
  38   1              EA=1;//打开总中断
  39   1              EX1=1;//开外部中断1
  40   1              IT1=1;//设置负跳变沿触发中断
  41   1              flag1=0;//变量初始化
  42   1              t0_num=0;
  43   1              s1num=0;
  44   1              week=1;
  45   1              dula=0;//关闭数码管显示
  46   1              wela=0;
  47   1              lcden=0;
  48   1              rd=0;
  49   1      //以下几行在首次设置DS12C887时使用,以后不必再写入
  50   1              write_ds(0x0A,0x20);//打开振荡器
  51   1              write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式
  52   1                                                      //开启闹铃中断
  53   1              set_time();//设置上电默认时间
  54   1      //-----------------------------------------------------*/
  55   1              write_com(0x38);//1602液晶初始化
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 2   

  56   1              write_com(0x0c);
  57   1              write_com(0x06);
  58   1              write_com(0x01);
  59   1              write_com(0x80);
  60   1              for(num=0;num<15;num++)//写入液晶固定部分显示
  61   1                      {
  62   2                              write_date(table[num]);
  63   2                              delay(1);
  64   2                      }
  65   1              write_com(0x80+0x40);
  66   1              for(num=0;num<11;num++)
  67   1                      {
  68   2                              write_date(table1[num]);
  69   2                              delay(1);
  70   2                      }
  71   1      }
  72          void write_sfm(uchar add,char date)
  73          {//1602液晶刷新时分秒函数4为时,7为分,10为秒
  74   1              char shi,ge;
  75   1              shi=date/10;
  76   1              ge=date%10;
  77   1              write_com(0x80+0x40+add);
  78   1              write_date(0x30+shi);
  79   1              write_date(0x30+ge);
  80   1      }
  81          void write_nyr(uchar add,char date)
  82          {//1602液晶刷新年月日函数3为年,6为分,9为秒
  83   1              char shi,ge;
  84   1              shi=date/10;
  85   1              ge=date%10;
  86   1              write_com(0x80+add);
  87   1              write_date(0x30+shi);
  88   1              write_date(0x30+ge);
  89   1      }
  90          void write_week(char we)
  91          {//写液晶星期显示函数
  92   1              write_com(0x80+12);
  93   1              switch(we)
  94   1              {
  95   2                      case 1: write_date('M');delay(5);
  96   2                                      write_date('O');delay(5);
  97   2                                      write_date('N');
  98   2                                      break;
  99   2                      case 2: write_date('T');delay(5);
 100   2                                      write_date('U');delay(5);
 101   2                                      write_date('E');
 102   2                                      break;
 103   2                      case 3: write_date('W');delay(5);
 104   2                                      write_date('E');delay(5);
 105   2                                      write_date('D');
 106   2                                      break;
 107   2                      case 4: write_date('T');delay(5);
 108   2                                      write_date('H');delay(5);
 109   2                                      write_date('U');
 110   2                                      break;
 111   2                      case 5: write_date('F');delay(5);
 112   2                                      write_date('R');delay(5);
 113   2                                      write_date('I');
 114   2                                      break;
 115   2                      case 6: write_date('S');delay(5);
 116   2                                      write_date('A');delay(5);
 117   2                                      write_date('T');
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 3   

 118   2                                      break;
 119   2                      case 7: write_date('S');delay(5);
 120   2                                      write_date('U');delay(5);
 121   2                                      write_date('N');
 122   2                                      break;
 123   2              }
 124   1      }
 125          void keyscan()
 126          {
 127   1              if(flag_ri==1)
 128   1              {//这里用来取消闹钟报警,任一键取消报警
 129   2                      if((s1==0)||(s2==0)||(s3==0)||(s4==0))
 130   2                      {       
 131   3                              delay(5);
 132   3                              if((s1==0)||(s2==0)||(s3==0)||(s4==0))
 133   3                              {
 134   4                                      while(!(s1&&s2&&s3&&s4));
 135   4                      di();
 136   4                                      flag_ri=0;//清除报警标志
 137   4                              }               
 138   3                      }
 139   2              }       
 140   1              if(s1==0)//检测S1
 141   1              {
 142   2                      delay(5);
 143   2                      if(s1==0)
 144   2                      {       
 145   3                              s1num++;//记录按下次数
 146   3                              if(flag1==1)
 147   3                                      if(s1num==4)
 148   3                                              s1num=1;
 149   3                              flag=1;
 150   3                              while(!s1);di();
 151   3                              switch(s1num)
 152   3                              {//光标闪烁点定位
 153   4                                      case 1: write_com(0x80+0x40+10);
 154   4                                                  write_com(0x0f);
 155   4                                                      break;
 156   4                                      case 2: write_com(0x80+0x40+7);
 157   4                                                      break;
 158   4                                      case 3: write_com(0x80+0x40+4);
 159   4                                                      break;
 160   4                                      case 4: write_com(0x80+12);
 161   4                                                      break;
 162   4                                      case 5: write_com(0x80+9);
 163   4                                                      break;
 164   4                                      case 6: write_com(0x80+6);
 165   4                                                      break;
 166   4                                      case 7: write_com(0x80+3);
 167   4                                                      break;
 168   4                                      case 8: s1num=0;
 169   4                                                      write_com(0x0c);
 170   4                                                      flag=0;
 171   4                                                      write_ds(0,miao);
 172   4                                                      write_ds(2,fen);
 173   4                                                      write_ds(4,shi);
 174   4                                                      write_ds(6,week);
 175   4                                                      write_ds(7,day);
 176   4                                                      write_ds(8,month);
 177   4                                                      write_ds(9,year);
 178   4                                                      break;
 179   4                              }       
C51 COMPILER V7.00  SHIZHONG                                                               10/10/2009 01:46:38 PAGE 4   

 180   3                      }
 181   2              }
 182   1              if(s1num!=0)//只有当S1按下后,才检测S2和S3
 183   1              {
 184   2                      if(s2==0)
 185   2                      {
 186   3                              delay(1);
 187   3                              if(s2==0)
 188   3                              {
 189   4                                      while(!s2);di();
 190   4                                      switch(s1num)
 191   4                                      {//根据功能键次数调节相应数值
 192   5                                              case 1: miao++;
 193   5                                                              if(miao==60)
 194   5                                                                      miao=0;
 195   5                                                              write_sfm(10,miao);
 196   5                                                              write_com(0x80+0x40+10); 
 197   5                                                              break;
 198   5                                              case 2: fen++;
 199   5                                                              if(fen==60)
 200   5                                                                      fen=0;
 201   5                                                              write_sfm(7,fen);
 202   5                                                              write_com(0x80+0x40+7); 
 203   5                                                              break;
 204   5                                              case 3: shi++;
 205   5                                                              if(shi==24)
 206   5                                                                      shi=0;
 207   5                                                              write_sfm(4,shi);
 208   5                                                              write_com(0x80+0x40+4); 
 209   5                                                              break;
 210   5                                              case 4: week++;
 211   5                                                              if(week==8)
 212   5                                                                      week=1;
 213   5                                                              write_week(week);
 214   5                                                              write_com(0x80+12);
 215   5                                                              break;

⌨️ 快捷键说明

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