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

📄 keyb.lst

📁 用3310显示温度与数字钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   KEYB                                                                  05/11/2008 18:49:27 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE KEYB
OBJECT MODULE PLACED IN keyB.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE keyB.c BROWSE DEBUG OBJECTEXTEND

stmt 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 V7.06   KEYB                                                                  05/11/2008 18:49:27 PAGE 2   

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

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

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

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

 303   2                if(second_flag==1)
 304   2            {
 305   3                 LPH7366_write_str(6,4,(shi+16));
 306   3                 LPH7366_write_str(6,5,(ge+16));
 307   3                }
 308   2                else
 309   2            { 
 310   3                 LPH7366_write_str(6,4,60);  //55
 311   3                 LPH7366_write_str(6,5,60);

⌨️ 快捷键说明

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