?? lcm_t.lst
字號:
C51 COMPILER V6.12 LCM_T 02/10/2007 00:13:53 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCM_T
OBJECT MODULE PLACED IN lcm_t.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcm_t.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 //---程序說明---//
3
4 /*
5 名字:main.c
6 作者:杜洋(doyoung)
7 創建日:2006-11-26
8 工程:智能助理電子鐘(AI-timer)
9 */
10
11 //---修改日志---//
12
13 /*
14
15 */
16
17
18 //---硬件說明---//
19
20 /*
21 P0.0~0.7 NC
22
23 P1.0 右上角LED-G 低電平有效(L)
24 P1.1 右下角LED-G L
25 P1.2 左下角LED-G L
26 P1.3 左上角LED-G L
27 P1.4 4個LED-R L
28
29 P1.5~1.7 ISP下載用 ~
30
31 P2.1 LCM -5 SID 串行數據輸入,~
32 P2.2 LCD -6 CLK 串行時鐘,~
33
34 P2.3 左上角KEY -
35 P2.4 左下角KEY -
36 P2.5 右上角KEY -
37 P2.6 右下角KEY -
38
39 P2.7 背后LED-B L
40
41 P3.0 溫度單總線 ~
42
43 P3.1 BEEP L
44
45 P3.2 KEY中斷 -
46
47 P3.3 DS1302 -5 RST_ 低電平復位(L)
48 P3.4 DS1302 -6 IO ~
49 P3.5 DS1302 -7 SCLK ~
50
51 P3.6 24C02 -6 SCL ~
52 P3.7 24C02 -5 SDA ~
53
54 */
55
C51 COMPILER V6.12 LCM_T 02/10/2007 00:13:53 PAGE 2
56 /****************************************************************************/
57 //頭文件
58 #include <AT89X52.h>
59 #include <string.h>
60 /*****************************************************************************/
61 //燈與蜂鳴器定義
62 sbit led_b = P2^7;
63 sbit led_r = P1^4;
64 sbit led_g1 = P1^3;
65 sbit led_g2 = P1^2;
66 sbit led_g3 = P1^0;
67 sbit led_g4 = P1^1;
68 sbit beep = P3^1;
69 /*****************************************************************************/
70 //溫度傳感器定義
71 sbit DQ = P3 ^ 0;//ds18B20
72 /*****************************************************************************/
73 //鍵盤引腳定義
74 sbit KEY_1 = P2^3; //左上
75 sbit KEY_2 = P2^4; //左下
76 sbit KEY_3 = P2^6; //右上
77 sbit KEY_4 = P2^5; //右下
78 sbit KEY_I = P3^2; //常0
79 /****************************************************************************/
80 //引腳定義
81 sbit SID = P2^1; //數據
82 sbit SCLK = P2^2; //時鐘
83 /*****************************************************************************/
84 //定義DS1302時鐘接口
85 sbit clock_clk = P3 ^ 5;//ds1302_clk(時鐘線)
86 sbit clock_dat = P3 ^ 4;//ds1302_dat(數據線)
87 sbit clock_Rst = P3 ^ 3;//ds1302_Rst(復位線)
88 /*****************************************************************************/
89 //定義累加器A中的各位
90 sbit a0 = ACC ^ 0;
91 sbit a1 = ACC ^ 1;
92 sbit a2 = ACC ^ 2;
93 sbit a3 = ACC ^ 3;
94 sbit a4 = ACC ^ 4;
95 sbit a5 = ACC ^ 5;
96 sbit a6 = ACC ^ 6;
97 sbit a7 = ACC ^ 7;
98 /****************************************************************************/
99 //定義全局變量
100 unsigned char yy,mo,dd,xq,hh,mm,ss;//定義時間映射全局變量(專用寄存器)
101 bit w = 0; //調時標志位
102 static unsigned char menu = 0;//定義靜態小時更新用數據變量
103 static unsigned char keys = 0;//定義靜態小時更新用數據變量
104 static unsigned char timecount = 0;//定義靜態軟件計數器變量
105 /****************************************************************************/
106 void DelayM(unsigned int a){//延時函數 1MS/次
107 1 unsigned char i;
108 1 while( --a != 0){
109 2 for(i = 0; i < 125; i++); //一個 ; 表示空語句,CPU空轉。
110 2 } //i 從0加到125,CPU大概就耗時1毫秒
111 1 }
112 /****************************************************************************/
113 //函數聲明
114 void lcm_w_word(unsigned char *str) ; //寫字符 例:lcm_w_word("您好!");
115 void lcm_w_test(bit start,unsigned char ddata); //(0,指令) (1,數據)
116 void lcm_w_byte(unsigned char bbyte); //寫一個字節給lcm
117 void delaynms(unsigned int di); //延時
C51 COMPILER V6.12 LCM_T 02/10/2007 00:13:53 PAGE 3
118 void lcm_init(void); //lcm初始化
119 void lcm_clr(void); //清屏
120
121 void days (viod) { //公歷節日數據庫
122 1
123 1 lcm_w_test(0,0x80);
124 1 lcm_w_word("[Dis] [Set]");
125 1
126 1 lcm_w_test(0,0x98);
127 1 // ----|----------------|
128 1 if ( mo == 0x01 && dd == 0x17 ){ lcm_w_word("三天后是你的生日"); }//
129 1 if ( mo == 0x01 && dd == 0x19 ){ lcm_w_word("明天是你的生日!!"); }//
130 1
131 1 if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word("Happy New Year!!"); }//1月
132 1 if ( mo == 0x01 && dd == 0x28 ){ lcm_w_word(" 世界麻風日 "); }
133 1
134 1 if ( mo == 0x02 && dd == 0x02 ){ lcm_w_word(" 世界濕地日 "); }//2月
135 1 if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word(" 明天情人節了 "); }
136 1 if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word(" 今天是情人節 "); }
137 1
138 1 if ( mo == 0x03 && dd == 0x01 ){ lcm_w_word(" 國際海豹日 "); }//3月
139 1 if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word(" 全國愛耳日 "); }
140 1 if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word(" 3.8婦女節 "); }
141 1 if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word(" 植樹節 "); }
142 1 if ( mo == 0x03 && dd == 0x14 ){ lcm_w_word(" 國際警察日 "); }
143 1 if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word(" 消費者權益日 "); }
144 1 if ( mo == 0x03 && dd == 0x17 ){ lcm_w_word(" 國際航海日 "); }
145 1 if ( mo == 0x03 && dd == 0x21 ){ lcm_w_word(" 世界森林日 "); }
146 1 if ( mo == 0x03 && dd == 0x22 ){ lcm_w_word(" 世界水日 "); }
147 1 if ( mo == 0x03 && dd == 0x23 ){ lcm_w_word(" 世界氣象日 "); }
148 1 if ( mo == 0x03 && dd == 0x24 ){ lcm_w_word("世界防治結核病日"); }
149 1
150 1 if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word("愚人節 小心上當"); }//4
151 1 if ( mo == 0x04 && dd == 0x07 ){ lcm_w_word(" 世界衛生日 "); }
152 1 if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word(" 復活節 "); }
153 1 if ( mo == 0x04 && dd == 0x13 ){ lcm_w_word(" 黑色星期五 "); }
154 1
155 1 if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word(" 勞動節 放假 "); }//5
156 1 if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word(" 青年節 "); }
157 1 if ( mo == 0x05 && dd == 0x08 ){ lcm_w_word(" 世界紅十字日 "); }
158 1 if ( mo == 0x05 && dd == 0x12 ){ lcm_w_word(" 國際護士節 "); }
159 1 if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("近日注意母親節 "); }
160 1 if ( mo == 0x05 && dd == 0x15 ){ lcm_w_word(" 國際家庭日 "); }
161 1 if ( mo == 0x05 && dd == 0x31 ){ lcm_w_word(" 世界無煙日 "); }
162 1
163 1 if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word(" 國際兒童節 "); }//6
164 1 if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word(" 世界環境日 "); }
165 1 if ( mo == 0x06 && dd == 0x26 ){ lcm_w_word(" 國際禁毒日 "); }
166 1 if ( mo == 0x06 && dd == 0x06 ){ lcm_w_word(" 全國愛眼日 "); }
167 1 if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word("近日注意父親節 "); }
168 1 if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word("近日注意父親節 "); }
169 1
170 1 if ( mo == 0x07 && dd == 0x01 ){ lcm_w_word("香港回歸記念日 "); }//7
171 1 if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word("抗日戰爭記念日 "); }
172 1 if ( mo == 0x07 && dd == 0x11 ){ lcm_w_word(" 世界人口日 "); }
173 1
174 1 if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word(" 八一建軍節 "); }//8
175 1 if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word(" 中國男子節 "); }
176 1 if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word("抗戰勝利記念日 "); }
177 1
178 1 if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word(" 中國教師節 "); }//9
179 1 if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word("九·一八事變記念"); }
C51 COMPILER V6.12 LCM_T 02/10/2007 00:13:53 PAGE 4
180 1 if ( mo == 0x09 && dd == 0x20 ){ lcm_w_word(" 國際愛牙日 "); }
181 1 if ( mo == 0x09 && dd == 0x27 ){ lcm_w_word(" 世界旅游日 "); }
182 1
183 1 if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word(" 中國國慶節 "); }//10
184 1 if ( mo == 0x10 && dd == 0x04 ){ lcm_w_word(" 世界動物日 "); }
185 1 if ( mo == 0x10 && dd == 0x24 ){ lcm_w_word(" 聯合國日 "); }
186 1 if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word("明天國際教師節 "); }
187 1 if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word(" 國際教師節 "); }
188 1
189 1 if ( mo == 0x11 && dd == 0x10 ){ lcm_w_word(" 世界青年節 "); }//11
190 1 if ( mo == 0x11 && dd == 0x17 ){ lcm_w_word(" 世界學生節 "); }
191 1
192 1 if ( mo == 0x12 && dd == 0x01 ){ lcm_w_word(" 世界艾滋病日 "); }//12
193 1 if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word(" 明晚平安夜 "); }
194 1 if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word(" 今晚平安夜 "); }
195 1 if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word(" 圣誕快樂 "); }
196 1 if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word(" 明日新年 "); }
197 1
198 1 else{
199 2 if ( hh >= 0x04 && hh < 0x06 ){ lcm_w_word("★★__▲▲__凌晨"); }
200 2 if ( hh >= 0x06 && hh < 0x08 ){ lcm_w_word("☆○__▲△__早晨"); }
201 2 if ( hh >= 0x08 && hh < 0x12 ){ lcm_w_word("__●__▲▲__上午"); }
202 2 if ( hh == 0x12) { lcm_w_word("____▲●▲__中午"); }
203 2 if ( hh >= 0x13 && hh < 0x18 ){ lcm_w_word("__▲▲__●__下午"); }
204 2 if ( hh >= 0x18 && hh < 0x22 ){ lcm_w_word("△▲__●☆__晚上"); }
205 2 if ( hh >= 0x22 && hh <= 0x23 ){ lcm_w_word("△▲__★☆__夜里"); }
206 2 if ( hh >= 0x00 && hh < 0x04 ){ lcm_w_word("__★▲▲★__深夜"); }
207 2 }
208 1
209 1
210 1
211 1 }
212 /****************************************************************************/
213 //初始化LCM
214 void lcm_init(void) {
215 1 delaynms(100); //啟動等待,等LCM講入工作狀態
216 1 lcm_w_test(0,0x30); //8 位介面,基本指令集
217 1 lcm_w_test(0,0x0c); //顯示打開,光標關,反白關
218 1 lcm_w_test(0,0x01); //清屏,將DDRAM的地址計數器歸零
219 1 delaynms(100); //啟動等待,等LCM講入工作狀態
220 1
221 1 }
222 /******************************************************************************/
223 //寫指令或數據 (0,指令) (1,數據)
224 void lcm_w_test(bit start, unsigned char ddata) {
225 1 unsigned char start_data,Hdata,Ldata;
226 1 if(start==0)
227 1 start_data=0xf8; //0:寫指令
228 1 else
229 1 start_data=0xfa; //1:寫數據
230 1
231 1 Hdata=ddata&0xf0; //取高四位
232 1 Ldata=(ddata<<4)&0xf0; //取低四位
233 1 lcm_w_byte(start_data); //發送起始信號
234 1 delaynms(5); //延時是必須的
235 1 lcm_w_byte(Hdata); //發送高四位
236 1 delaynms(5); //延時是必須的
237 1 lcm_w_byte(Ldata); //發送低四位
238 1 delaynms(5); //延時是必須的
239 1 }
240
241 /******************************************************************************/
C51 COMPILER V6.12 LCM_T 02/10/2007 00:13:53 PAGE 5
242 //發送一個字節(底層函數)
243 void lcm_w_byte(unsigned char bbyte) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -