?? mylcd.lst
字號:
C51 COMPILER V7.50 MYLCD 05/12/2005 10:41:59 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MYLCD
OBJECT MODULE PLACED IN mylcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE mylcd.c OPTIMIZE(9,SIZE) DEBUG OBJECTEXTEND
line level source
1 /********************************************************
2 **這個程序是時鐘程序用LCM12832作為顯示.
3 **P1口作為鍵盤輸入P1.0=增加鍵;P11為選擇鍵
4 **時鐘顯示格式為:“時:分:秒”字體為16*16點陣
5 **修改方式為兩鍵式選擇鍵合修改鍵
6 **還可顯示萬年歷:“年:月:日”
7 **需要子函數:
8 ** 1、HEX->BCD子函數hex_bcd()
9 ** 2、顯示子函數display()
10 ** 3、鍵盤子函數key()
11 ** 4、時鐘子函數time()
12 ** 5、日歷子函數day()
13 ** 6、顯示控制子函數discommond()
14 ** 7、定時器中斷0 time0()
15 ** 8、初始化子函數 begin().
16 ** 9、初始屏顯display_begin().
17 ** 10、時間屏顯display_time().
18 ** 11、潤年判斷leapf().
19 **現有問題:鍵盤修改程序還未完成
20 ** 程序不夠精簡
21 *********************************************************/
22 #include<reg52.h>
23 #define time_TH 0x3c; // time0 :50ms 12M
24 #define time_TL 0xba;
25
26 unsigned char data msecond=0;
27 bit data second_flag=0,day_flag=0,leap=0,display_flag=0,ku_flag;
28 unsigned char day_temp;
29
30 struct time_str{
31 unsigned char hour;
32 unsigned char minute;
33 unsigned char second;
34 }time_now;
35
36 struct day_str{
37 unsigned int year;
38 unsigned char month;
39 unsigned char day;
40 }day_now;
41
42
43 //顯示緩沖區
44 unsigned char data display_bcd[13];
45
46
47 //每月天數表
48 unsigned char code day_num[]=
49 {31,28,31,30,31,30,31,31,30,31,30,31};
50
51
52 //時間顯示位置表
53 unsigned char code time_loc[][1]=
54 {0,2,0,3,0,4,0,5,0,8,0,9,0,12,0,13
55 ,16,4,16,5,16,8,16,9,16,12,16,13};
C51 COMPILER V7.50 MYLCD 05/12/2005 10:41:59 PAGE 2
56
57
58 //漢字顯示位置表
59 //指定位置顯示“年,月,日,時,分,秒”
60 unsigned char code zhi_loc[]=
61 {0x06,0x01,0x0a,0x01,0x0e,0x01,0x06,0x10,0x0a,0x10,0x0e,0x10};
62 /********************************************************************
63 **字庫開始
64 **********************************************************************/
65 unsigned char code shi[]={
66 /*-- 文字: 年 --*/
67 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
68 0x08,0x00,0x0F,0xFC,0x10,0x80,0x10,0x80,0x20,0x80,0x4F,0xF8,0x88,0x80,0x08,0x80,
69 0x08,0x80,0x08,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
70
71 /*-- 文字: 月 --*/
72 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
73 0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
74 0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,
75
76 /*-- 文字: 日 --*/
77 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
78 0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
79 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00,
80
81 /*-- 文字: 時 --*/
82 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
83 0x00,0x10,0x00,0x10,0x7C,0x10,0x44,0x10,0x47,0xFE,0x44,0x10,0x7C,0x10,0x45,0x10,
84 0x44,0x90,0x44,0x90,0x7C,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x50,0x00,0x20,
85
86 /*-- 文字: 分 --*/
87 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
88 0x08,0x80,0x0C,0x80,0x08,0x40,0x10,0x20,0x10,0x30,0x20,0x18,0x40,0x0E,0x9F,0xE4,
89 0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x08,0x20,0x10,0xA0,0x20,0x40,0x40,0x00,
90
91 /*-- 文字: 秒 --*/
92 /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
93 0x0C,0x20,0xF0,0x20,0x10,0x20,0x11,0x28,0xFD,0xA4,0x11,0x22,0x32,0x22,0x3A,0x20,
94 0x54,0x22,0x54,0x22,0x90,0x04,0x10,0x08,0x10,0x10,0x10,0x60,0x11,0x80,0x16,0x00};
95 unsigned char code num[]={
96 /*-- 文字: 0 --*/
97 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
98 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
99
100 /*-- 文字: 1 --*/
101 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
102 0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,
103
104 /*-- 文字: 2 --*/
105 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
106 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,
107
108 /*-- 文字: 3 --*/
109 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
110 0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
111
112 /*-- 文字: 4 --*/
113 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
114 0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,
115
116 /*-- 文字: 5 --*/
117 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
C51 COMPILER V7.50 MYLCD 05/12/2005 10:41:59 PAGE 3
118 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,
119
120 /*-- 文字: 6 --*/
121 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
122 0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,
123
124 /*-- 文字: 7 --*/
125 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
126 0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
127
128 /*-- 文字: 8 --*/
129 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
130 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,
131
132 /*-- 文字: 9 --*/
133 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
134 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,
135
136 /*-- 文字: 0 --*/
137 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
138 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,
139
140 /*-- 文字: 1 --*/
141 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
142 0xFF,0xFF,0xFF,0xEF,0x8F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF,
143
144 /*-- 文字: 2 --*/
145 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
146 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xFB,0xFB,0xF7,0xEF,0xDF,0xBD,0x81,0xFF,0xFF,
147
148 /*-- 文字: 3 --*/
149 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
150 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xFB,0xE7,0xFB,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,
151
152 /*-- 文字: 4 --*/
153 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
154 0xFF,0xFF,0xFF,0xFB,0xF3,0xEB,0xDB,0xDB,0xBB,0xBB,0x81,0xFB,0xFB,0xE1,0xFF,0xFF,
155
156 /*-- 文字: 5 --*/
157 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
158 0xFF,0xFF,0xFF,0x81,0xBF,0xBF,0xBF,0xA7,0x9B,0xFD,0xFD,0xBD,0xBB,0xC7,0xFF,0xFF,
159
160 /*-- 文字: 6 --*/
161 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
162 0xFF,0xFF,0xFF,0xE3,0xDB,0xBF,0xBF,0xA7,0x9B,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,
163
164 /*-- 文字: 7 --*/
165 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
166 0xFF,0xFF,0xFF,0x81,0xBB,0xBB,0xF7,0xF7,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,
167
168 /*-- 文字: 8 --*/
169 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
170 0xFF,0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xDB,0xE7,0xDB,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF,
171
172 /*-- 文字: 9 --*/
173 /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
174 0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xD9,0xE5,0xFD,0xFD,0xDB,0xC7,0xFF,0xFF,
175
176 };
177 unsigned char code ku[]={
178 /*-- 調入了一幅圖像:這是哭的的圖像 --*/
179 /*-- 寬度x高度=16x16 --*/
C51 COMPILER V7.50 MYLCD 05/12/2005 10:41:59 PAGE 4
180 0x03,0xC0,0x0C,0x30,0x10,0x08,0x20,0x04,0x40,0x02,0x52,0x4A,0x8C,0x31,0x80,0x01,
181 0x80,0x01,0x81,0x81,0x42,0x42,0x44,0x22,0x20,0x04,0x10,0x08,0x0C,0x30,0x03,0xC0,
182 /*-- 調入了一幅圖像:這是笑的的圖像 --*/
183 /*-- 寬度x高度=16x16 --*/
184 0x03,0xC0,0x0C,0x30,0x10,0x08,0x20,0x04,0x40,0x02,0x40,0x02,0x8C,0x31,0x92,0x49,
185 0x80,0x01,0x80,0x01,0x44,0x22,0x42,0x42,0x21,0x84,0x10,0x08,0x0C,0x30,0x03,0xC0
186 };
187 /*****************************************************************************
188 **字庫結束
189 ******************************************************************************/
190
191 void day();
192 void time();
193 void begin();
194 void display(unsigned char *cpoint,unsigned char x_line,unsigned char y_line,unsigned char s_l);
195 unsigned char hex_bcd(unsigned char hex);
196 void display_begin();
197 void display_time(struct time_str time,struct day_str day);
198 bit leapf(unsigned int year);
199
200 void main()
201 {
202 1 begin();
203 1 display_begin();
204 1 while (1)
205 1 {
206 2 while (1)
207 2 {
208 3 time();
209 3 day();
210 3 if (display_flag)
211 3 {
212 4 display_flag=0;
213 4 display_time(time_now,day_now);
214 4
215 4 }
216 3 if (display_flag)
217 3 continue;
218 3 if((day_now.month==2)&leap)
219 3 {
220 4 leap=0;
221 4 day_temp=29;
222 4 }
223 3 }
224 2 }
225 1 }
226
227
228
229
230 /******************************************************
231 **time()子函數
232 **參數:second_flay
233 **
234 ******************************************************/
235 void time(){
236 1 if(second_flag){
237 2 display_flag=1;
238 2 second_flag=0;
239 2 // day_flag=1;
240 2
241 2 time_now.second++;
C51 COMPILER V7.50 MYLCD 05/12/2005 10:41:59 PAGE 5
242 2 if(time_now.second==60){
243 3 time_now.second=0;
244 3 time_now.minute++;
245 3 if(time_now.minute==60){
246 4 time_now.minute=0;
247 4 time_now.hour++;
248 4 if(time_now.hour==24){
249 5 time_now.hour=0;
250 5 day_flag=1;
251 5 }
252 4 }
253 3 }
254 2 }
255 1 }
256
257
258
259
260 /*********************************************************
261 **day()子函數
262 **參數:day_flag日標志;leap潤年標志
263 **
264 **********************************************************/
265 void day(){
266 1 if(day_flag){
267 2 day_flag=0;
268 2 day_now.day++;
269 2 if(day_now.day==day_temp+1){
270 3 day_now.month++;
271 3 if((day_now.month==2)&leap){
272 4 leap=0;
273 4 day_temp=29;
274 4 }
275 3 else day_temp=day_num[day_now.month-1];
276 3 day_now.day=1;
277 3 if(day_now.month==13){
278 4 day_now.month=1;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -