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

📄 sz.lst

📁 1302专用时钟芯片 1602 LCD 显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SZ
OBJECT MODULE PLACED IN sz.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sz.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          //20060921晚  含温度  一个闹钟  可调时间 
   3          
   4          //P1。0~P1。7接DB0~DB7   P1。7即接BF位       LCD_RS=P2^6   LCD_RW=P2^5  LCD_EN=P2^4 ;
   5          //1地 2VCC 3对比  4 RS    5 RW   6 EN   7~14  DB0~DB7    
   6          
   7          
   8          #include<at89x51.h>
   9          #include        <intrins.h>
  10          #include        <string.h>
  11          #define uchar unsigned char
  12          #define uint unsigned int
  13          
  14          sbit DQ=P1^7;
  15          sbit DQ1=P1^6;
  16          
  17          sbit T_CLK = P1^2; /*实时时钟时钟线引脚 */          
  18          sbit T_IO = P1^1; /*实时时钟数据线引脚 */
  19          sbit T_RST = P1^0; /*实时时钟复位线引脚 */
  20          
  21          //按键    P1-0 P1-1 P1-2
  22          //#define       LCD_DATA        P0                                                      //液晶数据口
  23          //#define       BUSY_FLAG       P0_7                                            //液晶模块忙标志
  24          //#define       MPU_RS_CH       P2_0                                            //寄存器选择输入-----------------4
  25          //#define       MPU_RW_CH       P2_1                                            //读写控制--------------------------5
  26          //#define       MPU_ENABLE      P2_2                                            //使能控制----------------------- 6
  27          //#define       MPU_RESET       P2_3                                            //液晶复位控制----------------17
  28          
  29          #define sure    P2_0
  30          #define up           P2_1
  31          #define down    P2_2
  32          
  33          sbit ACC0=ACC^0;
  34          sbit ACC7=ACC^7;
  35          uint n=0;
  36          sbit LCD_RS=P2^7 ;             
  37          sbit LCD_RW=P2^6 ;
  38          sbit LCD_EN=P2^5 ;//           0123456789
  39          unsigned char data xian0[16]={"2006-09-18 WEEK1"};//显示用
  40          unsigned char data xian2[16]={"22:23:45 L-22:24"};//显示用22:23:45 ∩22
  41          
  42          uchar mid[7]={0x00,0x00,0x00,0x01,0x01,0x06,0x00 };
  43                      //  秒   分   时   日   月  星期   年    实际上不是16进制 
  44          
  45          int i, zhi=1;
  46          int ci=0,k;
  47          int mi=0;
  48          int zhou;
  49          /*
  50          unsigned char  xian2[16]={"22:23:45  22:23"};
  51          unsigned char  xian0[16]={"公2006年09月18日"};
  52          unsigned char  xian1[16]={"农2006年08月18日"};
  53          unsigned char  xian[16]={"T:29.3`C  星期 6"};
  54          */
  55          #define    nianshi xian0[2]//0
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 2   

  56          #define    niange xian0[3]//6
  57          
  58          #define    yueshi xian0[5]//0
  59          #define    yuege xian0[6]//9
  60          
  61          #define    rishi xian0[8]//1
  62          #define    rige xian0[9]//8
  63          
  64          #define    shishi xian2[0]//2
  65          #define    shige  xian2[1]//2
  66          #define    fenshi xian2[3]//2
  67          #define    fenge  xian2[4]//3
  68          #define    miaoshi xian2[6]//4
  69          #define    miaoge  xian2[7]//5
  70          
  71          #define    nshishi xian2[11]//2
  72          #define    nshige  xian2[12]//2
  73          #define    nfenshi xian2[14]//2
  74          #define    nfenge  xian2[15]//4
  75          
  76          
  77          int  nshi,nfen,nshishi_1,nshige_1,nfenshi_1,nfenge_1;
  78          
  79          //#define    wenshi xian[2]
  80          //#define    wenge  xian[3]
  81          //#define   wenxiao xian[5]
  82          
  83          #define    week xian0[15]   // 6
  84          
  85          void xianshi();
  86          
  87          #define  delayNOP();            {   _nop_();   _nop_();   _nop_();   _nop_();  } ;  //延时 宏定义
  88          void delay(int t)               {while(t){t--;}}
  89          void delayMs (unsigned char ms) {unsigned char i;while (--ms){for (i = 0; i < 250; i++);}}
  90          
  91          
  92          
  93          
  94          /*************************************************************/
  95          /*                                                           
  96          /*以下函数为检查LCD忙状态                                             
  97          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据  
  98          /*                                                           
  99          /*************************************************************/ 
 100          bit lcd_busy()                            //BIT类型的函数 不是0就是1
 101           {                          
 102   1          bit result ;                                             //BIT 类型的返回值
 103   1      
 104   1          LCD_RS = 0 ;LCD_RW = 1 ; LCD_EN = 1 ; //RS=0,R/W=1,在E高电瓶的作用下,BF和AC6~AC0被读到DB7~DB0的相应
             -位
 105   1          delayNOP() ;                      //短暂延时
 106   1      
 107   1          result =(bit)(P0&0x80) ;// 0x80=1000 0000,取出DB7位  强制位BIT型的变量:(bit)    !!%%%%%%%!!*****
             -%%%%%
 108   1          LCD_EN = 0 ;
 109   1          return(result) ;    //带回BIT类型的返回值
 110   1      }
 111          
 112          /*******************************************************************/
 113          /*                                                                 
 114          /*写指令数据到LCD                                                  
 115          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。      !! 写指令数据  !!                           
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 3   

 116          /*                                                                 
 117          /*******************************************************************/
 118          void lcd_wcmd(uchar cmd)
 119          {                          
 120   1         while(lcd_busy()) ;    //LCD繁忙就等  直到读取到的BF位为0
 121   1      
 122   1          LCD_RS = 0 ;             //RS=0,指向指令寄存器  //RS=1,指向数据寄存器
 123   1          LCD_RW = 0 ;             //RW=0,写操作          //RW=1,读操作      
 124   1          LCD_EN = 0 ;
 125   1          _nop_() ;  _nop_() ;    //短暂延时
 126   1          P0=cmd ;                    //将控制指令数据放到P0口输出
 127   1          delayNOP() ;           //短暂延时
 128   1      
 129   1          LCD_EN = 1 ;         
 130   1          delayNOP() ;
 131   1          LCD_EN = 0 ;  
 132   1      }
 133          
 134          /*******************************************************************/
 135          /*                                                                 
 136          /*写显示数据到LCD                                                  
 137          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               
 138          /*                                                                 
 139          /*******************************************************************/
 140          void lcd_wdat(uchar dat)
 141          {                          
 142   1         while(lcd_busy()) ;
 143   1          LCD_RS = 1 ;
 144   1          LCD_RW = 0 ;
 145   1          LCD_EN = 0 ;
 146   1          P0= dat;
 147   1          delayNOP() ;
 148   1          LCD_EN = 1 ;
 149   1          delayNOP() ;
 150   1          LCD_EN = 0 ; 
 151   1      }
 152          
 153          /*************************************************************/
 154          /*                                                           
 155          /*  LCD初始化设定                                            
 156          /*                                                           
 157          /*************************************************************/
 158          void lcd_init()            //LCD初始化设定   
 159          { 
 160   1          delay(15) ; 
 161   1                        
 162   1          lcd_wcmd(0x38) ;      //6功能设定:16*2行显示,5*7点阵,8位数据总线
 163   1          delay(5) ;
 164   1          lcd_wcmd(0x38) ;      //0x38= 0011(DL=1即8位数据总线,0为4位数据总线)
 165   1                                //1(N=1即双行显示,0为单行显示)0(F=0为5*7显示,1为5*10显示)00   
 166   1          delay(5) ;
 167   1          lcd_wcmd(0x38) ;         
 168   1          delay(5) ;
 169   1      
 170   1      
 171   1          lcd_wcmd(0x0f) ;      //4:显示开关控制:显示开,关光标,光标不闪烁
 172   1          delay(5) ;
 173   1      
 174   1          lcd_wcmd(0x06) ;      //设置输入模式:I/D=1:完成一个字符码后AC自动加1;移动光标
 175   1          delay(5) ;            ////设置输入模式:S=0:显示不发生移位
 176   1      
 177   1          lcd_wcmd(0x01) ;      //清除LCD的显示内容
C51 COMPILER V8.02   SZ                                                                    04/29/2008 22:19:33 PAGE 4   

 178   1          delay(5) ;
 179   1      }
 180          
 181          /*************************************************************/
 182          /*                                                          
 183          /*  设定显示位置                       
 184          /*                                                           
 185          /*************************************************************/
 186          void lcd_pos(uchar pos)
 187          {                          
 188   1        lcd_wcmd(pos | 0x80) ;  //数据指针=80+地址变量
 189   1      }                         //因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入
 190                                    //的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)
 191          
 192          
 193          
 194          
 195          
 196          

⌨️ 快捷键说明

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