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

📄 ds1302b.lst

📁 这个也是51单片机的应用程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302B
OBJECT MODULE PLACED IN ds1302b.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE ds1302b.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <math.h>
   3          #include  <string.h>
   4          #include  <absacc.h>
   5          #include <INTRINS.H>
   6          #define uchar unsigned char
   7          
   8          /**********鹰脚定义*********/
   9          
  10          sbit lck = P3^5;//锁存信号
  11          sbit enable = P1^5;//HC245使能信号
  12          sbit USB  = P1^0;//USBD12选中信号
  13          sbit DQ =P3^2;
  14          sbit rdlcd = P3^7;//读写控制
  15          
  16          
  17          
  18          /********常用命令及参数定义********/
  19          #define DISPON     0x3f
  20          #define DISPOFF    0x3e
  21          #define DISPFIRST  0xc0
  22          #define SETX       0x40
  23          #define SETY       0xb8
  24          #define LCDBUZY    0x80
  25          #define L          0x00
  26          #define R          0x40
  27          #define LIMIT      0x80
  28          
  29          #define ENABLED    enable =0
  30          #define DISABLED   enable =1
  31          #define READ       rdlcd = 0
  32          #define WRITE      rdlcd = 1
  33          
  34          
  35          /**********全局变量************/
  36          uchar xdata cbyte, statu;
  37          bit xy,simple;
  38          
  39          /**************函数******************/
  40          
  41          void uDelay(uchar MS);
  42          void WrL(uchar x);
  43          void WrR(uchar x);
  44          void Lcmcls(void);
  45          void LcdbuzyR(void);
  46          void LcdbuzyL(void);
  47          void delay1s(void);
  48          void Lcminit (void);
  49          void Putpicture(void);
  50          void MCUinitial();
  51          void readtemp(void); //读取温度
  52          void delay(unsigned int time);
  53          void VtoH8x16change(uchar *hzbuf);
  54          void Puthalf(uchar *strch,uchar row,uchar col);
  55          void Wrdata(uchar x,uchar row,uchar col);
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 2   

  56          void Puthz(uchar *str,uchar row,uchar col);
  57          void VtoHchange(uchar *hzbuf);
  58          void Locatexy(uchar row,uchar col);
  59          void out16hz(uchar *p, uchar  xdata ucXArray[]);
*** WARNING C258 IN LINE 59 OF DS1302B.C: 'ucXArray': mspace on parameter ignored
  60          void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
  61          void vWrite16x16Chinese(uchar *ch,uchar row,uchar col,bit flag);
  62          void vWrite8x16String(uchar  *str,uchar col, uchar row, bit flag);
  63          void out16hz(uchar *p, uchar  data ucXArray[]);
  64          
  65          
  66          extern uchar  code  char_Table[95][16];
  67          unsigned char  temper[2];
  68          
  69          
  70          
  71          /***********主程序***************/
  72          void main(void)
  73          {  unsigned char  disp,temp;
  74   1         float backbit;
  75   1         
  76   1          simple = 1;
  77   1          temper[0]=0;
  78   1          temper[1]=0;
  79   1          MCUinitial();
  80   1          Lcminit();
  81   1          vWrite8x16String("  数字温度计" ,0, 0,0);
  82   1          vWrite8x16String("当前温度:", 3, 0,0);
  83   1          vWrite8x16String("  充实的一天!", 6, 0,0);
  84   1      
  85   1          while(1)
  86   1           { readtemp();
  87   2             backbit = temper[0];
  88   2             backbit = backbit * 6.25;
  89   2             temp = backbit;
  90   2             disp = temp%10 + '0';
  91   2             vWrite8x16Character(&char_Table[disp-0x20][0],3,104,0);
  92   2             temp = temp/10;
  93   2             disp = temp%10 + '0';
  94   2             vWrite8x16Character(&char_Table[disp-0x20][0],3,96,0);
  95   2             vWrite8x16Character(&char_Table['.'-0x20][0],3,88,0);
  96   2             temp = temper[1];
  97   2             disp = temp%10 + '0';
  98   2             vWrite8x16Character(&char_Table[disp-0x20][0],3,80,0);
  99   2             temp = temp/10;
 100   2             disp = temp%10 + '0';
 101   2             vWrite8x16Character(&char_Table[disp-0x20][0],3,72,0);
 102   2             
 103   2             delay(100);
 104   2            }
 105   1      }
 106          
 107          
 108          
 109          /***************初始化单片机I/O口*****************/
 110          void  MCUinitial()
 111          {
 112   1          P0 = 0x00;
 113   1          lck = 0;
 114   1          P1 = 0x24;
 115   1          P2 = 0x00;
 116   1          lck = 1;
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 3   

 117   1          lck = 0;
 118   1          P1 = 0x24;
 119   1          P2 = 0x01;
 120   1          lck = 1;
 121   1          P1 = 0x21;
 122   1          P2 = 0x01;
 123   1       }
 124          
 125          
 126          
 127          /************延时*****************/
 128          
 129          void delay(unsigned int i)
 130          {
 131   1        while(i--);
 132   1        }
 133          
 134          void reset(void)   //复位
 135          {
 136   1        uchar x=0;
 137   1        DQ = 1;
 138   1        delay(8);   //稍做延时
 139   1        DQ = 0;
 140   1        delay(80);   //精确延时 大于 480us
 141   1        DQ = 1;   //拉高总线
 142   1        delay(14);
 143   1        x=DQ;
 144   1        delay(20);
 145   1      }
 146          
 147          uchar readbyte(void) //读1字节
 148          {
 149   1        uchar i=0;
 150   1        uchar dat=0;
 151   1        for (i=8;i>0;i--)
 152   1        {
 153   2          DQ = 0;
 154   2          dat>>=1;
 155   2          DQ = 1;
 156   2          if(DQ)
 157   2          dat|=0x80;
 158   2          delay(4);
 159   2         }
 160   1        return(dat);
 161   1       }
 162          
 163          void writebyte(unsigned char dat) //写1字节
 164          {
 165   1        uchar i=0;
 166   1        for (i=8; i>0; i--)
 167   1        {
 168   2         DQ = 0;
 169   2         DQ = dat&0x01;
 170   2         delay(5);
 171   2         DQ = 1;
 172   2         dat>>=1;
 173   2         }
 174   1       delay(4);
 175   1      }
 176          
 177          void readtemp(void) //读取温度
 178          {
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 4   

 179   1        uchar a=0,b=0;
 180   1        reset();
 181   1        writebyte(0xCC); // 跳过序列号
 182   1        writebyte(0x44); // 启动温度转换
 183   1        reset();
 184   1        writebyte(0xCC);
 185   1        writebyte(0xBE); //读9个寄存器,前两个为温度
 186   1        a=readbyte();   //低位
 187   1        b=readbyte();   //高位
 188   1        temper[0]=a&0x0f;
 189   1        a=a>>4;         //低位右移4位,舍弃小数部分
 190   1        temper[1]=b<<4;         //高位左移4位,舍弃符号位
 191   1        temper[1]=temper[1]|a;
 192   1        }
 193          
 194          
 195          //***********初始化LCD*******************/
 196          
 197          void Lcminit (void)
 198          {
 199   1          cbyte=DISPOFF;
 200   1          WrL(cbyte);
 201   1          WrR(cbyte);
 202   1          cbyte=DISPON;
 203   1          WrL(cbyte);
 204   1          WrR(cbyte);
 205   1          cbyte=DISPFIRST;
 206   1          WrL(cbyte);
 207   1          WrR(cbyte);
 208   1          Lcmcls();
 209   1          Locatexy(0,0);
 210   1      }
 211          
 212          
 213          /***************LCD清屏********************/
 214          void Lcmcls(void)
 215          { uchar i,j;
 216   1          for(i=0;i<8;i++)
 217   1              for(j=0;j<LIMIT;j++)
 218   1                Wrdata(0x0,i,j);
 219   1      }
 220          
 221          
 222          
 223          /**************写左区**************/
 224          
 225          void WrL(uchar data x)
 226          {
 227   1          LcdbuzyL();
 228   1      
 229   1          ENABLED;
 230   1          WRITE;
 231   1      
 232   1          P0 = x;
 233   1          lck = 0;
 234   1          P1 = 0xc6;//ELCD=1,RSTLOW=1(低电平复位无效),RW = 0(写),CS138无效,CSB=1,CSA=0
 235   1          P2 = 0x01;
 236   1          lck = 1;
 237   1          P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 238   1      
 239   1          lck = 0;
 240   1          P1 = 0x44;//ELCD=0,RSTLOW=1(低电平复位无效),CS138无效,CSB=0,CSA=0
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 5   

 241   1          P2 = 0x01;
 242   1          lck = 1;
 243   1          P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 244   1          DISABLED;
 245   1      }
 246          
 247          /**************写右区**************/
 248          void WrR(uchar data x)
 249          {
 250   1          LcdbuzyR();
 251   1      
 252   1          ENABLED;
 253   1          WRITE;
 254   1      
 255   1          P0=x;
 256   1          lck = 0;
 257   1          P1 = 0xc5;//ELCD=1,RSTLOW=1(低电平复位无效),RW = 0(写),CS138无效,CSB=0,CSA=1
 258   1          P2 = 0x01;//避免LCKMOTOR产生上升沿
 259   1          lck = 1;
 260   1          P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 261   1      
 262   1          lck = 0;
 263   1          P1 = 0x44;//ELCD=0,RSTLOW=1(低电平复位无效),CS138无效,CSB=0,CSA=0
 264   1          P2 = 0x01;
 265   1          lck = 1;
 266   1          P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 267   1          DISABLED;
 268   1      }
 269          
 270          
 271          /**************判忙****************/
 272          void LcdbuzyL(void)
 273          {   
 274   1         DISABLED;
 275   1         WRITE;
 276   1      
 277   1         P0=0xFF;//P0口送FF,准备读
 278   1      
 279   1         READ;
 280   1         lck = 0;
 281   1         P1 = 0x96;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=1(读),CS138=1(无效),CSB=1,CSA=0
 282   1         P2 = 0x01;
 283   1         lck = 1;
 284   1         P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 285   1         ENABLED;
 286   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
 287   1         DISABLED;
 288   1         lck = 0;
 289   1         P1 = 0x44;//ELCD=0,RSTLOW=1(低电平复位无效),R/W=0(读),CS138=1(无效),CSB=1,CSA=0
 290   1         P2 = 0x01;//避免LCKMOTOR产生上升沿
 291   1         lck = 1;
 292   1         P1 = 0xa1;//把PS/2的DATA(P1.7)拉高,非片选USBD12
 293   1      
 294   1      }
 295          
 296          
 297          void LcdbuzyR(void)
 298          {
 299   1         DISABLED;
 300   1         WRITE; 
 301   1      
 302   1         P0=0xFF;//P0口送FF,准备读
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 6   

 303   1      
 304   1         READ;
 305   1         lck = 0;
 306   1         P1 = 0x95;//ELCD=1,RSTLOW=1(低电平复位无效),R/W=1(读),CS138无效,CSB=0,CSA=1
 307   1         P2 = 0x01;
 308   1         lck = 1;
 309   1         P1 = 0xa1;//把PS/2的DATA(P1.7)拉高
 310   1         ENABLED;
 311   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环  
 312   1         DISABLED;
 313   1         lck = 0;
 314   1         P1 = 0x44;
 315   1         P2 = 0x01;//避免LCKMOTOR产生上升沿
 316   1         lck = 1;
 317   1         P1 = 0xa1;//把PS/2的DATA(P1.7)拉高
 318   1         
 319   1      }
 320          
 321           
 322          
 323          
 324          
 325          /*************定位*****************/
 326          void Locatexy(uchar  row,uchar  col)
 327          {
 328   1         uchar data x,y,right;
 329   1         switch(col&0xc0)
 330   1          {
 331   2          case 0:   {LcdbuzyR();right = 1;break;}//置右半屏标志
 332   2          case 0x40:{LcdbuzyL();right = 0;break;}//置左半屏标志
 333   2          }
 334   1         x=col&0x3f|SETX;//把列数据变成行命令
 335   1         y=row&0x07|SETY;//把行数据变成行命令
 336   1      
 337   1         DISABLED;
 338   1      
 339   1         P0=0xFF;
 340   1      /**********************************/
 341   1         READ;
 342   1         lck = 0;
 343   1         if(right)
 344   1          P1 = 0x95;
 345   1         else
 346   1          P1 = 0x96;
 347   1         P2 = 0x01;
 348   1         lck = 1;
 349   1         P1 = 0xa1;
 350   1         while(P0 & LCDBUZY);//最高位为1,表示忙,则循环 
 351   1         lck = 0;
 352   1         P1 = 0x44;
 353   1         P2 = 0x01;
 354   1         lck = 1;
 355   1         P1 = 0xa1;
 356   1      /*********以上为判断忙标志********/
 357   1         WRITE;
 358   1      /*********************************/
 359   1         P0 = y;
 360   1         lck = 0;
 361   1         if(right)
 362   1          P1 = 0xc5;
 363   1         else
 364   1          P1 = 0xc6;
C51 COMPILER V7.06   DS1302B                                                               10/09/2006 12:12:36 PAGE 7   

 365   1         P2 = 0x01;
 366   1         lck = 1;
 367   1          P1 = 0xa1;
 368   1      
 369   1         lck = 0;
 370   1         P1 = 0x44;
 371   1          P2 = 0x01;
 372   1         lck = 1;
 373   1          P1 = 0xa1;
 374   1      /**********以上为送行命令***********/
 375   1         P0=0xFF;
 376   1      
 377   1         READ;
 378   1      
 379   1         lck = 0;
 380   1         if(right)

⌨️ 快捷键说明

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