📄 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 + -