📄 nixie.lst
字号:
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 + -