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

📄 text1.lst

📁 set(key6) left(key5) right(key4) up(key3) down(key2) OK(key1) 功能一:时钟 时钟计时; 按下set(一次)键即可调时间
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   TEXT1                                                                 09/09/2008 14:54:33 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Text1.c DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          
   3          
   4          #define SET                 0x20
   5          #define LEFT                0x10
   6          #define RIGHT           0x08
   7          #define UP                  0x04
   8          #define DOWN            0x02
   9          #define OK              0x01
  10          #define DoubleSET       0x20              //键值
  11          
  12          
  13          unsigned char sec,min,hour;
  14          unsigned char code table[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86
             -,0x8E};//数码管显示0~15所需码
  15          
  16          
  17          sbit Ring=P2^4;//控制声音control ring
  18          sbit DAT = P2^7;
  19          sbit PL = P2^6;
  20          sbit CLK = P2^5;
  21          sbit P23=P2^3;
  22          
  23          unsigned char pLED;           //点灯用
  24          unsigned char DispBuf[6];     //数据缓存器
  25          unsigned char count;
  26          bit xTim,xKey,Alarm;         //走时,扫描按键,闹钟的标志位
  27          unsigned char KeyVal;        //扫描到的键值
  28          
  29          
  30          
  31          unsigned char EditSec,EditMin,EditHour;//设定的时间
  32          unsigned char AlarmSec,AlarmMin,AlarmHour;//设定的闹钟时间
  33          unsigned char SetedAlarmSec,SetedAlarmMin,SetedAlarmHour;//已设定的闹钟时间
  34          unsigned char CurKey,LastKey;//当前键值与上一次的键值
  35          unsigned char KeySts,SetState;//判断与切换状态所用变量
  36          unsigned char KeyPressed;//判断的键值
  37          unsigned char p;//控制整点报时铃响时间的变量
  38          
  39          
  40          
  41          
  42          
  43          
  44          
  45          
  46          
  47          void TimUpdate(void)                                                                                      
             -//走时功能模块
  48          {
  49   1                              //主函数中使用,作为整点报时声音停止的标志位
  50   1      
  51   1          if(++sec==60)
  52   1          {
  53   2              sec = 0;
C51 COMPILER V7.50   TEXT1                                                                 09/09/2008 14:54:33 PAGE 2   

  54   2              if(++min==60)
  55   2              {
  56   3                  min = 0;
  57   3                  if(++hour == 24) hour = 0;
  58   3              } 
  59   2          }
  60   1      }
  61          
  62          
  63          
  64          
  65          
  66          
  67          
  68          
  69          
  70          
  71          
  72          
  73          void DisplayTim()                                      //将当前时间存入数据缓存器
  74          {
  75   1              DispBuf[0] = table[sec % 10];
  76   1              DispBuf[1] = table[sec / 10];
  77   1              DispBuf[2] = table[min % 10];
  78   1              DispBuf[3] = table[min / 10];
  79   1              DispBuf[4] = table[hour % 10];
  80   1              DispBuf[5] = table[hour / 10];
  81   1      }
  82          
  83          
  84          
  85          
  86          
  87          
  88          
  89          
  90          
  91          void InitT0(void)                                      //开启中断
  92          {
  93   1       pLED = 0;
  94   1          xTim = 0;
  95   1          count = 0;
  96   1          TMOD = (TMOD & 0xF0) |0x01;
  97   1          TH0 = 0xF1;                 // 1/240 s
  98   1          TL0 = 0x00;
  99   1          TR0 = 1;
 100   1          ET0 = 1;
 101   1          EA = 1;
 102   1      }
 103          
 104          
 105          
 106          
 107          
 108          
 109          
 110          
 111          
 112          void T0Srv(void) interrupt 1 using 1                                                                      
             -  //中断服务程序
 113          {
 114   1      unsigned char i;
C51 COMPILER V7.50   TEXT1                                                                 09/09/2008 14:54:33 PAGE 3   

 115   1          TH0 = 0xF1;                          // 1/240 s
 116   1          P2 =(P2&0xF8)| pLED;                       //控制数码管
 117   1          P0 = DispBuf[pLED];                     //将数据赋给P0口显示
 118   1          if(++pLED==6) pLED = 0;                  //循环点亮六位数码管
 119   1          count++;                                 //计数
 120   1          if((count&0x03)==0)                      // 每4次中断16ms读一次按键
 121   1          {
 122   2              CLK = 0;
 123   2              PL = 0;                             // Latch Key 锁存器打开
 124   2              PL = 1;
 125   2              KeyVal = 0;
 126   2              for(i=0;i<8;i++)
 127   2              {
 128   3                  KeyVal <<= 1; 
 129   3                  if(!DAT) KeyVal |= 0x01;    // 低电平检测
 130   3                  CLK = 1;
 131   3                  CLK = 0;
 132   3              }
 133   2              KeyVal &= 0x3F;
 134   2              xKey = 1;       // 发信号,表示读了一次按键
 135   2          }
 136   1          if(count==240)       // 每240次中断发秒更新标志
 137   1          {
 138   2              count = 0;
 139   2              xTim = 1;
 140   2                      Ring=1;
 141   2          }
 142   1       }
 143          
 144          
 145          
 146          
 147          
 148          
 149          
 150          
 151          
 152          
 153          void DisplayEdit()                                     //设定时间时的显示函数
 154          {
 155   1          DispBuf[0] = table[EditSec % 10];
 156   1          DispBuf[1] = table[EditSec / 10];
 157   1          DispBuf[2] = table[EditMin % 10];
 158   1          DispBuf[3] = table[EditMin / 10];
 159   1          DispBuf[4] = table[EditHour % 10];
 160   1          DispBuf[5] = table[EditHour / 10];
 161   1          DispBuf[5-KeySts] &= 0x7F;
 162   1      }  // 编辑期间的显示
 163          
 164          
 165          
 166          
 167          void DisplayAlarm()                                     //设定闹钟时的显示函数
 168          {
 169   1          DispBuf[0] = table[AlarmSec % 10];
 170   1          DispBuf[1] = table[AlarmSec / 10];
 171   1          DispBuf[2] = table[AlarmMin % 10];
 172   1          DispBuf[3] = table[AlarmMin / 10];
 173   1          DispBuf[4] = table[AlarmHour % 10];
 174   1          DispBuf[5] = table[AlarmHour / 10];
 175   1          DispBuf[5-KeySts] &= 0x7F;

⌨️ 快捷键说明

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