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

📄 keyb.lst

📁 nokia3310多功能温度计设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE KEYB
OBJECT MODULE PLACED IN keyB.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE keyB.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /* 其中键盘扫描程序返回的n数值分别代表 1:P1.0 
   2                                                 2:P1.1 
   3                                                                                     3:P1.2 
   4                                                                                     4:P1.3 
   5                          89S51实验板                                5:P1.4 */ 
   6                                                                                    
   7          #include "reg51.h"
   8          #include "stdio.h"
   9          
  10          //外部变量函数                    
  11          sbit BLACK_LIGHT=P2^4;  //背光控制
  12          //------------------LPH7366.C------------------
  13          extern void LPH7366_write_str(unsigned char line,unsigned char row,unsigned char str); //LPH7366任意写入字
             -符函数
  14          extern void data_tick(unsigned char i_data); //数据拆分函数
  15          extern unsigned char ge,shi;  //数据拆分
  16          //-----------------time.C----------------------
  17          extern struct time
  18          { 
  19            unsigned char hour;
  20            unsigned char minute;
  21            unsigned char second;
  22          }local_time,alarm_time,temp_time;
  23          extern bit second_flag;   //秒信号标志
  24          //------------------温度计.C-------------------
  25          extern void temp_display();  //温度显示
  26          //------------------DS18B20.C------------------
  27          extern void temp_data_turn(float in_data);  //DS18B20读取温度转换
  28          extern signed char temp_TL,temp_TH;  //温度上下限
  29          extern bit T_sign;   //温度正负符号
  30          //------------------------------------------
  31          //内部变量函数
  32          unsigned char keyB();  //键盘扫描 
  33          void time_switch();  //时间功能切换
  34          void temp_switch();  //温度功能切换
  35          void temp_set_display(unsigned char option_i); //温度切换显示
  36          void temp_set_option_display(signed char temp);  //温度切换显示子函数
  37          void time_set_display(unsigned char option_i); //时间切换显示
  38          void time_set_option_display(struct time i); //时间切换显示子函数
  39          void key_time_setdone(struct time *i);  //时间调整
  40          void key_temp_setdone(unsigned char *i);  //温度调整
  41          void flash_co(unsigned char set_i);  //闪烁控制函数
  42          
  43          bit key_flag=1;   //键盘标志位
  44          bit flash=0;  //闪烁总开关
  45          bit flash1;  //闪烁控制位
  46          bit flash2;  //闪烁控制位
  47          bit flash3;  //闪烁控制位
  48          extern bit ring_flag;  //闹铃
  49          unsigned char data key;
  50          unsigned char key_option_i; //具体哪位调整 共有3位可调  
  51          unsigned char temp_TLTH_dis;  //显示用TH_dis,TL_dis
  52          
  53          
  54          /******************************键盘函数********************************/
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 2   

  55          /*函数原型:unsigned char keyB()
  56          /*函数功能:键盘扫描
  57          /*输入参数:无
  58          /*输出参数:key (根据该数值进行判断是哪个键被按下)
  59          /*调用模块:无
  60          
  61          /**********************************************************************/
  62          unsigned char keyB()    //键盘扫描子程序
  63          {    unsigned char data i;
  64   1           i=P1;   //读P1口
  65   1           i=i|0xe0;  //屏蔽高3位 为1
  66   1            switch(i)
  67   1               {case 0xfe: key=1;
  68   2                break;
  69   2                case 0xfd: key=2;
  70   2                break;
  71   2                case 0xfb: key=3;
  72   2                break;
  73   2                case 0xf7: key=4;
  74   2                break;
  75   2                case 0xef: key=5;
  76   2                break;
  77   2                case 0xff: key=6;
  78   2                default:  key=0; 
  79   2                break;
  80   2               }
  81   1                return(key);
  82   1      }
  83          
  84          /****************************键盘主函数********************************/
  85          /*函数原型:void key_mian()
  86          /*函数功能:最上级键盘操作
  87          /*输入参数:无
  88          /*输出参数:无
  89          /*调用模块:keyB(),time_set(),temp_set()
  90          
  91          /**********************************************************************/
  92          void key_main()
  93          {
  94   1          keyB();
  95   1      
  96   1        if(key==1&&key_flag)  //时间
  97   1        {
  98   2          key_flag=0;
  99   2          time_switch();  //时间功能切换
 100   2        }
 101   1        if(key==2&&key_flag)  //温度
 102   1        { 
 103   2          key_flag=0;
 104   2          temp_switch();  //温度功能切换
 105   2        }
 106   1      
 107   1        if(key==4&&key_flag)  //背光控制
 108   1        { 
 109   2          key_flag=0;
 110   2          BLACK_LIGHT=~BLACK_LIGHT;
 111   2        }
 112   1      
 113   1        if(key==5&&key_flag)   //闹铃控制
 114   1        {
 115   2          key_flag=0;
 116   2          ring_flag=~ring_flag;
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 3   

 117   2        }
 118   1      
 119   1        if(key==3||key==0)  //键盘标志位复位
 120   1        {
 121   2          key_flag=1;
 122   2        }
 123   1          flash=0;
 124   1              flash_co(0);
 125   1      }
 126          
 127          /***************************时间功能切换函数***************************/
 128          /*函数原型:void time_switch()
 129          /*函数功能:时间功能切换
 130          /*输入参数:无
 131          /*输出参数:无
 132          /*调用模块:keyB(),key_time_setdone(),LPH7366_write_str(),time_set_display()
 133          
 134          /**********************************************************************/
 135          void time_switch()
 136          {
 137   1        key_option_i=1;  //键盘按键计数器
 138   1        while(1)
 139   1       {keyB();
 140   2      //------------3号键---------------------
 141   2        if(key==3&&key_flag)  //功能切换
 142   2        {
 143   3          key_flag=0;
 144   3          key_option_i++;
 145   3          if(key_option_i==4)  
 146   3          key_option_i=1;
 147   3        }
 148   2      //-----------4号键-------------------
 149   2        if(key==4&&key_flag)  //背光控制
 150   2        {
 151   3          key_flag=0;
 152   3          BLACK_LIGHT=~BLACK_LIGHT;
 153   3        }
 154   2      //-----------5号键-------------------
 155   2        if(key==5&&key_flag)  //确定
 156   2        {
 157   3          key_flag=0;
 158   3              if(key_option_i==1)
 159   3          key_time_setdone(&local_time);  //时间功能的具体那项功能设置 1:local_time  2:alarm_time  3:temp_time
 160   3              if(key_option_i==2)
 161   3          key_time_setdone(&alarm_time); 
 162   3              if(key_option_i==3)
 163   3          key_time_setdone(&temp_time); 
 164   3              LPH7366_write_str(6,9,0x00);  //显示空格
 165   3          LPH7366_write_str(6,10,0x00);  //显示空格
 166   3          break;
 167   3        }
 168   2      //---------其余键--------------------
 169   2        if(key==1||key==2||key==0)
 170   2        {
 171   3          key_flag=1;
 172   3        }
 173   2      //-----------------------------------
 174   2        time_set_display(key_option_i);   //功能切换时显示
 175   2        }
 176   1      }
 177          
 178          /***************************温度功能切换函数***************************/
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 4   

 179          /*函数原型:void temp_switch()
 180          /*函数功能:温度功能切换
 181          /*输入参数:无
 182          /*输出参数:无
 183          /*调用模块:keyB(),key_temp_setdone(),temp_set_display()
 184          
 185          /**********************************************************************/
 186          void temp_switch()
 187          {
 188   1        key_option_i=1;  //键盘按键计数器
 189   1        while(1)
 190   1       {keyB();
 191   2      //------------3号键---------------------
 192   2        if(key==3&&key_flag)  //功能切换
 193   2        {
 194   3          key_flag=0;
 195   3          key_option_i++;
 196   3          if(key_option_i==3)  
 197   3          key_option_i=1;
 198   3        }
 199   2      //-----------4号键-------------------
 200   2        if(key==4&&key_flag)  //背光控制
 201   2        {
 202   3          key_flag=0;
 203   3          BLACK_LIGHT=~BLACK_LIGHT;
 204   3        }
 205   2      //-----------5号键-------------------
 206   2        if(key==5&&key_flag)  //确定
 207   2        {
 208   3          key_flag=0;
 209   3              if(key_option_i==1)
 210   3          key_temp_setdone(&temp_TH);  //时间功能的具体那项功能设置  1:TH  2:TL
 211   3              if(key_option_i==2)
 212   3          key_temp_setdone(&temp_TL);
 213   3              LPH7366_write_str(3,6,0);  //显示空格
 214   3          LPH7366_write_str(3,7,0);  //显示空格
 215   3          break;
 216   3        }
 217   2      //----------其余键--------------------
 218   2        if(key==1||key==2||key==0)
 219   2        {
 220   3          key_flag=1;
 221   3        }
 222   2      //-----------------------------------
 223   2        temp_set_display(key_option_i);   //功能切换时显示
 224   2        }
 225   1      }
 226          
 227          /**************************时间切换显示函数****************************/
 228          /*函数原型:void time_set_display(unsigned char option_i)
 229          /*函数功能:时间切换显示
 230          /*输入参数:无
 231          /*输出参数:无
 232          /*调用模块:time_set_option_display(),LPH7366_write_str(),
 233          
 234          /**********************************************************************/
 235          void time_set_display(unsigned char option_i)
 236          {
 237   1        if(option_i==1)  //local_time
 238   1       {
 239   2           time_set_option_display(local_time);
 240   2               LPH7366_write_str(6,9,0x00);  //显示空格
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 5   

 241   2           LPH7366_write_str(6,10,35);  //显示C
 242   2       }
 243   1      
 244   1        if(option_i==2)  //alarm_time
 245   1       {
 246   2           time_set_option_display(alarm_time);
 247   2           LPH7366_write_str(6,9,0x00);  //显示空格
 248   2           LPH7366_write_str(6,10,33);  //显示A
 249   2       }
 250   1      
 251   1       if(option_i==3)  //temp_time
 252   1       {
 253   2           time_set_option_display(temp_time);
 254   2           LPH7366_write_str(6,9,0x00);  //显示空格
 255   2           LPH7366_write_str(6,10,52);  //显示T
 256   2       }
 257   1      }
 258          
 259          /***************************时间切换显示子函数************************/
 260          /*函数原型:void time_set_option_display(struct time i)
 261          /*函数功能:时间切换显示子函数
 262          /*输入参数:无
 263          /*输出参数:无
 264          /*调用模块:data_tick(),LPH7366_write_str()
 265          
 266          /**********************************************************************/
 267          void time_set_option_display(struct time i)
 268          {
 269   1           data_tick(i.hour);  //hour
 270   1                if(flash1==1)
 271   1               {
 272   2                if(second_flag==1)
 273   2            {
 274   3                 LPH7366_write_str(6,1,(shi+16));
 275   3                 LPH7366_write_str(6,2,(ge+16));
 276   3                }
 277   2                else
 278   2            { 
 279   3                 LPH7366_write_str(6,1,60);  //55
 280   3                 LPH7366_write_str(6,2,60);
 281   3                }
 282   2               }
 283   1                else
 284   1               {
 285   2                LPH7366_write_str(6,1,(shi+16));
 286   2                LPH7366_write_str(6,2,(ge+16));
 287   2               }
 288   1      
 289   1           if(second_flag==1)
 290   1           LPH7366_write_str(6,3,26);  //:
 291   1               else
 292   1           LPH7366_write_str(6,3,0);  // 
 293   1      
 294   1            data_tick(i.minute);   //minute
 295   1                if(flash2==1)
 296   1               {
 297   2                if(second_flag==1)
 298   2            {
 299   3                 LPH7366_write_str(6,4,(shi+16));
 300   3                 LPH7366_write_str(6,5,(ge+16));
 301   3                }
 302   2                else
C51 COMPILER V8.05a   KEYB                                                                 04/15/2009 22:04:18 PAGE 6   

 303   2            { 
 304   3                 LPH7366_write_str(6,4,60);  //55
 305   3                 LPH7366_write_str(6,5,60);

⌨️ 快捷键说明

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