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

📄 lcdkey03.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCDKEY03
OBJECT MODULE PLACED IN lcdkey03.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE lcdkey03.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<intrins.h>
   3          #include<string.h>
   4          #include<stdio.h>
   5          #include<math.h>
   6          
   7          #define uint unsigned int
   8          #define uchar unsigned char
   9          #define lcd_bus P1
  10          #define key_bus P0
  11          
  12          
  13          sbit rs=P3^0;
  14          sbit rw=P3^1;
  15          sbit e =P3^2;
  16          sbit P2_4=P2^4;
  17          
  18          sbit beep=P3^5;
  19          
  20          sbit load=P2^0;
  21          sbit sclk=P2^1;
  22          sbit sdata=P2^2;
  23          sbit DQ =P3^5;   //定义通信端口
  24          
  25          uchar  code table[16]={15,0,14,13,7,8,9,12,4,5,6,11,1,2,3,10};
  26                              //年月度    
  27          uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,  
  28                              0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,  
  29                              0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00};     
  30                                          
  31          uchar code str1[]="I LIKE MCU";
  32          uchar code str2[]="INPUT FREQENCY:";
  33          uchar code str3[]="INPUT PHASE:";
  34          uchar code str4[]="1:FREQENCY";     //频率
  35          uchar code str5[]="2:PHASE";        //相位
  36          uchar code str6[]="3:AMPLITUDE";    //幅度
  37          //uchar code str7[]="4: HELP";
  38          uchar code str8[]="4:TEMPERATURE";    //温度
  39          uchar code str9[]="temperature  is:";
  40          uchar code str10[]="5:INPUT TL";
  41          uchar code str11[]="6:INPUT TH";
  42          
  43          
  44          uchar code he[]=" A:OK B:DEL D:UP";
  45          uchar code am[]="INPUT AMPLITUDE:";
  46          uchar code warn[]="WARNING!!VOLTAGE < 5V";
  47          uchar state=0;
  48          
  49          uchar  fre[20];
  50          uchar  TL[3];
  51          uchar  TH[3];
  52          uchar  TLL;
  53          uchar  THH;
  54          void lcd_wrcmd(uchar cmd);
  55          void lcd_wrdata( uchar lcddata);
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 2   

  56          
  57          
  58          
  59          
  60          
  61          delay(int d)
  62          {
  63   1              while(--d);
  64   1      }
  65          
  66          /*****************读按键***************/
  67          uchar getkey()
  68          {
  69   1          uchar keycode=0xff,temp,i;
  70   1          key_bus=0x0f;
  71   1          temp=key_bus&0x0f; 
  72   1          if(temp!=0x0f)              //有键按下
  73   1          {
  74   2              beep=0;
  75   2              key_bus=0x7f;
  76   2              for(i=0;i<4;i++)
  77   2              {
  78   3                  temp=key_bus&0x0f;
  79   3                  if(temp==0x07)
  80   3                  {    
  81   4                      keycode=i*4;
  82   4                      break;
  83   4                      }
  84   3                  else if(temp==0x0b)
  85   3                      {
  86   4                      keycode=i*4+1;
  87   4                      break;
  88   4                      }
  89   3                  else if(temp==0x0d)
  90   3                      {
  91   4                      keycode=i*4+2;
  92   4                      break;
  93   4                      }
  94   3                  else if(temp==0x0e)
  95   3                      {
  96   4                      keycode=i*4+3;
  97   4                      break;
  98   4                      }
  99   3                  key_bus=(key_bus>>1)|0x80;
 100   3              }
 101   2      
 102   2               while((key_bus&0x0f)!=0x0f)   //等待释放
 103   2               {
 104   3                   key_bus=0x0f; 
 105   3               }
 106   2               beep=1;                                             
 107   2              
 108   2           }
 109   1           return keycode;
 110   1      }       
 111          
 112          
 113          reset(void)
 114          {
 115   1         unsigned char x=0;
 116   1         DQ = 1;    //DQ复位
 117   1         delay(8);  //稍做延时
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 3   

 118   1         DQ = 0;    //单片机将DQ拉低
 119   1         delay(80); //精确延时 大于 480us
 120   1         DQ = 1;    //拉高总线
 121   1         delay(14);
 122   1         x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 123   1         delay(20);
 124   1      }
 125          
 126          
 127          
 128          //读一个字节
 129          unsigned char read_byte(void)
 130          {
 131   1        unsigned char i=0;
 132   1        unsigned char dat = 0;
 133   1        for (i=8;i>0;i--)
 134   1        {
 135   2           DQ = 0; // 给脉冲信号
 136   2           dat>>=1;
 137   2           DQ = 1; // 给脉冲信号
 138   2           if(DQ)
 139   2              dat|=0x80;        /*LSB to MSB*/
 140   2           delay(4);
 141   2         }
 142   1         return(dat);
 143   1      }
 144          
 145          
 146          
 147          //写一个字节
 148          write_byte(unsigned char dat)
 149          {
 150   1         unsigned char i=0;
 151   1         for (i=8; i>0; i--)
 152   1         {
 153   2            DQ = 0;
 154   2            DQ = dat&0x01;
 155   2            delay(5);
 156   2            DQ = 1;
 157   2            dat>>=1;
 158   2         }
 159   1      }
 160          
 161          
 162          
 163          
 164          //读取温度
 165          
 166            
 167          
 168          //读取温度
 169          unsigned char read_temperature(void)
 170          {
 171   1         unsigned char a=0;
 172   1         unsigned char b=0;
 173   1      
 174   1         reset();
 175   1         write_byte(0xCC); // 跳过读序号列号的操作
 176   1         write_byte(0x44); // 启动温度转换
 177   1         reset();
 178   1         write_byte(0xCC); //跳过读序号列号的操作
 179   1         write_byte(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 4   

 180   1         a=read_byte();
 181   1         b=read_byte();
 182   1         b=b<<4;
 183   1         a=a>>4;
 184   1      
 185   1      return(a|b);
 186   1      }
 187          
 188          
 189          
 190          
 191          
 192          unsigned char tempdisplay(void)
 193          {   
 194   1         unsigned char iii,i,r=0,j;
 195   1         unsigned char t,stra[3];
 196   1         float tt=0;
 197   1           lcd_wrcmd(0x0f);
 198   1             lcd_wrcmd(0xc9);
 199   1             lcd_wrdata(2);
 200   1             lcd_wrdata(0x43);
 201   1             lcd_wrcmd(0x81);
 202   1             for(j=0;j<16;j++)lcd_wrdata(str9[j]);
 203   1      while(1)
 204   1            
 205   1      {
 206   2             t=read_temperature();
 207   2              if(t<TLL||t>THH)
 208   2              P2_4=0;
 209   2              else  P2_4=1;
 210   2              stra[0]=t/100+'0';
 211   2              stra[1]=t%100/10+'0';
 212   2             stra[2]=t%10+'0';
 213   2             if(stra[0]=='0')
 214   2                r=1;
 215   2             lcd_wrcmd(0xc6+r);
 216   2             for(i=r;i<3;i++)
 217   2             lcd_wrdata(stra[i]);
 218   2               lcd_wrcmd(0xcf);
 219   2              iii=table[getkey()];
 220   2                
 221   2                  if(iii==13)
 222   2                {
 223   3                       state=1;
 224   3                       lcd_wrcmd(0x0c);
 225   3                       lcd_wrcmd(1);
 226   3                       lcd_wrcmd(0x80);
 227   3                       break;
 228   3                 }
 229   2      
 230   2      
 231   2      }
 232   1      }
*** WARNING C173 IN LINE 232 OF LCDKEY03.C: missing return-expression
 233          
 234          
 235          
 236          
 237          
 238          
 239          dac_tlc5620(uchar send_char)
 240          {
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 5   

 241   1              uchar i;
 242   1              load=1;
 243   1              sclk=1;sdata=0;sclk=0;
 244   1              sclk=1;sdata=0;sclk=0;
 245   1              sclk=1;sdata=1;sclk=0;
 246   1      
 247   1              for(i=0;i<8;i++)
 248   1              {
 249   2                      sclk=1;
 250   2                      if(send_char&0x80) sdata=1;
 251   2                      else sdata=0;
 252   2                      sclk=0;
 253   2                      send_char=send_char<<1;
 254   2              }
 255   1              load=0;
 256   1              load=1;
 257   1      
 258   1      }
 259          
 260          
 261          
 262          /**********判断忙标志,返回的是一个位BF**********/
 263          bit lcd_busy(void)
 264          {
 265   1              uchar bflag;     
 266   1              rs=0;
 267   1              rw=1;
 268   1              _nop_();
 269   1              e=1;
 270   1              _nop_();
 271   1              lcd_bus=0xff;
 272   1              bflag=lcd_bus;
 273   1              e=0;
 274   1              return(bit)(bflag&0x80);    //BF=1 busy   
 275   1      }
 276          
 277          
 278          
 279          /*********写命令,有两个参数,第一个是要写的命令控制字,
 280          第二个是用来控制是否进行忙标志的判断。
 281          busyflag=1:判断;为 0:不判断****************/
 282          void lcd_wrcmd(uchar cmd)
 283          {
 284   1              while(lcd_busy());
 285   1              lcd_bus=cmd;
 286   1              rs=0;
 287   1              rw=0;
 288   1              _nop_();
 289   1              e=1;
 290   1              _nop_();
 291   1              _nop_();
 292   1              e=0; 
 293   1      }
 294          
 295          
 296          /************向液晶片写数据***************/
 297          void lcd_wrdata( uchar lcddata)
 298          {
 299   1              while(lcd_busy());
 300   1              lcd_bus=lcddata;
 301   1              rs=1;
 302   1              rw=0;
C51 COMPILER V8.02   LCDKEY03                                                              07/31/2007 09:25:36 PAGE 6   

 303   1              _nop_();
 304   1              e=1;
 305   1              _nop_();
 306   1              _nop_();
 307   1              e=0;
 308   1      }
 309          
 310          /****************初始化***************/
 311          void lcd_ini(void)
 312          {
 313   1              lcd_wrcmd(0x38); 
 314   1              delay(100);
 315   1              lcd_wrcmd(0x0c);
 316   1              delay(100);
 317   1              lcd_wrcmd(0x06);
 318   1              delay(100);

⌨️ 快捷键说明

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