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

📄 万年历.lst

📁 DS12887+1602(带温度)原理图和程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V9.00   万年繽                                                                06/09/2013 23:40:22 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 万年繽
OBJECT MODULE PLACED IN 万年历.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 万年历.c BROWSE DEBUG OBJECTEXTEND

line level    source

*** WARNING C500 IN LINE 1 OF 万年历.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))

   1          /********************************************/
   2          /*****************万年历*********************/
   3          //功能描述:采用时钟芯片DS12CR887计时,DS18B20
   4          //                      测量温度,LCD1602显示时间。可从2000
   5          //          年至2099年随意调节,显示包括年、月、
   6          //                      日、时、分、秒、星期和温度。
   7          //键盘说明:key_1键为设置键
   8          //                      key_2键为时间加一键
   9          //                      key_3键为时间减一键
  10          //                      key_4键位定时设置键
  11          //调时方法:按下key_1键为设置时间
  12          //                      按键次数       功能
  13          //                         1               设置秒
  14          //                         2           设置分
  15          //                         3           设置时
  16          //                         4               设置日
  17          //                         5           设置月
  18          //                         6           设置年
  19          //                         7               设置星期
  20          //             8           调节结束
  21          //                      按键次数                功能
  22          //                     1            设置秒
  23          //                         2            设置分
  24          //                         3                    设置时
  25          //                         4            设置结束
  26          /********************************************/
  27          #include <REGX51.H>
  28          #include "1602.h"
  29          #include"ds12cr887.h"
  30          /**************键盘引脚定义******************/
  31          sbit key_1 = P3^0;       //设置格式
  32          sbit key_2 = P3^1;       //+ 
  33          sbit key_3 = P3^2;       //-
  34          sbit buzzer= P1^4;      //蜂鸣器 
  35          sbit DQ    = P1^3;         //定义DS18B20
  36          /******************全局变量********************/
  37          uchar t0=0,second=0, min=0, hour=0,day=0,month=0,year=0,weekday=0,flag=0,temp=0,flag1=0;
  38          /******************初始化时间******************/
  39          uchar code table1[]=" 2013-06-01 SAT ";
  40          uchar code table2[]="00:00:00 0000";
  41          uchar code table3[]="Jin Yaxue";
  42          uchar code table4[]="I Love You !";
  43          /*******************字符表*********************/
  44          uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20,0x2d};
  45          uchar code week[][3]={"SUN","MON","TUE","WED","THU","FRI","SAT"};
  46          /************数据缓冲与键盘计数变量************/
  47          uchar databuffer[14],TempBuffer[4],count,t_value;
  48          uint num=0;
  49          /******************函数声明********************/
  50          void init();
  51          void lcd_write_com(uchar command);  //1602液晶写命令
  52          void lcd_write_data(uchar date);    //1602液晶写数据
  53          void delay(uint a);
  54          void newbuf();          //数据转换
C51 COMPILER V9.00   万年繽                                                                06/09/2013 23:40:22 PAGE 2   

  55          void keyboard();    //键盘子程序
  56          void disp();       //显示程序
  57          void write_ds(uchar add,uchar date);
  58          uchar read_ds(uchar add);
  59          void Init_DS18B20( );
  60          void delay_18B20(unsigned int i);
  61          uchar ReadOneChar(void );
  62          void WriteOneChar(uchar dat);
  63          void ReadTemp(void);
  64          void temp_to_str();
  65          /***********************主函数**********************/
  66          void main()
  67          {               
  68   1          init();                      //初始化 
  69   1              Init_DS18B20( );      //DS18B20初始化
  70   1              lcd_write_com(0x80+3);
  71   1              for(num=0;num<9;num++)     //将table字符串写入
  72   1              {
  73   2                      lcd_write_data(table3[num]);
  74   2                      delay(200);
  75   2           }
  76   1      
  77   1              lcd_write_com(0x80+0x40+2);
  78   1              for(num=0;num<12;num++)    //将table字符串写入
  79   1              {
  80   2                      lcd_write_data(table4[num]);
  81   2                      delay(200);
  82   2           }
  83   1               delay(2000);
  84   1              lcd_write_com(0x01);                      //清屏
  85   1      
  86   1              lcd_write_com(0x80+0x00);  //设置指针地址为首行
  87   1              for(num=0;num<15;num++)    //将table字符串写入
  88   1              {
  89   2                      lcd_write_data(table1[num]);
  90   2                      delay(20);
  91   2           }
  92   1               lcd_write_com(0x80+0x40);       //设置指针地址为第二行
  93   1               for(num=0;num<13;num++)         //将table1字符串写入
  94   1               {
  95   2                      lcd_write_data(table2[num]);
  96   2                      delay(20);
  97   2               }                
  98   1               while(1)
  99   1              {
 100   2                      uchar b;
 101   2                      keyboard();     //调整时间
 102   2                       ReadTemp();                    //开启温度采集程序
 103   2                       temp_to_str();                 //温度数据转换成液晶字符
 104   2                       lcd_write_com(0x80+0x40+9);
 105   2                       delay(20);
 106   2                       for(b=0;b<4;b++)
 107   2                       {
 108   3                              lcd_write_data(TempBuffer[b]);
 109   3                              delay(20);
 110   3                       }               
 111   2                       
 112   2                       if(flag==0)
 113   2                       {
 114   3                              second=read_ds(0x00);
 115   3                              min=read_ds(0x02);
 116   3                              hour=read_ds(0x04);
C51 COMPILER V9.00   万年繽                                                                06/09/2013 23:40:22 PAGE 3   

 117   3                              weekday=read_ds(0x06);
 118   3                              day=read_ds(0x07);
 119   3                              month=read_ds(0x08);
 120   3                              year=read_ds(0x09);
 121   3                      }
 122   2      
 123   2                      newbuf();
 124   2                      {  
 125   3                              databuffer[2]=10;
 126   3                              databuffer[5]=10;
 127   3                  }  
 128   2      
 129   2                  disp();
 130   2              }
 131   1      }
 132          /*************************初始化*************************/
 133          void init()
 134          {
 135   1              lcd_write_com(0x38);                      //设置显示模式
 136   1              lcd_write_com(0x0c);                      //光标闪烁
 137   1              lcd_write_com(0x06);
 138   1              lcd_write_com(0x01);                      //清屏
 139   1              write_ds(0x0a,0x20);
 140   1              write_ds(0x0b,0x26);
 141   1              read_ds(0x0c);
 142   1              buzzer=1;
 143   1              EA=1;
 144   1              EX1=1;;
 145   1              IT0=1;
 146   1      }
 147          /***********************LCD1602写命令************************/
 148          void lcd_write_com(uchar command)
 149          {                                                                    //液晶1602写命令
 150   1              lcdrs=0;
 151   1              lcdrw=0;
 152   1              P0=command;
 153   1              delay(5);
 154   1              lcden=1;
 155   1              delay(5);
 156   1              lcden=0;
 157   1      }
 158          /*************************LCD1602写数据************************/
 159          void lcd_write_data(uchar date)
 160          {
 161   1              lcdrs=1;                                         //液晶1602写数据
 162   1              lcdrw=0;
 163   1              P0=date;
 164   1              delay(5);
 165   1              lcden=1;
 166   1              delay(5);
 167   1              lcden=0;
 168   1      }
 169          /***************************延时函数****************************/
 170          void delay(uint a)
 171          {
 172   1              uint x,y;
 173   1              for(x=a;x>0;x--)
 174   1                      for(y=110;y>0;y--);
 175   1      }
 176          /******************************缓冲数据处理*************************/
 177          void newbuf()            //更新缓冲区子程序
 178          {
C51 COMPILER V9.00   万年繽                                                                06/09/2013 23:40:22 PAGE 4   

 179   1       databuffer[0]=second%10;
 180   1       databuffer[1]=second/10;
 181   1       databuffer[3]=min%10;
 182   1       databuffer[4]=min/10;
 183   1       databuffer[6]=hour%10;

⌨️ 快捷键说明

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