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

📄 1302.lst

📁 单片机最小系统原理图
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   1302                                                                  05/19/2008 20:25:32 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: G:\Keilc51v802\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************************
   2           文件名称:电子数码万年历
   3           作    者:
   4           版    本:0.1
   5           说    明:共有两个功能,时间的调整,1个闹钟
   6           修改记录:2005.2.28
   7          ***********************************************************/
   8          //此程式是从以前的万年历上移植过来的,可以用里面的一些模块函数
   9          #include<regx51.h>
  10          
  11          #define uchar unsigned char
  12          sbit RSTB=P3^7;
  13          sbit IO=P3^6;
  14          sbit SCLK=P3^5;
  15          sbit k1=P1^3;              //设定
  16          sbit k2=P1^2;              //加1
  17          sbit k3=P1^1;                      //减1
  18          sbit k4=P1^0;              //闹钟设定
  19          sbit k5=P1^4;              //闹钟开/关
  20          sbit clock_switch=P2^6;    //闹钟开关批示
  21          sbit clock_bell=P2^7;      //闹钟定时时间到指示()闹铃开/关
  22          uchar flag;                //定义闪动标志位
  23          uchar bit_count;           //闪动位
  24          uchar clock_flag;          //闹钟开/关标志位
  25          
  26          /***********************************/
  27          uchar code display_data[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90,0xFF};
  28          uchar display_seg[15]={2,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  29          uchar data_seg[8]={0x40,0x59,0x23,0x12,0x03,0x1,0x06,0};/*初始化数据年月日数据
  30                                                                2006年星期13月23日23点55分*/
  31          uchar clock_seg[4];        //闹钟数据REM                                                                  
             -                        
  32             
  33          /***************Display pragma*************/
  34          void dealy(void)           //显示延时
  35           {
  36   1        uchar i;
  37   1        for(i=0;i<150;i++);
  38   1       
  39   1       }
  40          
  41          
  42          void display(void)        //显示程序
  43           {
  44   1        uchar j,*p;
  45   1      
  46   1        for(j=0;j<15;j++) 
  47   1         {
  48   2          P2=P2|j;
  49   2          
  50   2          p=display_data;
  51   2          if(flag==0xff&&((bit_count-1)==j)) P0=0XFF;
  52   2          else {p=p+display_seg[j];P0=*p;}
  53   2          
  54   2          dealy();
C51 COMPILER V8.02   1302                                                                  05/19/2008 20:25:32 PAGE 2   

  55   2          P0=0XFF;
  56   2          P2&=0Xf0;
  57   2         }
  58   1         
  59   1       }
  60          
  61          
  62          /************************************************/
  63          void reset_3w(void)        //复位
  64           {
  65   1        SCLK=0;
  66   1        RSTB=0;
  67   1        RSTB=1;
  68   1       }
  69          
  70          void wbyte_3w(uchar number)//写一个字节
  71           {
  72   1        uchar i;
  73   1        for(i=0;i<8;i++)
  74   1         { 
  75   2          IO=0;
  76   2          if(number&0x01) IO=1;
  77   2            else IO=0;
  78   2          SCLK=0;
  79   2          SCLK=1;
  80   2          number>>=1;
  81   2         }
  82   1       }
  83          
  84          uchar rbyte_3w()            //读一个字节
  85           {
  86   1        uchar i,k;
  87   1        uchar tmpbyte;
  88   1        k=0x01;
  89   1        IO=1;
  90   1        for(i=0;i<8;i++)
  91   1          {
  92   2           SCLK=1;
  93   2           SCLK=0;
  94   2           if(IO==1) tmpbyte|=k;
  95   2            else tmpbyte&=(~k);
  96   2           k<<=1;
  97   2           
  98   2          }
  99   1         return tmpbyte;
 100   1       }
 101          
 102          
 103          
 104           
 105          void write_1302(void)
 106           {
 107   1        uchar i,*p;
 108   1        p=data_seg;
 109   1        reset_3w();
 110   1        wbyte_3w(0x8e);            //写保护器开
 111   1        wbyte_3w(0);   
 112   1        reset_3w();
 113   1        wbyte_3w(0xbe);            //以多字节突发方试写取时钟数据
 114   1        for(i=0;i<8;i++)           //秒,分,时,日期,月,星期,年,保护控制寄存器关
 115   1         { 
 116   2          wbyte_3w(*p);
C51 COMPILER V8.02   1302                                                                  05/19/2008 20:25:32 PAGE 3   

 117   2          p++;
 118   2         }
 119   1       }
 120          
 121          void read_1302(void)
 122           {
 123   1        uchar sec,min,hrs,dte,mon,day,yr;
 124   1        reset_3w();
 125   1        wbyte_3w(0xbf);    //以多官节突发方试读取时钟数据
 126   1        sec=rbyte_3w();    /*秒   */
 127   1        min=rbyte_3w();    /*分   */
 128   1        hrs=rbyte_3w();    /*时   */
 129   1        dte=rbyte_3w();    /*日期 */
 130   1        mon=rbyte_3w();    /*月   */
 131   1        day=rbyte_3w();    /*星期 */
 132   1        yr=rbyte_3w();     /*年   */
 133   1        reset_3w();
 134   1      
 135   1      
 136   1      
 137   1      /*********十六进制转BCD码子程序********/
 138   1        display_seg[14]=sec%16;
 139   1        display_seg[13]=sec/16;
 140   1        display_seg[12]=min%16;
 141   1        display_seg[11]=min/16;
 142   1        display_seg[10]=hrs%16;
 143   1        display_seg[9]=hrs/16;
 144   1        display_seg[7]=dte%16;
 145   1        display_seg[6]=dte/16;
 146   1        display_seg[5]=mon%16;
 147   1        display_seg[4]=mon/16;
 148   1        display_seg[8]=day;
 149   1        display_seg[3]=yr%16;
 150   1        display_seg[2]=yr/16;
 151   1        
 152   1        
 153   1       }
 154          
 155          void t0(void) interrupt 1 using 0    //定时器T0,闪动定时中断
 156           {
 157   1        static uchar i=0;
 158   1        TH0=0x3c;                          //定时100MS中断一次
 159   1        TL0=0xb0;                          //重装计数值
 160   1        i++;                            
 161   1        if(i==4) {flag=~flag;i=0;}
 162   1       } 
 163          
 164          void clock_write(void)
 165           {
 166   1         display_seg[9]=clock_seg[0];
 167   1         display_seg[10]=clock_seg[1];
 168   1         display_seg[11]=clock_seg[2];
 169   1         display_seg[12]=clock_seg[3];
 170   1       }
 171             
 172          void clock_save(void)                 //闹钟数据保存
 173           { 
 174   1         clock_seg[0]=display_seg[9];
 175   1         clock_seg[1]=display_seg[10];
 176   1         clock_seg[2]=display_seg[11];
 177   1         clock_seg[3]=display_seg[12];
 178   1        
C51 COMPILER V8.02   1302                                                                  05/19/2008 20:25:32 PAGE 4   

 179   1       }
 180          
 181          void clock_compare(void)
 182           { 
 183   1          if(clock_seg[2]==display_seg[11]&&clock_seg[3]==display_seg[12])
 184   1          { 
 185   2           if(clock_seg[1]==display_seg[10]) 
 186   2            {
 187   3             if(clock_seg[0]==display_seg[9])
 188   3              clock_bell=0;               //时间到闹铃开
 189   3            }
 190   2          }
 191   1          else clock_bell=1;                //时间没到闹铃关
 192   1          if(clock_flag==0) clock_bell=1;   //用闹钟开/关键控制闹铃的工作时间
 193   1       }
 194          
 195          void complex_data(void)
 196           {
 197   1         data_seg[0]=display_seg[13]*16+display_seg[14];
 198   1         data_seg[1]=display_seg[11]*16+display_seg[12];
 199   1         data_seg[2]=display_seg[9]*16+display_seg[10];
 200   1         data_seg[3]=display_seg[6]*16+display_seg[7];
 201   1         data_seg[4]=display_seg[4]*16+display_seg[5];
 202   1         data_seg[5]=display_seg[8];
 203   1         data_seg[6]=display_seg[2]*16+display_seg[3];   

⌨️ 快捷键说明

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