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

📄 ds1302.lst

📁 1302是用来输出北京时间的,18b20用来检测温度,输出在ds1302上显示,有仿真文件
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 1   


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

line level    source

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

  56   1              LcdRw=0;                _nop_();
  57   1              DBPort=input;   _nop_();//注意顺序
  58   1              LcdEn=1;                _nop_();//注意顺序
  59   1              LcdEn=0;                _nop_();
  60   1              LCD_Wait();     
  61   1      }
  62          
  63          //设置显示模式************************************************************
  64          #define LCD_SHOW                        0x04    //显示开
  65          #define LCD_HIDE                        0x00    //显示关          
  66          
  67          #define LCD_CURSOR                      0x02    //显示光标
  68          #define LCD_NO_CURSOR           0x00    //无光标                     
  69          
  70          #define LCD_FLASH                       0x01    //光标闪动
  71          #define LCD_NO_FLASH            0x00    //光标不闪动
  72          
  73          void LCD_SetDisplay(unsigned char DisplayMode)
  74          {
  75   1              LCD_Write(LCD_COMMAND, 0x08|DisplayMode);       
  76   1      }
  77          
  78          //设置输入模式************************************************************
  79          #define LCD_AC_UP                       0x02
  80          #define LCD_AC_DOWN                     0x00      // default
  81          
  82          #define LCD_MOVE                        0x01      // 画面可平移
  83          #define LCD_NO_MOVE                     0x00      //default
  84          
  85          void LCD_SetInput(unsigned char InputMode)
  86          {
  87   1              LCD_Write(LCD_COMMAND, 0x04|InputMode);
  88   1      }
  89          
  90          
  91          sbit P30=P3^0;
  92          sbit P31=P3^1;
  93          sbit P32=P3^2;
  94          sbit P33=P3^3;
  95          sbit P34=P3^4;
  96          sbit P35=P3^5;
  97          sbit P36=P3^6;
  98          sbit P37=P3^7;
  99          
 100          void delay_10ms(void);
 101          void keyscan(void)
 102          {
 103   1       //******************扫第1列************
 104   1           
 105   1              P3=0x00;
 106   1               
 107   1              P34=0;
 108   1         if(P30==0)
 109   1         {
 110   2        
 111   2         ledcode[0]=1;
 112   2              
 113   2        }
 114   1         if(P31==0)
 115   1         {
 116   2         ledcode[1]=2;
 117   2       }
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 3   

 118   1      
 119   1         if(P32==0)
 120   1         {
 121   2        ledcode[2]=3;
 122   2       }
 123   1         if(P33==0)
 124   1         {
 125   2         ledcode[3]=4;
 126   2       }
 127   1         P3=0xff;  
 128   1         //**************扫第2列******************
 129   1         P35=0;
 130   1           if(P30==0)
 131   1         {
 132   2        
 133   2          ledcode[4]=5;
 134   2        }
 135   1         if(P31==0)
 136   1         {
 137   2         ledcode[5]=6;
 138   2       }
 139   1      
 140   1         if(P32==0)
 141   1         {
 142   2         ledcode[6]=7;
 143   2         }
 144   1         if(P33==0)
 145   1         {
 146   2         ledcode[7]=8;
 147   2       }
 148   1         P1=0xff;     
 149   1         //***************扫第3列*********************
 150   1         P36=0;
 151   1            if(P30==0)
 152   1         {
 153   2        
 154   2          ledcode[8]=9;
 155   2        }
 156   1         if(P31==0)
 157   1         {
 158   2        ledcode[9]=10;
 159   2       }
 160   1      
 161   1         if(P32==0)
 162   1         {
 163   2         ledcode[10]=1;
 164   2       }
 165   1         if(P33==0)
 166   1         {
 167   2         ledcode[11]=3;
 168   2       }
 169   1         P3=0xff;                   
 170   1       //***************扫第4列************************
 171   1       show_time(); 
 172   1      
 173   1      }       
 174          
 175                
 176          
 177          
 178          void delay_10ms(void)
 179          {
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 4   

 180   1       uchar i,j;
 181   1       for(i=0;i<100;i++);
 182   1        for(j=0;j<80;j++);
 183   1      }
 184          //初始化LCD************************************************************
 185          void LCD_Initial()
 186          {
 187   1              LcdEn=0;
 188   1              LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
 189   1              LCD_Write(LCD_COMMAND,0x38);
 190   1              LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
 191   1              LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
 192   1              LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
 193   1      }
 194          
 195          //液晶字符输入的位置************************
 196          void GotoXY(unsigned char x, unsigned char y)
 197          {
 198   1              if(y==0)
 199   1                      LCD_Write(LCD_COMMAND,0x80|x);
 200   1              if(y==1)
 201   1                      LCD_Write(LCD_COMMAND,0x80|(x-0x40));
 202   1      }
 203          
 204          //将字符输出到液晶显示
 205          void Print(unsigned char *str)
 206          {
 207   1              while(*str!='\0')
 208   1              {
 209   2                      LCD_Write(LCD_DATA,*str);
 210   2                      str++;
 211   2              }
 212   1      }
 213          
 214          
 215          
 216          
 217          
 218          
 219          /***********DS1302时钟部分子程序******************/
 220          typedef struct __SYSTEMTIME__
 221          {
 222                  unsigned char Second;
 223                  unsigned char Minute;
 224                  unsigned char Hour;
 225                  unsigned char Week;

⌨️ 快捷键说明

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