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

📄 lcd_44.lst

📁 单片机最小系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   LCD_44                                                                07/15/2007 21:31:14 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD_44
OBJECT MODULE PLACED IN ..\电源\lcd_44.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lcd_44.c BROWSE DEBUG OBJECTEXTEND OBJECT(..\电源\lcd_44.obj)

line level    source

   1          //////////////////////////////////////////////////////////////
   2          //
   3          //          1602子程序
   4          //函数说明:delay(uchar d)             延时2us程序
   5          //                      lcd_wrcmd(uchar cmd)       写命令子程序
   6          //                      lcd_wrdata(uchar lcddata)  写数据子程序
   7          //                      lcd_h()                    建立自定义字符库
   8          
   9          //Version:  4.11
  10          //说明   : 在Menu的界面支持OK键和快捷键
  11          
  12          //Version:  4.2
  13          // 说明  : 加入了TLC5620,当电压大于5V时出现Warning界面
  14          //Time   :  7/10   18:30
  15          
  16                      
  17          //////////////////////////////////////////////////////////////
  18          
  19          #include<reg51.h>
  20          #include<intrins.h>
  21          #define uint unsigned int
  22          #define uchar unsigned char
  23          #define lcd_bus P0
  24          #define key_bus P2
  25          
  26          sbit rs=P2^5;
  27          sbit rw=P2^6;
  28          sbit e =P2^7;
  29          
  30          //sbit rs=P3^2;
  31          //sbit rw=P3^3;
  32          //sbit e =P3^4;
  33          sbit beep=P3^5;
  34          
  35          sbit load=P2^0;
  36          sbit sclk=P2^1;
  37          sbit sdata=P2^2;
  38          
  39                                              //年月度    
  40          uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,  
  41                              0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,  
  42                                                  0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00};     
  43                                              
  44          uchar code str1[]="DDS BY C.J.H";
  45          uchar code str2[]="INPUT FREQENCY:";
  46          uchar code str3[]="INPUT PHASE:";
  47          uchar code str4[]="1: FREQENCY";         //频率
  48          uchar code str5[]="2: PHASE";            //相位
  49          uchar code str6[]="3: AMPLITUDE";    //幅度
  50          uchar code str7[]="4: HELP";
  51          uchar code he[]=" A:OK B:DEL D:UP";
  52          uchar code am[]="INPUT AMPLITUDE:";
  53          uchar code warn[]="WARNING!!VOLTAGE < 5V";
  54          uchar state=0;
  55          
C51 COMPILER V8.02   LCD_44                                                                07/15/2007 21:31:14 PAGE 2   

  56          
  57          dac_tlc5620(uchar send_char)
  58          {
  59   1              uchar i;
  60   1                      load=1;
  61   1                      sclk=1;sdata=0;sclk=0;
  62   1                      sclk=1;sdata=0;sclk=0;
  63   1              sclk=1;sdata=1;sclk=0;
  64   1      
  65   1                      for(i=0;i<8;i++)
  66   1                      {
  67   2                              sclk=1;
  68   2                              if(send_char&0x80) sdata=1;
  69   2                                      else sdata=0;
  70   2                                      sclk=0;
  71   2                                      send_char=send_char<<1;
  72   2                      }
  73   1                      load=0;
  74   1                      load=1;
  75   1      
  76   1      }
  77          
  78          
  79          delay(uchar d)
  80          {
  81   1              while(--d);
  82   1      }
  83          
  84          
  85          /**********判断忙标志,返回的是一个位BF**********/
  86          bit lcd_busy(void)
  87          {
  88   1              uchar bflag;     
  89   1              rs=0;
  90   1              rw=1;
  91   1              _nop_();
  92   1              e=1;
  93   1                  _nop_();
  94   1              lcd_bus=0xff;
  95   1              bflag=lcd_bus;
  96   1              e=0;
  97   1              return(bit)(bflag&0x80);    //BF=1 busy   
  98   1      }
  99          
 100          
 101          
 102          /*********写命令,有两个参数,第一个是要写的命令控制字,
 103          第二个是用来控制是否进行忙标志的判断。
 104          busyflag=1:判断;为 0:不判断****************/
 105          void lcd_wrcmd(uchar cmd)
 106          {
 107   1              while(lcd_busy());
 108   1              lcd_bus=cmd;
 109   1              rs=0;
 110   1              rw=0;
 111   1              _nop_();
 112   1              e=1;
 113   1              _nop_();
 114   1              _nop_();
 115   1              e=0; 
 116   1      }
 117          
C51 COMPILER V8.02   LCD_44                                                                07/15/2007 21:31:14 PAGE 3   

 118          
 119          /************向液晶片写数据***************/
 120          void lcd_wrdata( uchar lcddata)
 121          {
 122   1                      while(lcd_busy());
 123   1              lcd_bus=lcddata;
 124   1              rs=1;
 125   1              rw=0;
 126   1              _nop_();
 127   1              e=1;
 128   1              _nop_();
 129   1              _nop_();
 130   1              e=0;
 131   1      }
 132          
 133          /****************初始化***************/
 134          void lcd_ini(void)
 135          {
 136   1              lcd_wrcmd(0x38); 
 137   1              delay(100);
 138   1              lcd_wrcmd(0x0c);
 139   1                      delay(100);
 140   1              lcd_wrcmd(0x06);
 141   1                      delay(100);
 142   1              lcd_wrcmd(0x01);
 143   1                      delay(100);
 144   1      }
 145          
 146          //////////////////////////////////////////////
 147          //
 148          //        生成汉字子模函数
 149          //        当lcd_wrdata(0);显示第一个汉字
 150          //    当lcd_wrdata(1);显示第二个汉字
 151          //
 152          //////////////////////////////////////////////
 153          lcd_h()
 154          {
 155   1          uchar i;
 156   1          lcd_wrcmd(0x40);
 157   1              for(i=0;i<24;i++) lcd_wrdata(hanzi[i]);
 158   1      }
 159          
 160          /*****************读按键***************/
 161          uchar getkey()
 162          {
 163   1          uchar keycode=0xff,temp,i;
 164   1          key_bus=0x0f;
 165   1              temp=key_bus&0x0f; 
 166   1              if(temp!=0x0f)              //有键按下
 167   1              {
 168   2                  beep=0;
 169   2                  key_bus=0x7f;
 170   2                  for(i=0;i<4;i++)
 171   2                      {
 172   3                              temp=key_bus&0x0f;
 173   3                  if(temp==0x07)
 174   3                      {    
 175   4                                  keycode=i*4;
 176   4                                      break;
 177   4                              }
 178   3                      else if(temp==0x0b)
 179   3                              {
C51 COMPILER V8.02   LCD_44                                                                07/15/2007 21:31:14 PAGE 4   

 180   4                          keycode=i*4+1;
 181   4                                      break;
 182   4                              }
 183   3                  else if(temp==0x0d)
 184   3                              {
 185   4                          keycode=i*4+2;
 186   4                                      break;
 187   4                              }
 188   3                  else if(temp==0x0e)
 189   3                              {
 190   4                          keycode=i*4+3;
 191   4                                      break;
 192   4                              }
 193   3                              key_bus=(key_bus>>1)|0x80;
 194   3                      }
 195   2      
 196   2                   while((key_bus&0x0f)!=0x0f)   //等待释放
 197   2                       {
 198   3                           key_bus=0x0f; 
 199   3                       }
 200   2                       beep=1;                                                                             
 201   2                  
 202   2               }
 203   1               return keycode;
 204   1      }           
 205          
 206          
 207          welcome()
 208          {
 209   1             
 210   1             uchar temp,i;
 211   1                 lcd_wrcmd(0x0c);
 212   1             lcd_wrcmd(0x82); 
 213   1                    
 214   1             for(i=0;i<12;i++)
 215   1                              lcd_wrdata(str1[i]);
 216   1                 lcd_h();
 217   1                 lcd_wrcmd(0xc4);
 218   1                 lcd_wrdata('2');     lcd_wrdata('0');lcd_wrdata('0');lcd_wrdata('7');
 219   1                 lcd_wrdata(0);
 220   1                 lcd_wrdata('0');lcd_wrdata('7');
 221   1             lcd_wrdata(1);
 222   1                 while(1)
 223   1                 {                                                                                   

⌨️ 快捷键说明

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