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

📄 nixie.lst

📁 輝光管時鐘的程式
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.09   NIXIE                                                                 10/22/2008 23:02:09 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE NIXIE
OBJECT MODULE PLACED IN nixie.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE nixie.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************
   2          *功能:Nixie Clock电子管时钟程序 
   3          *作者:章 健
   4          *版本:Ver.01
   5          *日期:2007.06.17
   6          ********************************************************/
   7          #include <reg2051.h>
   8          #include <intrins.h>
   9          
  10          /**************************************
  11          *宏定义
  12          **************************************/
  13          #define uchar unsigned char
  14          #define uint  unsigned int
  15          #define CLOCK_1302 (0)
  16          #define RAM_1302   (1)
  17          #define NOP() _nop_();_nop_();_nop_();
  18          
  19          /**************************************
  20          *I/O口定义
  21          **************************************/
  22          sbit SCK_595   = P3^2;
  23          sbit RCLK_595  = P3^0;
  24          sbit SDAT_595  = P3^1;
  25          sbit SCLK_1302 = P1^5;
  26          sbit IO_1302   = P1^4;
  27          sbit RST_1302  = P1^3;
  28          sbit key1      = P1^0;
  29          sbit key2      = P1^1;
  30          sbit key3      = P1^2;
  31          
  32          /**************************************
  33          *变量定义
  34          **************************************/
  35          uchar hour,min,sec;
  36          bit   key_down = 0;
  37          bit   sec_inc  = 0;
  38          bit   min_inc  = 0;
  39          bit   hour_inc = 0;
  40          bit   disp_req = 0;
  41          
  42          /**************************************
  43          *电子管段码定义
  44          **************************************/
  45          uint code SEG[10]={0x0401,0x0402,0x0404,0x0408,0x0410,
  46                                             0x0420,0x0440,0x0480,0x0500,0x0600};
  47          
  48          /**************************************
  49          *函数声明
  50          **************************************/
  51          void init_io();
  52          void delay_ms(uchar j);
  53          void init_timer();
  54          void send_data(uchar count,uint dat);
  55          void disp_time();
C51 COMPILER V8.09   NIXIE                                                                 10/22/2008 23:02:09 PAGE 2   

  56          void write_byte(uchar byt);
  57          uchar read_byte();
  58          void write_data(uchar add,uchar dat,bit type);
  59          uchar read_data(uchar add,bit type);
  60          void get_key();
  61          
  62          /**************************************
  63          *I/O口初始化
  64          **************************************/
  65          void init_io()
  66          {
  67   1              SCK_595  = 0;
  68   1              RCLK_595 = 0;
  69   1              P1      |= 0x07;//按键的三位置高(输入)
  70   1      }
  71          
  72          /**************************************
  73          *毫秒级延时
  74          **************************************/
  75          void delay_ms(uchar j)
  76          {
  77   1              uint i;
  78   1              for(;j>0;j--)
  79   1          {
  80   2                      for(i=0;i<121;i++)
  81   2                      {;}
  82   2              }
  83   1      }
  84          
  85          /**************************************
  86          *定时器0初始化,定时时间50ms
  87          **************************************/
  88          void init_timer()
  89          {
  90   1              TMOD  =  0x01;
  91   1              TH0   =  0x3C;
  92   1              TL0   =  0xB0;
  93   1              IE    =  0x82;
  94   1              TR0   =  1;
  95   1      }
  96          
  97          /**************************************
  98          *向74HC595发送显示数据
  99          **************************************/
 100          void send_data(uchar count,uint dat)
 101          {
 102   1              for(;count>0;count--)
 103   1              {
 104   2                      SDAT_595 = dat&0x0001;
 105   2                      NOP();
 106   2                      SCK_595  = 1;
 107   2                      NOP();
 108   2                      SCK_595  = 0;
 109   2                      NOP();
 110   2                      dat>>=1;
 111   2              }
 112   1      }
 113          
 114          /**************************************
 115          *刷新电子管上显示的时间
 116          **************************************/
 117          void disp_time()
C51 COMPILER V8.09   NIXIE                                                                 10/22/2008 23:02:09 PAGE 3   

 118          {
 119   1              send_data(3,SEG[((hour&0x30)>>4)]);
 120   1              send_data(11,SEG[hour&0x0f]);
 121   1              send_data(6,SEG[(min&0x70)>>4]);
 122   1              send_data(11,SEG[min&0x0f]);
 123   1              send_data(6,SEG[(sec&0x70)>>4]);
 124   1              send_data(11,SEG[sec&0x0f]);
 125   1              RCLK_595 = 1;
 126   1              NOP();
 127   1              RCLK_595 = 0;
 128   1              NOP();
 129   1      }
 130          
 131          /**************************************
 132          *向DS1302写一个字节
 133          **************************************/
 134          void write_byte(uchar byt)
 135          {
 136   1              uchar i;
 137   1              for(i = 0;i < 8;i ++)
 138   1              {
 139   2                      IO_1302   = byt&0x01;
 140   2                      NOP();
 141   2                      SCLK_1302 = 1;
 142   2                      NOP();
 143   2                      SCLK_1302 = 0;
 144   2                      NOP();
 145   2                      byt>>=1;
 146   2              }
 147   1      }
 148          
 149          /**************************************
 150          *从DS1302读一个字节
 151          **************************************/
 152          uchar read_byte()
 153          {
 154   1              uchar i;
 155   1              uchar dat=0;
 156   1              for(i = 0;i < 8;i ++)
 157   1              {
 158   2                      dat>>=1;
 159   2                      if(IO_1302==1)
 160   2                       {dat|= 0x80;}
 161   2                      SCLK_1302  = 1;
 162   2                      NOP();
 163   2                      SCLK_1302  = 0;
 164   2                      NOP();
 165   2              }
 166   1              return(dat);
 167   1      }
 168          
 169          /**************************************
 170          *向DS1302的指定地址写一个字节
 171          **************************************/
 172          void write_data(uchar add,uchar dat,bit type)
 173          {
 174   1              uchar temp;
 175   1              RST_1302  = 0;
 176   1              SCLK_1302 = 0;
 177   1              RST_1302  = 1;
 178   1              if(type == RAM_1302)
 179   1              {
C51 COMPILER V8.09   NIXIE                                                                 10/22/2008 23:02:09 PAGE 4   

 180   2                      temp = 0xC0;
 181   2              }
 182   1              else
 183   1              {
 184   2                      temp =  0x80;

⌨️ 快捷键说明

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