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

📄 main.lst

📁 很实用的单片机例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 18:40:18 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          *  名称:DS1302 LCD1602显示年月日、时钟
   4          *  公司:慧净电子科技有限公司
   5          *  淘宝:http://shop37031453.taobao.com       
   6          *  网站:www.hlmcu.com
   7          *  编写:慧净
   8          *  日期:2008-8-08
   9          *   QQ : 121350852 398115088
  10          *  晶振:11.0592MHZ
  11          *  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
  12          *  论坛:http://hjdz.5d6d.com
  13          ******************************************************************/
  14          //LCD1602对比度已调试好,可以直接使用。
  15          //操作方法如下:
  16          //1.正确安装液晶1602,请查看使用手册目录下的液晶安装方法。
  17          //2.下载本程序
  18          //该程序使用LCD1602显示
  19          //3.调节液晶对比度致液晶清晰显示字符,若已调节好可跳过此步。
  20          //4.实验板上S3键为功能键,按下后可选择调节哪个部分。
  21          //5.S7为数字增大键。
  22          //6.SB为数字减小键。
  23          #include<reg52.h>
  24          #define uint unsigned int
  25          #define uchar unsigned char
  26          uchar a,miao,shi,fen,ri,yue,nian,week,flag,temp,key1n;
  27          #define yh 0x80  //第一行的初始位置
  28          #define er 0x80+0x40 //第二行初始位置
  29          //sbit cs1=P3^7;
  30          //sbit ledk=P2^5;
  31          sbit dula=P2^6;
  32          sbit wela=P2^7;
  33          sbit wr=P1^1;
  34          sbit rs=P1^0;
  35          sbit en=P2^5;
  36          sbit SCLK=P2^1;  // 6  P1.1
  37          sbit IO=P2^0;    // 7  P1.0
  38          sbit RST=P2^4;   //时钟 5  P1.2
  39          sbit ACC0=ACC^0;
  40          sbit ACC7=ACC^7;
  41          sbit key=P3^7;
  42          sbit key1=P3^0;
  43          sbit key2=P3^1;
  44          sbit key3=P3^2;
  45          uchar code tab1[]={"2009-  -   THU"};
  46          uchar code tab2[]={"  :  :  "};
  47          void delay(uint xms)//延时函数
  48          {
  49   1              uint x,y;
  50   1              for(x=xms;x>0;x--)
  51   1               for(y=110;y>0;y--);
  52   1      }
  53          /******************液晶写入************************/
  54          write_1602com(uchar com)//液晶写入指令函数
  55          {
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 18:40:18 PAGE 2   

  56   1              rs=0;//置为写入命令
  57   1              P0=com;//送入数据
  58   1              delay(1);
  59   1              en=1;//拉高使能端
  60   1              delay(1);
  61   1              en=0;//完成高脉冲
  62   1      }
  63          write_1602dat(uchar dat)
  64          {
  65   1              rs=1;//置为写入数据
  66   1              P0=dat;//送入数据
  67   1              delay(1);
  68   1              en=1;
  69   1              delay(1);
  70   1              en=0;
  71   1      }
  72          /*********************over***********************/
  73          /********************ds1302****************************/
  74          void write_byte(uchar dat)
  75          {
  76   1              ACC=dat;
  77   1              RST=1;
  78   1              for(a=8;a>0;a--)
  79   1              {
  80   2                      IO=ACC0;
  81   2                      SCLK=0;
  82   2                      SCLK=1;
  83   2                      ACC=ACC>>1;
  84   2              }
  85   1      }
  86          uchar read_byte()
  87          {
  88   1              RST=1;
  89   1              for(a=8;a>0;a--)
  90   1              {
  91   2                      ACC7=IO;
  92   2                      SCLK=1;
  93   2                      SCLK=0;
  94   2                      ACC=ACC>>1;
  95   2      
  96   2              }
  97   1              return (ACC);
  98   1      }
  99          void write_1302(uchar add,uchar dat)
 100          {
 101   1      
 102   1              RST=0;
 103   1              SCLK=0;
 104   1              RST=1;
 105   1              write_byte(add);
 106   1              write_byte(dat);
 107   1              SCLK=1;
 108   1              RST=0;
 109   1      }
 110          uchar read_1302(uchar add)
 111          {
 112   1              uchar temp;
 113   1              RST=0;
 114   1              SCLK=0;
 115   1              RST=1;
 116   1              write_byte(add);
 117   1              temp=read_byte();
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 18:40:18 PAGE 3   

 118   1              SCLK=1;
 119   1              RST=0;
 120   1              return(temp);
 121   1      }
 122          uchar BCD_Decimal(uchar bcd)
 123          {
 124   1       uchar Decimal;
 125   1       Decimal=bcd>>4;
 126   1       return(Decimal=Decimal*10+(bcd&=0x0F));
 127   1      }
 128          void ds1302_init()
 129          {
 130   1      RST=0;
 131   1      SCLK=0;
 132   1      write_1302(0x80,miao|0x00);//允许写
 133   1      }
 134          
 135          
 136                  
 137          
 138          void write_sfm(uchar add,uchar dat)//写时分秒
 139          {
 140   1              uchar gw,sw;
 141   1              gw=dat%10;
 142   1              sw=dat/10;
 143   1              write_1602com(er+add);
 144   1              write_1602dat(0x30+sw);
 145   1              write_1602dat(0x30+gw);
 146   1                                      
 147   1      
 148   1      }
 149          void write_nyr(uchar add,uchar dat)
 150          {
 151   1              uchar gw,sw;
 152   1              gw=dat%10;
 153   1              sw=dat/10;
 154   1              write_1602com(yh+add);
 155   1              write_1602dat(0x30+sw);
 156   1              write_1602dat(0x30+gw);
 157   1              
 158   1      
 159   1      }
 160          void write_week(uchar week)//写星期函数
 161          {
 162   1              write_1602com(yh+0x0d);
 163   1              switch(week)
 164   1              {
 165   2                      case 1:write_1602dat('M');//delay(5);
 166   2                                 write_1602dat('O');//delay(5);
 167   2                                 write_1602dat('N');
 168   2                                 break;
 169   2                 
 170   2                      case 2:write_1602dat('T');//delay(5);
 171   2                                 write_1602dat('U');//delay(5);
 172   2                                 write_1602dat('E');
 173   2                                 break;
 174   2                      
 175   2                      case 3:write_1602dat('W');//delay(5);
 176   2                                 write_1602dat('E');//delay(5);
 177   2                                 write_1602dat('D');
 178   2                                 break;
 179   2                      
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 18:40:18 PAGE 4   

 180   2                      case 4:write_1602dat('T');//delay(5);
 181   2                                 write_1602dat('H');//delay(5);
 182   2                                 write_1602dat('U');
 183   2                                 break;
 184   2                      
 185   2                      case 5:write_1602dat('F');//delay(5);
 186   2                                 write_1602dat('R');//delay(5);
 187   2                                 write_1602dat('I');
 188   2                                 break;
 189   2                      
 190   2                      case 6:write_1602dat('S');//delay(5);
 191   2                                 write_1602dat('T');//delay(5);
 192   2                                 write_1602dat('A');
 193   2                                 break;
 194   2                      
 195   2                      case 7:write_1602dat('S');//delay(5);
 196   2                                 write_1602dat('U');//delay(5);
 197   2                                 write_1602dat('N');
 198   2                                 break;
 199   2      
 200   2      
 201   2      }
 202   1      
 203   1      
 204   1      
 205   1      }
 206          lcd_init()//液晶初始化函数
 207          {       wr=0;
 208   1              write_1602com(0x38);//设置液晶工作模式
 209   1              write_1602com(0x0c);//开显示不显示光标
 210   1              write_1602com(0x06);//整屏不移动,指针加一
 211   1              write_1602com(0x01);
 212   1              write_1602com(yh+2);//字符写入的位置
 213   1              for(a=0;a<14;a++)
 214   1              {
 215   2              write_1602dat(tab1[a]);
 216   2              //delay(3);
 217   2              }
 218   1              write_1602com(er+4);
 219   1              for(a=0;a<8;a++)
 220   1              {
 221   2              write_1602dat(tab2[a]);
 222   2              //delay(3);
 223   2              }
 224   1      
 225   1      }
 226          void keyscan()
 227          {
 228   1         key=0;
 229   1              if(key1==0)//key1为功能键
 230   1              {
 231   2              delay(5);
 232   2              if(key1==0)
 233   2              {
 234   3              while(!key1);
 235   3              key1n++;
 236   3              if(key1n==9)
 237   3                      key1n=1;
 238   3              switch(key1n)
 239   3              {
 240   4              
 241   4              case 1: TR0=0;//关闭定时器
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 18:40:18 PAGE 5   

 242   4                              //TR1=0;
 243   4                              write_1602com(er+0x0b);//写入光标位置
 244   4                              write_1602com(0x0f);//设置光标为闪烁
 245   4                              temp=(miao)/10*16+(miao)%10;
 246   4                              write_1302(0x8e,0x00);
 247   4                              write_1302(0x80,0x80|temp);//miao
 248   4                              write_1302(0x8e,0x80);
 249   4                              break;
 250   4              case 2:  write_1602com(er+8);//fen
 251   4                              
 252   4                           //write_1602com(0x0f);
 253   4                              break;
 254   4              case 3: write_1602com(er+5);//shi
 255   4                           //write_1602com(0x0f);
 256   4                              break;
 257   4              case 4: write_1602com(yh+0x0f);//week
 258   4                           //write_1602com(0x0f);
 259   4                              break;
 260   4              case 5: write_1602com(yh+0x0b);//ri
 261   4                           //write_1602com(0x0f);

⌨️ 快捷键说明

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