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

📄 main.lst

📁 很实用的单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 1   


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

line level    source

   1          /**********************HL-1实验开发板例程************************
   2          *  平台:HL-1 V6.2 + Keil U3 + STC89C52RD
   3          *  公司:慧净电子科技有限公司
   4          *  淘宝:http://shop37031453.taobao.com       
   5          *  网站:www.hlmcu.com
   6          *  编写:慧净
   7          *  日期:2008-8-08
   8          *   QQ : 121350852 398115088
   9          *  晶振:11.0592MHZ
  10          *  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
  11          *  论坛:http://hjdz.5d6d.com
  12          ******************************************************************/
  13          #include<reg52.h>
  14          #include<define.h>
  15          void delay(uint z)//延时函数
  16          {
  17   1              uint x,y;
  18   1              for(x=z;x>0;x--)
  19   1                      for(y=110;y>0;y--);
  20   1      }
  21          void di() //蜂鸣器报警声音
  22          {
  23   1              beep=0;
  24   1              delay(100);
  25   1              beep=1;
  26   1      }
  27          void write_com(uchar com)
  28          {//写液晶命令函数
  29   1              rs=0;
  30   1              lcden=0;
  31   1              P0=com;
  32   1              delay(3);
  33   1              lcden=1;
  34   1              delay(3);
  35   1              lcden=0;        
  36   1      }
  37          void write_date(uchar date)
  38          {//写液晶数据函数
  39   1              rs=1;
  40   1              lcden=0;
  41   1              P0=date;
  42   1              delay(3);
  43   1              lcden=1;
  44   1              delay(3);
  45   1              lcden=0;        
  46   1      }
  47          void init()
  48          {//初始化函数
  49   1              uchar num;
  50   1              EA=1;//打开总中断
  51   1              EX1=1;//开外部中断1
  52   1              IT1=1;//设置负跳变沿触发中断
  53   1              flag1=0;//变量初始化
  54   1              t0_num=0;
  55   1              s1num=0;
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 2   

  56   1              week=1;
  57   1              dula=0;//关闭数码管显示
  58   1              wela=0;
  59   1              lcden=0;
  60   1              rd=0;
  61   1      //以下几行在首次设置DS12C887时使用,以后不必再写入
  62   1              write_ds(0x0A,0x20);//打开振荡器
  63   1              write_ds(0x0B,0x26);//设置24小时模式,数据二进制格式
  64   1                                                      //开启闹铃中断
  65   1              set_time();//设置上电默认时间
  66   1      //-----------------------------------------------------*/
  67   1              write_com(0x38);//1602液晶初始化
  68   1              write_com(0x0c);
  69   1              write_com(0x06);
  70   1              write_com(0x01);
  71   1              write_com(0x80);
  72   1              for(num=0;num<15;num++)//写入液晶固定部分显示
  73   1                      {
  74   2                              write_date(table[num]);
  75   2                              delay(1);
  76   2                      }
  77   1              write_com(0x80+0x40);
  78   1              for(num=0;num<11;num++)
  79   1                      {
  80   2                              write_date(table1[num]);
  81   2                              delay(1);
  82   2                      }
  83   1      }
  84          void write_sfm(uchar add,char date)
  85          {//1602液晶刷新时分秒函数4为时,7为分,10为秒
  86   1              char shi,ge;
  87   1              shi=date/10;
  88   1              ge=date%10;
  89   1              write_com(0x80+0x40+add);
  90   1              write_date(0x30+shi);
  91   1              write_date(0x30+ge);
  92   1      }
  93          void write_nyr(uchar add,char date)
  94          {//1602液晶刷新年月日函数3为年,6为分,9为秒
  95   1              char shi,ge;
  96   1              shi=date/10;
  97   1              ge=date%10;
  98   1              write_com(0x80+add);
  99   1              write_date(0x30+shi);
 100   1              write_date(0x30+ge);
 101   1      }
 102          void write_week(char we)
 103          {//写液晶星期显示函数
 104   1              write_com(0x80+12);
 105   1              switch(we)
 106   1              {
 107   2                      case 1: write_date('M');delay(5);
 108   2                                      write_date('O');delay(5);
 109   2                                      write_date('N');
 110   2                                      break;
 111   2                      case 2: write_date('T');delay(5);
 112   2                                      write_date('U');delay(5);
 113   2                                      write_date('E');
 114   2                                      break;
 115   2                      case 3: write_date('W');delay(5);
 116   2                                      write_date('E');delay(5);
 117   2                                      write_date('D');
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 20:29:24 PAGE 3   

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

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

⌨️ 快捷键说明

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