?? main.lst
字號:
C51 COMPILER V7.10 MAIN 08/16/2007 20:42:55 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\XingYan\KEIL\C51\Bin\c51.exe main.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)
line level source
1
2 #include <reg52.h>
3 #include <intrins.h>
4 #include <stdio.h>
5 #include <absacc.h>
6
7 #define uchar unsigned char
8 #define uint unsigned int
9
10 #define LCD_LENGTH 128
11 #define LCD_WIDTH 64
12
13 #define Graphic 1
14 #define TXT 0
15
16 #define LCD_DATA XBYTE[0x0000]
17 #define LCD_Command XBYTE[0x0100]
18
19 sbit P10=P1^0;
20
21 sbit P20=P2^0;
22 sbit P21=P2^1;
23 sbit P22=P2^2;
24 sbit P23=P2^3;
25 sbit P24=P2^4;
26 sbit P25=P2^5;
27 sbit P26=P2^6;
28 sbit P27=P2^7;
29
30 /*************************** 是否處于忙態 ************************/
31
32 void CheckRW(void) //指令&數據讀寫狀態,看是否處于忙態
33 {
34 1 while( (LCD_Command & 0x03) != 0x03) ;
35 1 }
36
37 void CheckAutoWrite(void) //數據自動寫狀態,看是否處于忙態
38 {
39 1 while( (LCD_Command & 0x08) == 0);
40 1 }
41
42 void CheckScreen(void) //屏讀屏拷貝是否出錯
43 {
44 1 while( LCD_Command & 0x40 );
45 1 }
46
47
48 /********************** 讀寫數據 ************************/
49 void WriteData(uchar uData) //寫入
50 {
51 1 LCD_DATA = uData;
52 1 }
53
54 uchar ReadData(void) //讀
55 {
C51 COMPILER V7.10 MAIN 08/16/2007 20:42:55 PAGE 2
56 1 uchar uData;
57 1 uData = LCD_DATA;
58 1 return uData;
59 1 }
60
61 /************************ 設置命令操作 *****************/
62 void Set_Com(uchar com)
63 {
64 1 CheckRW();
65 1 LCD_Command = com;
66 1 }
67
68 void Set_Com_1(uchar param1,uchar com)
69 {
70 1 CheckRW();
71 1 LCD_DATA = param1;
72 1 CheckRW();
73 1 LCD_Command = com;
74 1 }
75
76 void Set_Com_2(uchar param1,uchar param2,uchar com)
77 {
78 1 CheckRW();
79 1 LCD_DATA = param1;
80 1 CheckRW();
81 1 LCD_DATA = param2;
82 1 CheckRW();
83 1 LCD_Command = com;
84 1 }
85
86 /******************** 延時子程序 **************/
87
88 void Delay(uint time)
89 {
90 1 uchar us,usn;
91 1 while(time!=0) //12M Crystal
92 1 {
93 2 usn = 2;
94 2 while(usn!=0)
95 2 {
96 3 us=0xf2;
97 3 while (us!=0){us--;};
98 3 usn--;
99 3 }
100 2 time--;
101 2 }
102 1 }
103
104 /************************* 初使化LCD ****************/
105
106 void Init_LCD(void)
107 {
108 1 Set_Com_2(0x00,0x00,0x40); //設置文本顯示區首地址
109 1 Set_Com_2(LCD_LENGTH/8,0x00,0x41); //設置文本顯示區寬度
110 1 Set_Com_2(0x00,0x08,0x42); //設置圖形顯示區首地址0x0800
111 1 Set_Com_2(LCD_WIDTH/4,0x00,0x43); //設置圖形顯示區寬度
112 1 Set_Com(0xA7); //設置光標形狀 8x8方塊
113 1 Set_Com(0x81); //顯示方式設置 文本xor圖形(異或)
114 1 Set_Com(0x9C); //顯示開關設置 文本開,圖形開,光標閃爍關
115 1 }
116
117 /******************** 清屏操作 *******************************/
C51 COMPILER V7.10 MAIN 08/16/2007 20:42:55 PAGE 3
118
119 void Clear_LCD(uchar FillByte) //使用FillByte清屏
120 {
121 1 uint i = 8192;
122 1 if(FillByte)
123 1 {
124 2 i -= 2*1024;
125 2 Set_Com_2(0x00,0x08,0x24); //填充0xff時候要在圖形區
126 2 }
127 1 else
128 1 Set_Com_2(0x00,0x00,0x24);
129 1 Set_Com(0xB0); //進入自動寫
130 1 while(i--)
131 1 {
132 2 CheckAutoWrite();
133 2 WriteData( FillByte );
134 2 }
135 1 Set_Com(0xB2);
136 1 }
137
138 /*********************** 設定顯示地址 *****************/
139 void LocateXY(uchar x,uchar y,uchar mode) //0為字符模式,1為圖形模式
140 {
141 1 uint temp;
142 1 temp= LCD_LENGTH/8*y + x;
143 1 if(mode) //mode=1為Graphic
144 1 { //如果圖形模式要加上圖形區首地址0x0800
145 2 temp+=0x0800;
146 2 }
147 1 Set_Com_2(temp & 0xff,temp/256,0x24);
148 1 }
149
150 /*********************** 顯示字符和字符串 ***************/
151 void Show_Char(uchar x,uchar y,uchar CharByte)
152 {
153 1 LocateXY(x,y,TXT);
154 1 Set_Com_1(CharByte,0xC4);
155 1 }
156
157 void Show_String(uchar x,uchar y,uchar *str)
158 {
159 1 while(*str != 0)
160 1 {
161 2 if(x> 29) //自動換行
162 2 {
163 3 x=0;
164 3 y++;
165 3 }
166 2 Show_Char(x,y,*str);
167 2 ++x;
168 2 ++str;
169 2 }
170 1 }
171
172 /*********************** 顯示點陣函數 ***************/
173 void DisplayDots(uchar DotByte,uchar n)
174 {
175 1 uchar i,j;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -