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

📄 main.lst

📁 可设置八个闹钟的智能时钟程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   MAIN                                                                  08/22/2008 21:21:40 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //************************************************************************
   2          //    File       : main.c
   3          //    Date       : 2008-08-22    
   4          //    Version    : 1.3  
   5          //    Powerd by  : shenyae86  QQ:184676957
   6          //    modify by  :
   7          //*************************************************************************
   8          //    Descriptoon:                                                              
   9          //              数码管显示程序  显示120000 采用中断扫描模式
  10          //              适用于CC100B、CC100C                             
  11          //              产品网站    http://www.sxcckj.com  传诚科技
  12          //                              扑通的家用时钟一般只能设置一个闹钟时间,
  13          //                              但很多人均需为工作日、周末、早晨、午休等
  14          //                              不同时段设置不同的闹钟时间。如果是使用普通的闹钟,
  15          //                              只好每次休息前重新设置,很不方便,
  16          //                              有时甚至会出现忘记更改闹钟设置而睡过头的情况。
  17          //                              针对这种情况,本人利用89C51单片机设计了
  18          //                              一款有8种闹钟设置的时钟,通过一段
  19          //                              时间的使用,情况良好。
  20          //    help:
  21          //                 参见实验指导书                                                                    
  22          //*************************************************************************
  23          #include <at89x51.h>
  24          #include <intrins.h>
  25          
  26          unsigned char hour,min,sec,year,month,day,weekday;   //当前时间、日期、星期
  27          unsigned int  count_down;      //1秒钟计时用
  28          unsigned char code dis_code[]={        
  29                                                                  0xC0,/*0*/
  30                                                                  0xF9,/*1*/
  31                                                                  0xA4,/*2*/
  32                                                                  0xB0,/*3*/
  33                                                                  0x99,/*4*/
  34                                                                  0x92,/*5*/
  35                                                                  0x82,/*6*/
  36                                                                  0xF8,/*7*/
  37                                                                  0x80,/*8*/
  38                                                                  0x90,/*9*/};//0-9 off 
  39          
  40          bit led_on;                     //数码管是否点亮的标志
  41          unsigned char display[8];       //8位数码管要显示的数据
  42          unsigned char attr;             //八个数码管的闪烁控制字节,当为0时,对应数码管闪
  43          bit flash;                      //LED 闪烁开关,与attr共同决定数码管是否闪烁
  44          unsigned char show_status;      //LED 显示状态标志
  45          // 0:设置闹钟数据
  46          // 1:显示当前日期及星期                                                        
  47          // 2:显示当前时间
  48          // 3:设置当前日期
  49          // 4:设置当前时间
  50          
  51          bit km;                         //按键已去抖动标志
  52          bit kp;                         //按键已处理标志
  53          
  54          bit sound;                      //蜂鸣器响标志
  55          bit alarm_stop;                 //蜂鸣器响后用户手工按停标志
C51 COMPILER V7.06   MAIN                                                                  08/22/2008 21:21:40 PAGE 2   

  56          struct  { 
  57                          unsigned char h;                //小时      
  58                          unsigned char m;                //分钟
  59                 } alarm[8];                              //8个闹钟项
  60          unsigned char alarm_en;         //闹钟项启用标志
  61          unsigned char alarm_wk;         //闹钟项周末启用标志
  62          unsigned char cur_alarm_set;    //当前设置的闹钟项
  63          unsigned char cur_alarm_active; //当前到点的闹钟项
  64          bit new_alarm_info;             //闹钟项内容已修改标志
  65          
  66          sbit sound_output = P3^7;       //蜂鸣器驱动端口,输出0时蜂鸣器响
  67          sbit SDA_PIN   = P1^6;                  //EEPROM数据线端口
  68          sbit SCL_PIN   = P1^5;                  //EEPROM时钟线端口
  69          ////////////////////////////////////////////////////////////////
  70          void I2cDelay()                 //EEPROM操作时需要的延时函数
  71          { 
  72   1              _nop_(); 
  73   1              _nop_();  
  74   1              _nop_();
  75   1              _nop_();
  76   1              _nop_();  
  77   1              _nop_(); 
  78   1      }
  79          ///////////////////////////////////////////////////////////////
  80          void DelayX1ms(unsigned char count)             //延迟函数,参数为毫秒数
  81          {
  82   1              unsigned char i,j;
  83   1               for(i=0;i<count;i++)
  84   1              for(j=0;j<240;j++);
  85   1      }
  86          ///////////////////////////////////////////////////////////////
  87          void Start()                                            //I2C启动,24C08使用I2C方式
  88          { 
  89   1              SDA_PIN=1;   
  90   1              I2cDelay(); 
  91   1              SCL_PIN=1;   
  92   1              I2cDelay();
  93   1              SDA_PIN=0;   
  94   1              I2cDelay();  
  95   1              SCL_PIN=0;    
  96   1      }
  97          /////////////////////////////////////////////////////////////////////
  98          void Stop()                     //I2C停止
  99          { I2cDelay();  SDA_PIN=0;
 100   1        I2cDelay();  SCL_PIN=1; 
 101   1        I2cDelay();  SDA_PIN=1; 
 102   1        I2cDelay();
 103   1      }
 104          ////////////////////////////////////////////////////////////////////
 105          bit SendByte(unsigned char value)          //发送1字节数据给EEPROM
 106          {unsigned char i;
 107   1       bit no_ack=0;
 108   1      
 109   1        for(i=0;i<8;i++)                     //发送8位数据
 110   1        { I2cDelay();     
 111   2      if(value&0x80)   SDA_PIN=1;
 112   2      else            SDA_PIN=0;
 113   2          value=value<<1;     
 114   2              I2cDelay();      SCL_PIN=1;             
 115   2              I2cDelay();     
 116   2              I2cDelay();      SCL_PIN=0; 
 117   2         }
C51 COMPILER V7.06   MAIN                                                                  08/22/2008 21:21:40 PAGE 3   

 118   1        
 119   1        I2cDelay();        SDA_PIN=1;     //确认脉冲周期,等待EEPROM的确认
 120   1        I2cDelay();        SCL_PIN=1;       
 121   1        I2cDelay();       
 122   1        if(SDA_PIN==1)   no_ack=1;
 123   1        I2cDelay();        SCL_PIN=0;
 124   1      
 125   1        return no_ack;
 126   1      }
 127          /////////////////////////////////////////////////////////////////////////
 128          void mywrite(unsigned char address,unsigned char value)         //向EEPROM写1字节
 129          { 
 130   1              Start();          
 131   1              SendByte(0xa0);     
 132   1              SendByte(address);    
 133   1              SendByte(value);  
 134   1              Stop();             
 135   1              DelayX1ms(10);
 136   1      }
 137          ////////////////////////////////////////////////////////////////////////
 138          unsigned char ReadByte()                        //从EEPROM接收1字节
 139          {
 140   1        unsigned char i,bval;
 141   1        bval=0;
 142   1        for(i=0;i<8;i++)                                      //接收8位数据
 143   1         { I2cDelay();
 144   2           SDA_PIN=1;                                 //从P1输入数据时,先往P1输入"1"
 145   2           I2cDelay();    SCL_PIN=1;
 146   2           I2cDelay();    bval=bval<<1;     if(SDA_PIN)    bval=bval|0x01;
 147   2           I2cDelay();    SCL_PIN=0; 
 148   2          }    
 149   1              I2cDelay();     SDA_PIN=1;      //确认脉冲周期,不送出确认
 150   1              I2cDelay();     SCL_PIN=1;     
 151   1              I2cDelay();      
 152   1              I2cDelay();
 153   1          return(bval);
 154   1      }
 155          ////////////////////////////////////////////////////////////////////////
 156          unsigned char myread(unsigned char address)             //从EEPROM读入1字节数据
 157          {
 158   1        unsigned char tmp;
 159   1        Start();        
 160   1        SendByte(0xa0);     
 161   1        SendByte(address);    
 162   1        Start();        
 163   1        SendByte(0xa1);     
 164   1        tmp=ReadByte();
 165   1        Stop();         
 166   1        DelayX1ms(2);
 167   1        return(tmp);
 168   1      }
 169          ////////////////////////////////////////////////////////////////////////
 170          void SetNext(void)      //轮换调节函数

⌨️ 快捷键说明

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