?? main.lst
字號:
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //***********************************************************
2 //***********12864LCD多功能液晶時鐘********************
3 //*本系統采用4個按鍵,人性化的菜單顯示.
4 //主界面顯示的參數:陽歷,陰歷干支年,星期,時分秒,鬧鐘,溫度,公共節日,節氣;
5 //功能參數:密碼,232通信輸出,紅外控制,陽歷,陰歷,讀U盤;
6 //作者:陳志偉
7 //設計日期:2007年11月~2007年12月;
8 //交流QQ:871993824
9
10 /***************************************************************/
11 #include <sfr.h>
12 #include <Calendar.h>
13 //typedef unsigned char uchar; //自定義關鍵字
14 //typedef unsigned int uint;
15 //LCD接口定義
16 sbit BUSY_FLAG=P2^7; //液晶模塊忙標志
17 sbit RS =P0^0; //模式位,為0輸入指令,為1輸入數據
18 sbit RW =P0^1; //讀寫位,為0讀,為1寫
19 sbit E =P0^2; //使能位
20 sbit PSB=P0^3;
21 #define LCD_DATA P2 //液晶數據口
22 //LCD指令集定義
23 #define ClearDisplay 0x01 //清顯示指令
24 #define EntryModeSet 0x06 //設置輸入模式
25 #define DisplayOnCtrl 0x0c //設置開顯控制
26 #define FunctionSetB 0x30 //功能設定(基本指令)
27 #define FunctionSetE 0x34 //功能設定(擴充指令)
28 #define FuncDrawOn 0x36 //設置繪圖功能
29 //內存定義
30 uchar lcdPosX, lcdPosY; //X,Y坐標
31 uchar halfScr, halfLineCnt, basicBlock; //半屏,半屏行數,N*8塊
32 uchar yy,mo,dd,xq,hh,mm,ss; //定義時間映射全局變量
33 uchar keys,state,cishu; //鍵值keys,狀態state,次數time
34 bit setting;
35 //定義累加器A中的各位
36 sbit a7 = ACC ^ 7;
37 //鍵盤引腳定義
38 sbit key_1 =P1^0; //功能:設置兼返回
39 sbit key_2 =P1^1; //功能:調整位加1
40 sbit key_3 =P1^2; //功能:指向下一項
41 sbit key_4 =P1^3; //功能:確定當前操作
42 //定義DS1302時鐘接口
43 sbit clock_clk = P3^1; //ds1302_clk(時鐘線)
44 sbit clock_dat = P3^0; //ds1302_dat(數據線)
45 sbit clock_Rst = P1^4; //ds1302_Rst(復位線
46 //溫度傳感器定義
47 sbit DQ = P1^5; //ds18B20)
48 //燈與揚聲器定義
49 sbit led_secd =P3^3; //秒閃爍燈
50 sbit BEEP =P1^6; //揚聲器
51 //表格2的格式:鍵碼+次態+執行模塊
52 uchar fun_zero[4]={1,1,0,0};
53 uchar fun_one[7]={1,1,0,0};
54 /***************************************************************/
55 //功能:延時ms毫秒
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 2
56 void delayMs (uchar ms)
57 { uchar i;
58 1 while (--ms)
59 1 { for(i=0; i<125; i++);}
60 1 }
61 /***************************************************************/
62 //功能:蜂鳴器響一聲
63 void beepBl (void)
64 {
65 1 uchar i;
66 1 for(i=0; i<100; i++)
67 1 { delayMs(2);BEEP = !BEEP; }
68 1 BEEP = 1;
69 1 }
70 /***************************************************************/
71 //功能:延時sec秒
72 void delaySec (uchar sec)
73 {
74 1 uchar i;
75 1 while(--sec)
76 1 { for(i=0; i<200; i++)
77 2 {delayMs(6);}
78 2 }
79 1 }
80 /***************************************************************/
81 //功能:LCD檢測忙信號
82 void checkLcdBusy (void)
83 { LCD_DATA = 0xff;
84 1 RS = 0;
85 1 RW= 1;
86 1 E = 1;
87 1 while (BUSY_FLAG);
88 1 E= 0;
89 1 }
90 /***************************************************************/
91 //功能:LCD寫命令
92 //輸入參數:控制命令Command
93 void lcdWriteCommand (uchar Command)
94 { checkLcdBusy();
95 1 RS = 0;
96 1 RW = 0;
97 1 LCD_DATA = Command;
98 1 E = 1;
99 1 delayMs(1);
100 1 E = 0;
101 1 }
102 /***************************************************************/
103 //功能:清除液晶屏幕
104 void lcdClear (void)
105 { lcdWriteCommand(ClearDisplay); }
106 /***************************************************************/
107 //功能:液晶初始化
108 void lcdInit (void)
109 { lcdWriteCommand(FunctionSetE);
110 1 lcdWriteCommand(FunctionSetB);
111 1 lcdClear();
112 1 lcdWriteCommand(EntryModeSet);
113 1 lcdWriteCommand(DisplayOnCtrl);
114 1 }
115 /***************************************************************/
116 //功能:LCD寫數據
117 //輸入參數:顯示的單個字節Data
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 3
118 void lcdWriteData (uchar Data)
119 { checkLcdBusy();
120 1 RS = 1;
121 1 RW= 0;
122 1 LCD_DATA = Data;
123 1 E= 1;
124 1 delayMs(1);
125 1 E= 0;
126 1 }
127 /***************************************************************/
128 //功能:向LCD寫入坐標
129 void wrPosition (void)
130 { lcdWriteCommand(FunctionSetE);
131 1 lcdWriteCommand(lcdPosY);
132 1 lcdWriteCommand(lcdPosX);
133 1 lcdWriteCommand(FunctionSetB);
134 1 }
135 /***************************************************************/
136 //功能:顯示自定義的圖形
137 //輸入參數:圖形數據bmp,Cls=清除圖形屏幕選項(OFF為不清屏,即顯示圖形,ON為清屏)
138 void displayPhoto (uchar *bmp, uchar bmpCls)
139 {
140 1 lcdPosX = 0x80;
141 1 halfScr = 2;
142 1
143 1 for (;halfScr != 0; halfScr--)
144 1 { lcdPosY = 0x80; halfLineCnt = 32;
145 2 for (;halfLineCnt != 0; halfLineCnt--)
146 2 { basicBlock = 16; wrPosition ();
147 3 for (; basicBlock != 0; basicBlock--)
148 3 { if (bmpCls == 0) { lcdWriteData (*bmp++);}
149 4 else if(bmpCls==1){ lcdWriteData (0x00);}
150 4 }
151 3 lcdPosY++;
152 3 }
153 2 lcdPosX = 0x88;
154 2 }
155 1 lcdWriteCommand(FuncDrawOn);
156 1 lcdWriteCommand(FunctionSetB);
157 1 }
158 /***************************************************************/
159 //功能:字符反白顯示
160 //輸入參數:反白字符的行cx,列cy,長度width
161 void convertChar (uchar CX, CY, width)
162 {
163 1 displayPhoto(0,1);
164 1 lcdPosY = 0x80;
165 1
166 1 if (CX == 0)
167 1 { CX = 0x80;halfLineCnt = 16; }
168 1 else if (CX == 1){CX = 0x80;halfLineCnt = 32;}
169 1 else if (CX == 2){CX = 0x88;halfLineCnt = 16;}
170 1 else if (CX == 3){CX = 0x88;halfLineCnt = 32;}
171 1 lcdPosX = CX + CY;
172 1
173 1 for (; halfLineCnt != 0; halfLineCnt--)
174 1 { basicBlock = width;
175 2 wrPosition();
176 2 for (;basicBlock != 0; basicBlock--)
177 2 { if (halfLineCnt > 16) {lcdWriteData(0x00); }
178 3 else {lcdWriteData (0xff);}
179 3 }
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 4
180 2 lcdPosY++;
181 2 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -