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

📄 1.lst

📁 液晶时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   1                                                                     05/17/2008 12:11:54 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: C:\Program Files\keil3\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1             #include <REG52.H>
   2          #include <ABSACC.H>   
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          /*******12864液晶配置************/
   6             sbit RS=P2^4;
   7             sbit RW=P2^5;
   8             sbit  E=P2^6;
   9             sbit RST=P2^3;
  10          /*******1302配置*************/
  11             sbit  T_RST=P1^2;   
  12             sbit   T_IO=P1^1;  
  13             sbit T_SCLK=P1^0;  
  14             uchar bdata AB;
  15             uchar bdata AD;       
  16             sbit AB0=AB^0;
  17             sbit AB7=AB^7;
  18             sbit AD0=AD^0;
  19             sbit AD7=AD^7;
  20          /************************
  21              定义全局变量
  22          *************************/
  23          sbit key1=P3^0;
  24          sbit key2=P3^1;
  25          sbit key3=P3^2;
  26          sbit key4=P3^3;
  27          sbit beep=P3^0;
  28          
  29          uchar key;    //按键值
  30          uchar set=0;  // 功能键值
  31          /**************************
  32             定义1302时间数据部分
  33          ***************************/ //秒 分 时 日 月 星期 年
  34          //用于保存从1302中取得的时间数据
  35          uchar data time[7]={0x00,0x50,0x18,0x23,0x04,0x03,0x08};     
  36          uchar code shuzi[15]={0x30,0x31,0x32,0x33,0x34,0x35,
  37                                0x36,0x37,0x38,0x39,0x20,0x2e,
  38                                                    0x2b,0x2d,0x3a}; //空格 . + - :
  39          uchar data alarm[2]; //用于存储闹钟时间: 时 分
  40          /********************************
  41                  模块数据定义部分
  42          ********************************/
  43          uchar code Address[]=
  44          {
  45          0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      /*第一行汉字位置*/
  46          0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      /*第二行汉字位置*/
  47          0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      /*第三行汉字位置*/
  48          0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      /*第四行汉字位置*/
  49          };
  50          
  51          uchar code Chinese01[]={"日期:"};
  52          uchar code Chinese02[]={"时间:"};
  53          uchar code Chinese03[]={"星期:"};
  54          uchar code Chinese04[]={"时钟"};
  55          uchar code Chinese05[]={"调时"};
C51 COMPILER V8.01   1                                                                     05/17/2008 12:11:54 PAGE 2   

  56          uchar code Chinese06[]={"闹钟"};
  57          /************ 延时n*1ms ******************/
  58          void delay(uint k)
  59          {  uint i,j;
  60   1         for(i=0;i<k;i++)
  61   1          {  for(j=0;j<0x60;j++)
  62   2                   {;}
  63   2               }
  64   1      }
  65          
  66          /******数据转换***********
  67                    BCD转换为十进制 
  68          **************************/
  69          turnbcd(unsigned char bcd)      
  70          { 
  71   1            unsigned char n_n;
  72   1            n_n=(bcd&0xf0)/16*10+(bcd&0x0f);
  73   1            return(n_n); 
  74   1      } 
  75          
  76          /*--------------------------------------RT-12864 --------------------------------------------*/
  77          void write_com(unsigned char com_byte)    //写命令到LCD 0000  RST    E    RW     RS 
  78          {                                                                                                                // 1    1     0    0
  79   1          delay(1);  
  80   1          RS=0; RW=0;
  81   1          E=1;  RST=1;
  82   1          P0=com_byte;
  83   1          E=0;
  84   1      }
  85          void write_data(unsigned char dat_byte)  //写数据到LCD   0000 // 1    1      0   1
  86          { 
  87   1          delay(1);
  88   1          RS=1; RW=0;
  89   1          E=1;  RST=1;
  90   1          P0=dat_byte;
  91   1          E=0;
  92   1       }      
  93          /**********************
  94          写汉字功能a地址和要写
  95          第c个数字就可以连续写完 b个数
  96          ***********************/
  97          void Inhanzi(uchar *str,uchar a,uchar b,uchar c)
  98          {
  99   1         delay(1);
 100   1         write_com(0x30);
 101   1         while(c)
 102   1         {
 103   2           delay(1);
 104   2           write_com(Address[a]);
 105   2               write_data(str[b]);
 106   2               b++;
 107   2               write_data(str[b]);
 108   2               b++;
 109   2               a++;
 110   2               c--;
 111   2                }
 112   1      }
 113          
 114          /***********************
 115            a写数据的地址 
 116            b 、c为要写的数据数字(0-9)
 117            显示0-9功能
C51 COMPILER V8.01   1                                                                     05/17/2008 12:11:54 PAGE 3   

 118          ***********************/
 119          void xianshi(unsigned char a,unsigned char b,unsigned char c) 
 120          {
 121   1        write_com(Address[a]);
 122   1        write_data(shuzi[b]);
 123   1        write_data(shuzi[c]);
 124   1      }
 125          
 126          /*----------------------------------------------------1302程序--------------------------------------------
             -----*/
 127          /*********************
 128              写数据   低位开始 
 129          **********************/
 130           void inputbyte(unsigned char a_a)    
 131           {   
 132   1          unsigned char  b_b;
 133   1            AB=a_a;
 134   1                for(b_b=8; b_b>0; b_b--)
 135   1           {
 136   2            T_IO = AB0;
 137   2            T_SCLK = 1;
 138   2            T_SCLK = 0;
 139   2            AB = AB >> 1; 
 140   2           } 
 141   1       }
 142          /********************
 143            读取字节有返回值
 144          *********************/
 145          outputbyte()  
 146          {  
 147   1              unsigned char  b_b;
 148   1          for(b_b=7; b_b>0; b_b--)
 149   1          {   
 150   2              AD7=T_IO;
 151   2              T_SCLK = 1; 
 152   2              T_SCLK = 0;
 153   2              AD = AD>>1; 
 154   2          } 
 155   1          return(AD); 
 156   1      }
 157          /*********************
 158          往1302里写数据参数分别为
 159               地址 和 数据
 160          **********************/
 161          void w1302(unsigned char add,unsigned char dat)
 162          {       
 163   1          T_RST=0; 
 164   1          T_SCLK=0; 
 165   1          T_RST=1; 
 166   1          inputbyte(add); 
 167   1          inputbyte(dat);   
 168   1          T_SCLK = 1; 
 169   1          T_RST = 0;
 170   1      } 
 171          /**********************
 172          读取1302某地址的数据   
 173          返回值为该地址的数据
 174          **********************/ 
 175          unsigned char r1302(unsigned char add)     
 176          {
 177   1          unsigned char ucdata;
 178   1          T_RST=0; 
C51 COMPILER V8.01   1                                                                     05/17/2008 12:11:54 PAGE 4   

 179   1          T_SCLK=0; 
 180   1          T_RST=1; 
 181   1          inputbyte(add);  
 182   1          ucdata = outputbyte();  
 183   1          T_SCLK = 1; 
 184   1          T_RST = 0;
 185   1          return(ucdata);
 186   1      }
 187          /********************
 188          设置初始时间 秒 分 时
 189               日 月 星期 年
 190          **********************/
 191          void set1302()   
 192          {   
 193   1          unsigned char  q_q=0;
 194   1              unsigned char  b_b;
 195   1          unsigned char add = 0x80;
 196   1          w1302(0x8e,0x00);
 197   1          for(b_b =7; b_b>0; b_b--)
 198   1          {   
 199   2                  w1302(add,time[q_q]);  
 200   2              add +=2;              
 201   2                      q_q++;
 202   2          }
 203   1      }
 204          /********************
 205          保存当前时间格式为: 
 206          秒 分 时 日 月 星期 年 
 207          ********************/
 208          void get1302()  
 209          {       
 210   1        unsigned char  b_b;
 211   1        unsigned char ducaddr = 0x81;//读数据 连续读数  放到数组里
 212   1        for (b_b=0; b_b<7; b_b++)
 213   1        {
 214   2              time[b_b]=turnbcd(r1302(ducaddr)); //格式为: 秒 分 时 日 月 星期 年 
 215   2              ducaddr += 2;
 216   2        }
 217   1      }
 218          /*-------------------------------------------------调时间部分---------------------------------------------
             -----*/
 219          
 220          void timexianshi(void)     //显示时间 
 221          {
 222   1              get1302();
 223   1              xianshi(11,time[6]/10,time[6]%10); //年
 224   1              xianshi(12,13,time[4]/10);         //月
 225   1              xianshi(13,time[4]%10,13);         //月
 226   1              xianshi(14,time[3]/10,time[3]%10); //日
 227   1              xianshi(19,time[2]/10,time[2]%10);//时
 228   1              xianshi(20,14,time[1]/10);        //分
 229   1              xianshi(21,time[1]%10,14);            //分
 230   1              xianshi(22,time[0]/10,time[0]%10);//秒
 231   1              xianshi(27,10,time[5]);
 232   1      }
 233          /******************************
 234                    调时间函数
 235          *******************************/
 236          void tiaoshi_year(void)          //对年的调整 
 237          {  
 238   1         Inhanzi(Chinese05,3,0,2); //调时界面
 239   1         Inhanzi(Chinese01,8,0,3);
C51 COMPILER V8.01   1                                                                     05/17/2008 12:11:54 PAGE 5   

 240   1         Inhanzi(Chinese02,16,0,3); 
 241   1         Inhanzi(Chinese03,24,0,3);
 242   1         Inhanzi(Chinese03,24,0,3); 
 243   1         xianshi(11,time[6]/10,time[6]%10);
 244   1         key=time[6];

⌨️ 快捷键说明

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