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

📄 lcd12864.lst

📁 12864液晶显示多功能电子时钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.09   LCD12864                                                              11/27/2008 20:04:08 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include <intrins.h>
   3          
   4          
   5          #define SENDCOMM  0XF8                          //0XF1000 
   6          #define READCOMM  0XFC                          //0XF1100
   7          #define SENDDATA  0XFA                          //0XF1010
   8          #define READDATA  0XFE                          //0XF1110
   9          
  10          void LCD_send_byte(unsigned char a);
  11          unsigned char LCD_read_byte(void);
  12          unsigned char LCD_bf(void);
  13          unsigned char TEMP_BUFF[5];
  14          void LCD_comm(unsigned char comm);
  15          void LCD_setxy(unsigned char x,unsigned char y);
  16          void LCD_PORTInit(void);
  17          void LCD_WriteStr(unsigned char dis_addr_x,unsigned char dis_addr_y,char* str);
  18          void LCD_WriteDBC(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dis_dat);
  19          
  20          
  21          sbit E_CLK =P2^2;               //clock input
  22          sbit RW_SID=P2^1;               //data input/output
  23          sbit RS_CS =P2^0;               //chip select
  24          sbit LCD_PSB=P2^3;
  25          sbit LCD_A =P2^4;
  26          
  27          sbit Beep = P1^0;
  28          sbit power = P1^1;
  29          sbit tell_charge = P1^2;
  30          
  31          void delay(unsigned  int n) 
  32          {
  33   1        unsigned int i;
  34   1        for(i=0; i<n; i++) {;}
  35   1      }
  36          
  37          void LCD_PORTInit(void)
  38          {
  39   1              
  40   1              E_CLK=0;
  41   1              RS_CS=0;
  42   1      }
  43          
  44          void LCD_send_byte(unsigned char a)
  45          {
  46   1              unsigned char i;
  47   1              for(i=8;i>0;i--)
  48   1          {           
  49   2                      if(a&(0x01<<(i-1)))
  50   2                              RW_SID=1;
  51   2                      else
  52   2                              RW_SID=0;
  53   2                      delay(2);
  54   2                      E_CLK=1;
  55   2                      delay(2);
C51 COMPILER V7.09   LCD12864                                                              11/27/2008 20:04:08 PAGE 2   

  56   2                      E_CLK=0;
  57   2                      delay(2);
  58   2          }   
  59   1      }
  60          
  61          unsigned char LCD_read_byte(void)
  62          {
  63   1              unsigned char i,dat=0;
  64   1              for(i=8;i>0;i--)
  65   1              {
  66   2                      E_CLK=1;
  67   2                      delay(2);
  68   2                      if(RW_SID==1)   
  69   2                              dat|=(0x01<<(i-1));
  70   2                      E_CLK=0;
  71   2                      delay(2);
  72   2              }       
  73   1              return dat;
  74   1      }
  75          
  76          unsigned char LCD_bf(void)
  77          {
  78   1              unsigned char readh,readl,bf;
  79   1              RS_CS=1;
  80   1              delay(2);
  81   1              
  82   1              LCD_send_byte(READCOMM);
  83   1              
  84   1              readh=LCD_read_byte();
  85   1              
  86   1              readl=LCD_read_byte();
  87   1              
  88   1              delay(2);
  89   1              RS_CS=0;
  90   1              
  91   1              readl=(readl>>4);
  92   1              bf=(readh&0xf0)|(readl&0x0f);
  93   1              return bf;
  94   1      }
  95          
  96          void LCD_comm(unsigned char comm)
  97          {
  98   1              unsigned char temp;
  99   1              
 100   1              do{
 101   2                      temp=LCD_bf();
 102   2              }while(temp&0X80);
 103   1              
 104   1              RS_CS=1;
 105   1              delay(2);
 106   1              
 107   1              LCD_send_byte(SENDCOMM);
 108   1              
 109   1              temp=comm&0XF0;
 110   1              LCD_send_byte(temp);
 111   1              
 112   1              temp=((comm&0X0F)<<4)&0XF0;
 113   1              LCD_send_byte(temp);
 114   1              
 115   1              delay(2);
 116   1              RS_CS=0;
 117   1      }
C51 COMPILER V7.09   LCD12864                                                              11/27/2008 20:04:08 PAGE 3   

 118          
 119          void LCD_data(unsigned char lcd_data)
 120          {
 121   1              unsigned char temp;
 122   1              RS_CS=1;
 123   1              delay(2);
 124   1              LCD_send_byte(SENDDATA);
 125   1              
 126   1              temp=lcd_data&0xf0;
 127   1              LCD_send_byte(temp);
 128   1              
 129   1              temp=(lcd_data&0X0F)<<4;
 130   1              LCD_send_byte(temp);
 131   1              
 132   1              delay(2);
 133   1              RS_CS=0;
 134   1      }
 135          /*******************************************************************/
 136          //          设置显示位置    X(1~16),Y(1~4)
 137          /*******************************************************************/
 138          void LCD_setxy(unsigned char x,unsigned char y)
 139          {
 140   1              switch(y)
 141   1              {
 142   2                      case 1:
 143   2                              LCD_comm(0X7F+x);break;
 144   2                      case 2:
 145   2                              LCD_comm(0X8F+x);break;
 146   2                      case 3:
 147   2                              LCD_comm(0X87+x);break;
 148   2                      case 4:
 149   2                              LCD_comm(0X97+x);break;
 150   2                      default:break;
 151   2              }
 152   1      }
 153          
 154          /*******************************************************************/
 155          //         在指定位置显示一半角字符
 156          /*******************************************************************/
 157          /*void LCD_WriteDBC(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dis_dat)
 158          {
 159              LCD_setxy(dis_addr_x,dis_addr_y);
 160              LCD_data(dis_dat);
 161          }*/
 162          /*******************************************************************/
 163          //          在指定位置显示字符串
 164          /*******************************************************************/
 165          void LCD_WriteStr(unsigned char dis_addr_x,unsigned char dis_addr_y,char* str)
 166          { 
 167   1          unsigned char LCD_temp; 
 168   1          LCD_setxy(dis_addr_x,dis_addr_y);
 169   1          LCD_temp=*str;
 170   1          while(LCD_temp != 0x00) 
 171   1          { 
 172   2              LCD_data(LCD_temp);
 173   2              LCD_temp=*(++str);
 174   2          }  
 175   1      }
 176          void LCD_WriteData(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dat)
 177          {
 178   1              LCD_setxy(dis_addr_x,dis_addr_y);
 179   1              LCD_data(dat);
C51 COMPILER V7.09   LCD12864                                                              11/27/2008 20:04:08 PAGE 4   

 180   1      }
 181          void LCD_init(void)
 182          {
 183   1          unsigned char i;
 184   1              
 185   1              LCD_A=0;         //开背光
 186   1              LCD_PSB=0;       //串行通信
 187   1      
 188   1              LCD_PORTInit();
 189   1              i=LCD_bf();
 190   1              while(i==0x80)
 191   1              {
 192   2                      delay(80);
 193   2                      i=LCD_bf();
 194   2              }
 195   1              //RST=0;
 196   1              RS_CS=0;
 197   1              //serial mode
 198   1              delay(100);
 199   1          // RST=1;
 200   1              LCD_comm(0x30);//功能设置,一次送8位数据,基本指令集
 201   1              LCD_comm(0x0C);//0000,1100  整体显示,游标off,游标位置off
 202   1              LCD_comm(0x01);//0000,0001 清DDRAM
 203   1              LCD_comm(0x02);//0000,0010 DDRAM地址归位
 204   1              LCD_comm(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
 205   1              //LCD_comm(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一
 206   1          //LCD_comm(0x0F);//显示设定,开显示,显示光标,当前显示位反白闪动
 207   1      }
 208          
 209          
 210          #define jump_ROM 0xCC
 211          #define start 0x44
 212          #define read_EEPROM 0xBE
 213          unsigned int TMPH,TMPL;
 214          sbit DQ=P3^0;
 215          
 216          /*============================================================================/
 217           *函数名称:reset
 218           *入口参数:无;返回deceive_ready
 219           *函数功能:复位
 220          /============================================================================*/
 221          void reset(void)
 222          {
 223   1              DQ=0;
 224   1              delay(48);
 225   1              DQ=1;
 226   1              delay(5);
 227   1              while(DQ);
 228   1              delay(48);
 229   1      }
 230          /*==============================================================================/
 231           *函数名称:read_bit
 232           *入口参数:无;返回接收的数据
 233           *函数功能:读1bit子程序
 234          /==============================================================================*/
 235          unsigned char read_bit(void)
 236          {
 237   1              unsigned char i;
 238   1              DQ=0;
 239   1              DQ=1;
 240   1              for(i=0;i<3;i++);
 241   1              return(DQ);
C51 COMPILER V7.09   LCD12864                                                              11/27/2008 20:04:08 PAGE 5   

 242   1      }
 243          /*================================================================================/
 244           *函数名称:vrite_bit
 245           *入口参数:bitval
 246           *函数功能:写1bit子程序
 247          /=================================================================================*/
 248          void write_bit(unsigned char bitval)
 249          {
 250   1              DQ=0;
 251   1              if(bitval==1)
 252   1              DQ=1;
 253   1              delay(5);
 254   1              DQ=1;
 255   1      }
 256          /*===============================================================================/
 257           *函数名称:write_byte
 258           *入口参数:val
 259           *函数功能:写1byte子程序
 260          /================================================================================*/
 261          void write_byte(unsigned char val)
 262          {
 263   1              unsigned char i,temp;
 264   1              for(i=0;i<8;i++)
 265   1              {
 266   2                      temp=val>>i;
 267   2                      temp=temp&0x01;
 268   2                      write_bit(temp);
 269   2                      delay(5);
 270   2              }
 271   1      }
 272          /*=============================================================================/
 273           *函数名称:read_byte
 274           *入口参数:无
 275           *返回值:接收的数据value
 276           *函数功能:读一个byte子程序
 277          /==============================================================================*/
 278          unsigned char read_byte(void)
 279          {
 280   1              unsigned char i,m,receive_data;
 281   1              receive_data=0;
 282   1              for(i=0;i<8;i++)
 283   1              {
 284   2                      m=read_bit();
 285   2                      receive_data=(m<<7)|(receive_data>>1);
 286   2                      delay(6);
 287   2              }       
 288   1              return(receive_data);
 289   1      }
 290          /*==========================================================================/
 291           *函数名称:getTemValue
 292           *入口参数:无
 293           *返回值:value
 294           *函数功能:取得温度值
 295          /==========================================================================*/
 296          void getTemValue(void)
 297          {

⌨️ 快捷键说明

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