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

📄 1602.lst

📁 单片机项目19-电子日历(1602显示)
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.02   1602                                                                  04/07/2012 10:23:53 PAGE 1   


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

line level    source

   1          /*************************************************************/
   2          //          利用1602显示万年历,同时显示温度信息
   3          /*************************************************************/ 
   4          #include <REG51.H>
   5          #include <intrins.h>
   6          #define uint unsigned int
   7          #define uchar unsigned char
   8          sbit  DS1302_CLK = P3^7;              //实时时钟时钟线引脚 
   9          sbit  DS1302_IO  = P1^0;              //实时时钟数据线引脚 
  10          sbit  DS1302_RST = P1^1;              //实时时钟复位线引脚
  11          sbit  ACC0 = ACC^0;
  12          sbit  ACC7 = ACC^7;
  13          char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;  //秒,分,时到日,月,年位闪的计数
  14          sbit Set = P1^4;       //模式切换键
  15          sbit Up = P1^5;        //加按钮
  16          sbit Down = P1^6;      //减按钮
  17          sbit out = P1^7;       //立刻跳出调整模式按钮
  18          sbit DQ = P2^7;        //温度传送数据IO口
  19          char done,count,temp,flag,up_flag,down_flag;
  20          uchar temp_value;      //温度值
  21          uchar TempBuffer[5],week_value[2];
  22          
  23          
  24          void show_time();   //液晶显示程序
  25          /***********1602液晶显示部分子程序****************/
  26          
  27          
  28          //Port Definitions**********************************************************
  29          sbit LcdRs              = P2^2;
  30          sbit LcdRw              = P2^1;
  31          sbit LcdEn      = P2^0;
  32          sfr  DBPort     = 0x80;         //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
  33          
  34          //内部等待函数**************************************************************************
  35          unsigned char LCD_Wait(void)
  36          {
  37   1              LcdRs=0;
  38   1              LcdRw=1;        _nop_();
  39   1              LcdEn=1;        _nop_();
  40   1                                                       
  41   1              LcdEn=0;
  42   1              return DBPort;          
  43   1      }
  44          //向LCD写入命令或数据************************************************************
  45          #define LCD_COMMAND                     0      // Command
  46          #define LCD_DATA                        1      // Data
  47          #define LCD_CLEAR_SCREEN        0x01      // 清屏
  48          #define LCD_HOMING              0x02      // 光标返回原点
  49          void LCD_Write(bit style, unsigned char input)
  50          {
  51   1              LcdEn=0;
  52   1              LcdRs=style;
  53   1              LcdRw=0;                _nop_();
  54   1              DBPort=input;   _nop_();//注意顺序
  55   1              LcdEn=1;                _nop_();//注意顺序
C51 COMPILER V8.02   1602                                                                  04/07/2012 10:23:53 PAGE 2   

  56   1              LcdEn=0;                _nop_();
  57   1              LCD_Wait();     
  58   1      }
  59          
  60          //设置显示模式************************************************************
  61          #define LCD_SHOW                        0x04    //显示开
  62          #define LCD_HIDE                        0x00    //显示关          
  63          
  64          #define LCD_CURSOR                      0x02    //显示光标
  65          #define LCD_NO_CURSOR           0x00    //无光标                     
  66          
  67          #define LCD_FLASH                       0x01    //光标闪动
  68          #define LCD_NO_FLASH            0x00    //光标不闪动
  69          
  70          void LCD_SetDisplay(unsigned char DisplayMode)
  71          {
  72   1              LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
  73   1      }
  74          
  75          //设置输入模式************************************************************
  76          #define LCD_AC_UP                       0x02
  77          #define LCD_AC_DOWN                     0x00      // default
  78          
  79          #define LCD_MOVE                        0x01      // 画面可平移
  80          #define LCD_NO_MOVE                     0x00      //default
  81          
  82          void LCD_SetInput(unsigned char InputMode)
  83          {
  84   1              LCD_Write(LCD_COMMAND, 0x04|InputMode);
  85   1      }
  86          
  87          //初始化LCD************************************************************
  88          void LCD_Initial()
  89          {
  90   1              LcdEn=0;
  91   1              LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
  92   1              LCD_Write(LCD_COMMAND,0x38);
  93   1              LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
  94   1              LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  95   1              LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
  96   1      }
  97          
  98          //液晶字符输入的位置************************
  99          void GotoXY(unsigned char x, unsigned char y)
 100          {
 101   1              if(y==0)
 102   1                      LCD_Write(LCD_COMMAND,0x80|x);
 103   1              if(y==1)
 104   1                      LCD_Write(LCD_COMMAND,0x80|(x-0x40));
 105   1      }
 106          //将字符输出到液晶显示
 107          void Print(unsigned char *str)
 108          {
 109   1              while(*str!='\0')
 110   1              {
 111   2                      LCD_Write(LCD_DATA,*str);
 112   2                      str++;
 113   2              }
 114   1      }
 115          /***********DS1302时钟部分子程序******************/
 116          typedef struct __SYSTEMTIME__
 117          {
C51 COMPILER V8.02   1602                                                                  04/07/2012 10:23:53 PAGE 3   

 118                  unsigned char Second;
 119                  unsigned char Minute;
 120                  unsigned char Hour;
 121                  unsigned char Week;
 122                  unsigned char Day;
 123                  unsigned char Month;
 124                  unsigned char Year;
 125                  unsigned char DateString[11];
 126                  unsigned char TimeString[9];
 127          }SYSTEMTIME;                                                    //定义的时间类型
 128          SYSTEMTIME CurrentTime;
 129          
 130          
 131          #define AM(X)   X
 132          #define PM(X)   (X+12)                    // 转成24小时制
 133          #define DS1302_SECOND   0x80          //时钟芯片的寄存器位置,存放时间
 134          #define DS1302_MINUTE   0x82
 135          #define DS1302_HOUR             0x84 
 136          #define DS1302_WEEK             0x8A
 137          #define DS1302_DAY              0x86
 138          #define DS1302_MONTH    0x88
 139          #define DS1302_YEAR             0x8C 
 140          
 141          void DS1302InputByte(unsigned char d)   //实时时钟写入一字节(内部函数)
 142          { 
 143   1          unsigned char i;
 144   1          ACC = d;
 145   1          for(i=8; i>0; i--)
 146   1          {
 147   2              DS1302_IO = ACC0;               //相当于汇编中的 RRC
 148   2              DS1302_CLK = 1;
 149   2              DS1302_CLK = 0;
 150   2              ACC = ACC >> 1; 
 151   2          } 
 152   1      }
 153          
 154          unsigned char DS1302OutputByte(void)    //实时时钟读取一字节(内部函数)
 155          { 
 156   1          unsigned char i;
 157   1          for(i=8; i>0; i--)
 158   1          {
 159   2              ACC = ACC >>1;                          //相当于汇编中的 RRC 
 160   2              ACC7 = DS1302_IO;
 161   2              DS1302_CLK = 1;
 162   2              DS1302_CLK = 0;
 163   2          } 
 164   1          return(ACC); 
 165   1      }
 166          
 167          void Write1302(unsigned char ucAddr, unsigned char ucDa)        //ucAddr: DS1302地址, ucData: 要写的数据
 168          {
 169   1          DS1302_RST = 0;
 170   1          DS1302_CLK = 0;
 171   1          DS1302_RST = 1;
 172   1          DS1302InputByte(ucAddr);            // 地址,命令 
 173   1          DS1302InputByte(ucDa);              // 写1Byte数据
 174   1          DS1302_CLK = 1;
 175   1          DS1302_RST = 0;
 176   1      } 
 177          
 178          unsigned char Read1302(unsigned char ucAddr)    //读取DS1302某地址的数据
 179          {
C51 COMPILER V8.02   1602                                                                  04/07/2012 10:23:53 PAGE 4   

 180   1          unsigned char ucData;
 181   1          DS1302_RST = 0;
 182   1          DS1302_CLK = 0;
 183   1          DS1302_RST = 1;
 184   1          DS1302InputByte(ucAddr|0x01);        // 地址,命令 
 185   1          ucData = DS1302OutputByte();         // 读1Byte数据
 186   1          DS1302_CLK = 1;
 187   1          DS1302_RST = 0;
 188   1          return(ucData);
 189   1      }
 190          
 191          
 192          
 193          void DS1302_GetTime(SYSTEMTIME *Time)  //获取时钟芯片的时钟数据到自定义的结构型数组
 194          {
 195   1              unsigned char ReadValue;
 196   1              ReadValue = Read1302(DS1302_SECOND);
 197   1              Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

⌨️ 快捷键说明

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