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

📄 ninbo.lst

📁 这是一个电子钟和温度计的程序
💻 LST
字号:
C51 COMPILER V7.50   NINBO                                                                 02/20/2009 23:58:25 PAGE 1   


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

line level    source

   1          /*本程序由陈永飞同志开发,信箱:baiyni888@163.com  QQ:49204743
   2          地址:江苏省仪征市新集镇凌东村  电话:13584016200
   3          晶振用12MHz,数码管用共阳的*/
   4          
   5          #include<reg52.h>
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          #include"DS1302.h"
   9          #include"DS18B20.h"
  10          #define sec 0x80
  11          #define min 0x82
  12          #define hou 0x84
  13          #define read 0x01
  14          unsigned char hour,minute,second,id=0,timecount,re_disp=0,p,n0,n1;
  15          bit flag;
  16          #define leddata P0      //定义数码管的段选
  17          sbit ssw=P2^7;          //小时十位
  18          sbit sw=P2^6;           //小时个位
  19          sbit sfw=P2^5;          //分十位
  20          sbit fw=P2^4;           //分个位
  21          sbit wdsw=P2^3;         //温度十位
  22          sbit wdgw=P2^2;         //温度个位
  23          sbit DOWN=P2^1;         //加按键
  24          sbit UP=P2^0;           //减按键
  25          //sbit DQ=P3^0;         //DS18B20信号端
  26          //sbit T_CLK=P3^1;      //DS1302的时钟端
  27          //sbit T_IO=P3^2;       //DS1302的数据端
  28          //sbit T_RES=P3^3;      //DS1302的复位端
  29          sbit SET=P3^4;          //时间设定键
  30          
  31          unsigned int ok;
  32          unsigned char code tab[]={0x48,0xEE,0x54,0xC4,0xE2,0xC1,0x41,0xEC,0x40,0xC0,0x60};
  33          unsigned char inittime[7]={0x00,0x00,0x12,0x16,0x11,0x06,0x04};
  34          //                          秒  分钟 小时  日   月   年  星期
  35          
  36          void Set_id(unsigned char sel,unsigned char sel_1);
  37          
  38          void delays(unsigned char k)
  39          {
  40   1              unsigned char i,j;
  41   1              for(i=0;i<k;i++)
  42   1                      for(j=0;j<50;j++);
  43   1      }
  44          
  45          void display(void)
  46          {
  47   1              if(flag&hour)           //为真时是设定时间
  48   1                      {
  49   2                              ssw=0;leddata=0xff;delays(10);ssw=1;
  50   2                              sw=0;leddata=0xff&~((unsigned char)~flag<<6);delays(10);sw=1;
  51   2                      }
  52   1              else                    //为假时为正常走时
  53   1                      {
  54   2                              leddata=tab[Read1302(hou+1)/16];ssw=0;delays(10);ssw=1;
  55   2                              leddata=tab[Read1302(hou+1)%16]&~((unsigned char)~flag<<6);sw=0;delays(10);sw=1;
C51 COMPILER V7.50   NINBO                                                                 02/20/2009 23:58:25 PAGE 2   

  56   2                      }
  57   1              if(flag&minute)
  58   1                      {
  59   2                              sfw=0;leddata=0xff&~((unsigned char)~flag<<6);delays(10);sfw=1;
  60   2                              fw=0;leddata=0xff;delays(10);fw=1;
  61   2                      }
  62   1              else
  63   1                      {
  64   2                              leddata=tab[Read1302(min+1)/16]&~((unsigned char)~flag<<6);sfw=0;delays(10);sfw=1;
  65   2                              leddata=tab[Read1302(min+1)%16];fw=0;delays(10);fw=1;
  66   2                      }
  67   1       TR0=0;         //关定时器
  68   1       ok=Read_Temperature();         //调用读温度函数
  69   1       TR0=1;         //开定时器
  70   1       p=(unsigned char)(ok>>4);      //温度数据转换
  71   1       wdsw=0;leddata=tab[p%100/10];delays(10);wdsw=1;        //温度显示十位
  72   1       wdgw=0;leddata=tab[p%10];delays(10);wdgw=1;            //温度显示个位
  73   1      }
  74          
  75          void id_case1_key(void)         //按键加减子程序
  76          {
  77   1              display();
  78   1              if (!DOWN) //减少
  79   1              {
  80   2                      while(!DOWN)display();
  81   2                              re_disp=0;
  82   2                              Set_id(id,0);    
  83   2              }
  84   1              if (!UP)  //增加
  85   1              {
  86   2                      while(!UP)display();
  87   2                              re_disp=0;
  88   2                              Set_id(id,1);    
  89   2              }
  90   1      }
  91          
  92          void Scan_Key(void)             //按键扫描程序
  93          {
  94   1              display();
  95   1              if(!SET)
  96   1                      {
  97   2                              while(!SET)display();
  98   2                              re_disp=0;
  99   2                              id++;if(id>2)id=0;
 100   2                      }
 101   1              if(id==0){hour=0;minute=0;second=0;}
 102   1              if(id==1){hour=1;id_case1_key();}
 103   1              if(id==2){hour=0;minute=1;id_case1_key();}
 104   1      //      if(id==3){minute=0;second=1;id_case1_key();}
 105   1      }
 106          
 107          
 108          
 109          //根据选择调整相应项目并写入DS1302
 110          void Set_id(unsigned char sel,unsigned char sel_1) 
 111          {
 112   1              signed char max,mini,address,item;
 113   1              if(sel==1)  {address=hou; max=23;mini=0;}    //小时
 114   1              if(sel==2)  {address=min; max=59;mini=0;}    //分钟
 115   1        //    if(sel==3)  {address=sec; max=0;mini=0;}     //秒
 116   1              item=Read1302(address+1)/16*10+Read1302(address+1)%16;
 117   1              if (sel_1==0) item--;  else item++;
C51 COMPILER V7.50   NINBO                                                                 02/20/2009 23:58:25 PAGE 3   

 118   1              if(item>max) item=mini;   
 119   1              if(item<mini) item=max;
 120   1              Write1302(0x8e,0x00);//允许写操作
 121   1              Write1302(address,item/10*16+item%10);
 122   1              Write1302(0x8e,0x80);//写保护,禁止写操作  
 123   1      }
 124          
 125          void main()
 126          {               TMOD=0x01;
 127   1                      TH0=(65535-50000)/256;
 128   1                      TL0=(65535-50000)%256;
 129   1                      EA=1;
 130   1                      ET0=1;
 131   1                      TR0=1; 
 132   1                      Write1302(0x90,0xa5);//打开充电二级管  一个二级管串联一个2K电阻 
 133   1                      Write1302(0x8e,0x80);//写保护,禁止写操作 
 134   1                      if(!UP&!DOWN)Set1302(inittime);
 135   1                      adjust_res(0x7f); //调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125; 0x7f:0.0625
 136   1              while(1)
 137   1              {
 138   2                      Scan_Key();             //调用按键扫描程序
 139   2                      display();              //调用数码管显示程序
 140   2                      
 141   2      
 142   2              }
 143   1      }
 144          
 145          void t0(void) interrupt 1 using 0
 146          {
 147   1              TH0=(65535-50000)/256; //50ms定时
 148   1              TL0=(65535-50000)%256;  
 149   1              timecount++;re_disp++;
 150   1              if(timecount>9)
 151   1                      {
 152   2                              timecount=0;
 153   2                      flag=~flag;
 154   2                      }
 155   1              if(re_disp>200){re_disp=0;if(id)id=0;}
 156   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    896    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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