📄 8_8led.lst
字号:
C51 COMPILER V8.16 8_8LED 12/25/2008 19:46:19 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE 8_8LED
OBJECT MODULE PLACED IN .\bin\8_8led.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE src\8_8led.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\b
-in\8_8led.lst) OBJECT(.\bin\8_8led.obj)
line level source
1 #include<reg52.h>
2 #include<rtx51tny.h>
3 #include"inc/define.h"
4 #include"inc/8_8led.h"
5 #include"inc/utility.h"
6 #include"inc/font.h"
7
8
9 #define dataP P0
10 #define scanP P2
11
12 sbit sel=P2^6; //选择数据通道 0:选通上 1:选通下
13 sbit clr=P2^7; //清零数据 0有效
14
15
16 vu8 idata for_showh[6]={0,8, 1,1, 3,0}; //年 月 日
17 vu8 idata for_showl[6]={2,2, 4,9, 5,6}; //时 分 秒
18 //---16*16的空格 周 四 8*16的空格 2 7 摄氏度符号
19 vu8 idata week_tempert[8]={8, 0 , 4, 11, 2, 7, 10};
20
21 vu8 code * idata time_tab=time_tab_cgst[0];
22 vu8 code * idata week_tab=week_tab_cgst[0];
23 vu8 code * idata tempert=tempert_cgst[0];
24
25
26 u8 idata scroll_bp=0,scroll_bpt=0;
27 bit show_menu=0;
28 u8 * pmenu=menu[0];
29
30
31 struct Pad ph[6],pl[6];
32
33
34
35
36 /*****************************************************************
37 *程序运行的起始点,之后各个被创建的任务以5ms的时间片轮流运行
38 *函数名称:init()
39 *说明:这是一个RTX51任务,也是第一个被运行的任务
40 ******************************************************************/
41 void init() _task_ 0
42 {
43 1 EA=0;
44 1 EX0=1; //使能外部中断0,用以侦测按键
45 1 IT0=1; //外部中断0设置为下降沿触发
46 1 os_create_task(1);
47 1 os_create_task(2);
48 1 os_create_task(3);
49 1
50 1 os_create_task(6);
51 1 os_create_task(7);
52 1 os_create_task(8);
53 1 os_delete_task(0);
54 1 }
C51 COMPILER V8.16 8_8LED 12/25/2008 19:46:19 PAGE 2
55
56
57
58 /*********************************************************************
59 *在LED点阵屏上显示时间、日期、和温度 或者 菜单命令
60 *函数名称:show()
61 *说明:这是一个RTX51任务,os_create_task(1)后开始运行
62 ***********************************************************************/
63 void show(void ) _task_ 1
64 {
65 1 setShowStyle();
66 1 while(1)
67 1 {
68 2 if(show_menu)
69 2 showMenu();
70 2 else
71 2 showTime();
72 2 }
73 1 }
74
75
76 void showTime(void )
77 {
78 1 u8 word,sect; //word:可显示数字、汉字的个数 sect:每个字符的部分,
79 1 //具体讲即每个字符的列
80 1
81 1 for(word=0;word<7;word++) //7:六个8*8数字 一个16*16汉字
82 1 {
83 2 if(word<6)
84 2 {
85 3 for(sect=0;sect<8;sect++)
86 3 {
87 4 scanP=word*8+sect;
88 4 putData(word,sect);
89 4 delay20US(10);
90 4 clr=0; //消隐
91 4 }
92 3 }
93 2 else
94 2 {
95 3 for(sect=0;sect<16;sect++)
96 3 {
97 4 scanP=word*8+sect;
98 4 putData(word,sect);
99 4 delay20US(10);
100 4 clr=0; //消隐
101 4 }
102 3 }
103 2 }
104 1 //以下内容用以文字移动,即动态显示内容基址的确定
105 1 scroll_bpt++;
106 1 if(scroll_bpt>8)
107 1 {
108 2 scroll_bpt=0;
109 2 scroll_bp+=2;
110 2 }
111 1 if(scroll_bp>(16*3+8*4)) // 三个16*16汉字,四个8*16数字、字符
112 1 {
113 2 scroll_bp=0;
114 2 }
115 1 }
116
C51 COMPILER V8.16 8_8LED 12/25/2008 19:46:19 PAGE 3
117
118 extern u8 chge_time;
119 extern u8 idata chgeh[6];
120 extern u8 idata chgel[6];
121 void showMenu(void )
122 {
123 1 u8 word,sect;
124 1
125 1 if(chge_time)
126 1 {
127 2 for(word=0;word<6;word++)
128 2 {
129 3 for(sect=0;sect<8;sect++)
130 3 {
131 4 scanP=word*8 + sect;
132 4 clr=1;
133 4
134 4 if(sect<pl[word].pn)
135 4 dataP=pl[word].pad[sect];
136 4 else if(!(sect<(pl[word].pn + 5)))
137 4 dataP=pl[word].pad[sect-5];
138 4 else
139 4 dataP=m_time[chgel[word]][sect-pl[word].pn];
140 4 sel=1;
141 4
142 4 if(sect<ph[word].pn)
143 4 dataP=ph[word].pad[sect];
144 4 else if(!(sect<(ph[word].pn + 5)))
145 4 dataP=ph[word].pad[sect-5];
146 4 else
147 4 dataP=m_time[chgeh[word]][sect-ph[word].pn];
148 4 sel=0;
149 4
150 4 delay20US(10);
151 4 clr=0;
152 4 }
153 3 }
154 2 }
155 1 else
156 1 {
157 2 for(word=0;word<4;word++)
158 2 {
159 3 for(sect=0;sect<16;sect++)
160 3 {
161 4 scanP=word*16+sect;
162 4 clr=1;
163 4 dataP=pmenu[word*32+sect+16];
164 4 sel=1;
165 4 dataP=pmenu[word*32+sect];
166 4 sel=0;
167 4
168 4 delay20US(10);
169 4 clr=0;
170 4 }
171 3 }
172 2 }
173 1 }
174
175
176 /*******************************************************************
177 *设置时间、日期的显示格式
178 *函数名称:setShowStyle()
C51 COMPILER V8.16 8_8LED 12/25/2008 19:46:19 PAGE 4
179 *说明:
180 ********************************************************************/
181 void setShowStyle()
182 {
183 1 //设置显示 年月日 的格式:08:11:24
184 1 ph[0].pn=2;
185 1 ph[0].pad[0]=ph[0].pad[1]=ph[0].pad[2]=0x00;
186 1 ph[1].pn=1;
187 1 ph[1].pad[0]=ph[1].pad[1]=0x00;
188 1 ph[1].pad[2]=0x66;
189 1
190 1 ph[2].pn=2;
191 1 ph[2].pad[0]=0x66;
192 1 ph[2].pad[1]=ph[2].pad[2]=0x00;
193 1 ph[3].pn=1;
194 1 ph[3].pad[0]=ph[3].pad[1]=0x00;
195 1 ph[3].pad[2]=0x66;
196 1
197 1 ph[4].pn=2;
198 1 ph[4].pad[0]=0x66;
199 1 ph[4].pad[1]=ph[4].pad[2]=0x00;
200 1 ph[5].pn=1;
201 1 ph[5].pad[0]=ph[5].pad[1]=ph[5].pad[2]=0x00;
202 1
203 1 //设置显示 时分秒 的格式:22:23:56
204 1 pl[0].pn=2;
205 1 pl[0].pad[0]=pl[0].pad[1]=pl[0].pad[2]=0x00;
206 1 pl[1].pn=1;
207 1 pl[1].pad[0]=pl[1].pad[1]=0x00;
208 1 pl[1].pad[2]=0x66;
209 1
210 1 pl[2].pn=2;
211 1 pl[2].pad[0]=0x66;
212 1 pl[2].pad[1]=pl[2].pad[2]=0x00;
213 1 pl[3].pn=1;
214 1 pl[3].pad[0]=pl[3].pad[1]=0x00;
215 1 pl[3].pad[2]=0x66;
216 1
217 1 pl[4].pn=2;
218 1 pl[4].pad[0]=0x66;
219 1 pl[4].pad[1]=pl[4].pad[2]=0x00;
220 1 pl[5].pn=1;
221 1 pl[5].pad[0]=pl[5].pad[1]=pl[5].pad[2]=0x00;
222 1 }
223
224
225 /*****************************************************************
226 *将待显示数据送到P0口,并锁入适当的锁存器在上排或下排8*8LED显示他们
227 *函数名称:putData()
228 *说明;每排前六个LED点阵与后两个LED点阵放置数据方式不同
229 ******************************************************************/
230 void putData(u8 word,u8 sect)
231 {
232 1 u8 row,col;
233 1 clr=1;
234 1
235 1 if(word<6) //先放上行在仿真中只显示下行,不知道为社么
236 1 {
237 2 if(sect<pl[word].pn)
238 2 dataP=pl[word].pad[sect];
239 2 else if(!(sect<(pl[word].pn + 5)))
240 2 dataP=pl[word].pad[sect-5];
C51 COMPILER V8.16 8_8LED 12/25/2008 19:46:19 PAGE 5
241 2 else
242 2 dataP=*(time_tab + 6*for_showl[word] + sect - pl[word].pn);
243 2 sel=1;
244 2
245 2 if(sect<ph[word].pn)
246 2 dataP=ph[word].pad[sect];
247 2 else if(!(sect<(ph[word].pn + 5)))
248 2 dataP=ph[word].pad[sect-5];
249 2 else
250 2 dataP=*(time_tab + 6*for_showh[word] + sect-ph[word].pn);
251 2 sel=0;
252 2 }
253 1 else
254 1 {
255 2 if((scroll_bp+sect)<16*3)
256 2 {
257 3 row=(scroll_bp+sect)/16;
258 3 col=(scroll_bp+sect)%16;
259 3 dataP=*(week_tab + 32*week_tempert[row] + col+16);
260 3 sel=1;
261 3 dataP=*(week_tab + 32*week_tempert[row] + col);
262 3 sel=0;
263 3 }
264 2 else if((scroll_bp+sect)<(16*3+8*4))
265 2 {
266 3 row=(scroll_bp+sect)/8-3;
267 3 col=(scroll_bp+sect)%8;
268 3 dataP=*(tempert + 16*week_tempert[row] + col+8);
269 3 sel=1;
270 3 dataP=*(tempert + 16*week_tempert[row] + col);
271 3 sel=0;
272 3 }
273 2 }
274 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1159 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 51 5
IDATA SIZE = 28 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -