📄 16-32.lst
字号:
C51 COMPILER V8.08 16_32 05/15/2009 18:17:48 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 16_32
OBJECT MODULE PLACED IN 16-32.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 16-32.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #include <reg52.h>
4 #include<1302.h>
5 #include<zifu.h>
6
7 #define BLKN 2 //列锁存器数
8 sbit G=P1^7; //P1.7为显示允许控制信号端
9 sbit CLK=P1^6; //P1.6为输出锁存器时钟信号端
10 sbit SCLR=P1^5; //移位寄存器的清0端
11 void delay(unsigned int);
12 void showtime(uchar);
13 void showxq(uchar);
14 unsigned char data dispram[32];
15 unsigned char data dispram0[32];
16 unsigned char code time[][16];
17 unsigned char code Timename[][32];
18 unsigned char code xinqi[][32];
19 uchar inittime[7]={0x00,0x24,0x15,0x25,0x12,0x04,0x07}; //初始化后设置
20
21
22
23 void main()
24 {
25 1 register unsigned char i,j,k,l;
26 1 uchar ucAddr = 0x81;
27 1 SCON=0x00; //串口工作模式0:移位寄存器方式
28 1 TMOD=0x01; //定时器T0工作在试1:16位方式
29 1 TR0=1; //启动定时器
30 1 P1=0x3f; //P1口初值允许接收,锁存,显示
31 1 IE=0x82; //允许定时器T0中断
32 1 Set1302(inittime); //初始化
33 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
34 1 W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻
35 1 du1302(); //读取 秒 分 时 日 月 星期 年
36 1 while(1)
37 1 {
38 2 delay(2000); //延时2S
39 2
40 2 /*for(i=0;i<32;i++) //显示效果:卷帘出
41 2 {
42 2 dispram[i]=Bmp[1][i];
43 2
44 2 if(i%2)delay(100);
45 2 }
46 2 delay(100);*/
47 2
48 2
49 2
50 2 for(i=0;i<9;i++) //显示效果:左移显示:你好我是......
51 2 {
52 3 for(j=0;j<2;j++)
53 3 for(k=1;k<9;k++)
54 3 {
55 4 for(l=0;l<16;l++)
C51 COMPILER V8.08 16_32 05/15/2009 18:17:48 PAGE 2
56 4 {
57 5 dispram[l*BLKN]=dispram[l*BLKN]
58 5 <<1|dispram[l*BLKN+1]>>7;
59 5 dispram[l*BLKN+1]=dispram[l*BLKN+1]
60 5 <<1|dispram0[l*BLKN]>>7;
61 5 dispram0[l*BLKN]=dispram0[l*BLKN]
62 5 <<1|dispram0[l*BLKN+1]>>7;
63 5 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
64 5 <<1|Bmp[i][l*BLKN+j]>>(8-k);
65 5 }
66 4 delay(100);
67 4 }
68 3 }
69 2 delay(100);
70 2
71 2
72 2 du1302(); // 读时间
73 2 for(i=0;i<11;i++)
74 2 {
75 3 if(i==3)
76 3 {
77 4 showtime(Year);
78 4 }
79 3 if(i==4)
80 3 {
81 4 showtime(Month);
82 4 }
83 3 if(i==5)
84 3 {
85 4 showtime(Day);
86 4 }
87 3 if(i==6)
88 3 {
89 4 showtime(Hour);
90 4 }
91 3 if(i==7)
92 3 {
93 4 showtime(Cent);
94 4 }
95 3 if(i==8)
96 3 {
97 4 showtime(Sec);
98 4 }
99 3 if(i==10)
100 3 {
101 4 for(j=0;j<2;j++)
102 4 for(k=1;k<9;k++)
103 4 {
104 5 for(l=0;l<16;l++)
105 5 {
106 6 dispram[l*BLKN]=dispram[l*BLKN]
107 6 <<1|dispram[l*BLKN+1]>>7;
108 6 dispram[l*BLKN+1]=dispram[l*BLKN+1]
109 6 <<1|dispram0[l*BLKN]>>7;
110 6 dispram0[l*BLKN]=dispram0[l*BLKN]
111 6 <<1|dispram0[l*BLKN+1]>>7;
112 6 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
113 6 <<1|xinqi[Week%16][l*BLKN+j]>>(8-k);
114 6 }
115 5 delay(100);
116 5 }
117 4 }
C51 COMPILER V8.08 16_32 05/15/2009 18:17:48 PAGE 3
118 3 for(j=0;j<2;j++)
119 3 for(k=1;k<9;k++)
120 3 {
121 4 for(l=0;l<16;l++)
122 4 {
123 5 dispram[l*BLKN]=dispram[l*BLKN]
124 5 <<1|dispram[l*BLKN+1]>>7;
125 5 dispram[l*BLKN+1]=dispram[l*BLKN+1]
126 5 <<1|dispram0[l*BLKN]>>7;
127 5 dispram0[l*BLKN]=dispram0[l*BLKN]
128 5 <<1|dispram0[l*BLKN+1]>>7;
129 5 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
130 5 <<1|Timename[i][l*BLKN+j]>>(8-k);
131 5 }
132 4 delay(100);
133 4 }
134 3 }
135 2
136 2
137 2
138 2
139 2
140 2
141 2
142 2 for(i=0;i<32;i++) //显示效果:卷帘入
143 2 {
144 3 dispram[i]=0;
145 3 dispram0[i]=0;
146 3 if(i%2)delay(100);
147 3 }
148 2 }
149 1 }
150 /*-------------延时------------*/
151 void delay(unsigned int dt)
152 {
153 1 register unsigned char bt;
154 1 for(;dt;dt--)
155 1 for(bt=0;bt<225;bt++);
156 1 }
157
158
159
160 /*-------显示屏扫描(定时器T0中断)函数-------------*/
161 void leddisplay(void) interrupt 1 using 1
162 {
163 1 register unsigned char i,j=BLKN;
164 1 TH0=0xf8; //设定显示屏刷新率每秒62.5帧
165 1 TL0=0x30;
166 1 i=P1; //读出当前显示的行号
167 1 i=++i&0x0f; //行号加1屏蔽高四位
168 1 do
169 1 {
170 2 j--;
171 2 SBUF=~dispram0[i*BLKN+j]; //送显示数据
172 2 //SBUF=dispram0[i*BLKN+j];
173 2 while (!TI);TI=0;
174 2 }
175 1 while(j); //完成一行数据传输
176 1 j=BLKN;
177 1 do
178 1 {j--;
179 2 SBUF=~dispram[i*BLKN+j];
C51 COMPILER V8.08 16_32 05/15/2009 18:17:48 PAGE 4
180 2 //SBUF=dispram[i*BLKN+j];
181 2 while(!TI);TI=0;
182 2 }
183 1 while(j);
184 1 G=1; //消隐(关闭显示)
185 1 P1&=0xf0; //行号端清0
186 1 CLK=1; //显示数据输出到锁存寄存器
187 1 P1 |=i; //写入行号
188 1 CLK=0; //锁存器显示数据
189 1 G=0; //打开显示
190 1 }
191
192
193 void showtime(uchar shijian)
194 {
195 1 uchar l,k;
196 1 for(k=1;k<9;k++)
197 1 {
198 2 for(l=0;l<16;l++)
199 2 {
200 3 dispram[l*BLKN]=dispram[l*BLKN]
201 3 <<1|dispram[l*BLKN+1]>>7;
202 3 dispram[l*BLKN+1]=dispram[l*BLKN+1]
203 3 <<1|dispram0[l*BLKN]>>7;
204 3 dispram0[l*BLKN]=dispram0[l*BLKN]
205 3 <<1|dispram0[l*BLKN+1]>>7;
206 3 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
207 3 <<1|time[shijian/16][l]>>(8-k);
208 3 }
209 2 delay(100);
210 2 }
211 1 for(k=1;k<9;k++)
212 1 {
213 2 for(l=0;l<16;l++)
214 2 {
215 3 dispram[l*BLKN]=dispram[l*BLKN]
216 3 <<1|dispram[l*BLKN+1]>>7;
217 3 dispram[l*BLKN+1]=dispram[l*BLKN+1]
218 3 <<1|dispram0[l*BLKN]>>7;
219 3 dispram0[l*BLKN]=dispram0[l*BLKN]
220 3 <<1|dispram0[l*BLKN+1]>>7;
221 3 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
222 3 <<1|time[shijian%16][l]>>(8-k);
223 3 }
224 2 delay(100);
225 2 }
226 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1550 ----
CONSTANT SIZE = 1040 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 78 6
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -