📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 09/23/2005 15:07:28 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <c8051f020.h>
2 #include <absacc.h>
3
4 extern void config (void);
5 //////////////////////////////////////////////
6 #define UINT8 unsigned char
7 #define INT8 char
8 #define UINT16 unsigned int
9 #define INT16 int
10 #define FP32 float
11 ////////////////////////////////////
12 #define DAT_ADDR 0xFC00
13 #define COD_ADDR 0xFD00
14 #define LCD_DAT XBYTE[DAT_ADDR] //数据接口
15 #define LCD_CODE XBYTE[COD_ADDR] //指令接口
16 // T6963C 命令定义
17 #define LCD_CUR_POS 0x21 // 光标位置设置
18 #define LCD_CGR_POS 0x22 // CGRAM偏置地址设置
19 #define LCD_ADDR_POS 0x24 // 地址指针位置
20 #define LCD_TXT_STP 0x40 // 文本区首址
21 #define LCD_TXT_WID 0x41 // 文本区宽度
22 #define LCD_GRH_STP 0x42 // 图形区首址
23 #define LCD_GRH_WID 0x43 // 图形区宽度
24 #define LCD_MOD_OR 0x80 // 显示方式:逻辑"或"
25 #define LCD_MOD_XOR 0x81 // 显示方式:逻辑"异或"
26 #define LCD_MOD_AND 0x82 // 显示方式:逻辑"与"
27 #define LCD_MOD_TCH 0x83 // 显示方式:文本特征
28 #define LCD_DIS_SW 0x90 // 显示开关:D0=1/0:光标闪烁启用/禁用;
29 // D1=1/0:光标显示启用/禁用;
30 // D2=1/0:文本显示启用/禁用;
31 // D3=1/0:图形显示启用/禁用;
32 #define LCD_CUR_SHP 0xA0 // 光标形状选择:0xA0-0xA7 表示光标占的行数
33 #define LCD_AUTO_WR 0xB0 // 自动写设置
34 #define LCD_AUTO_RD 0xB1 // 自动读设置
35 #define LCD_AUTO_OVER 0xB2 // 自动读/写结束
36 #define LCD_INC_WR 0xC0 // 数据一次写,地址加1
37 #define LCD_INC_RD 0xC1 // 数据一次读,地址加1
38 #define LCD_DEC_WR 0xC2 // 数据一次写,地址减1
39 #define LCD_DEC_RD 0xC3 // 数据一次读,地址减1
40 #define LCD_NOC_WR 0xC4 // 数据一次写,地址不变
41 #define LCD_NOC_RD 0xC5 // 数据一次读,地址不变
42 #define LCD_SCN_RD 0xE0 // 屏读
43 #define LCD_SCN_CP 0xE8 // 屏拷贝
44 #define LCD_BIT_OP 0xF0 // 位操作:D0-D2:定义D0-D7 位;D3:1 置位;0:清除
45 ////////////////////////////////////////////////////////////////////
46 #define MAX_VERTICAL_DOT 128
47 #define MAX_HORIZON_DOT 150
48 #define MAX_SAMPLE 255
49 ///////////////////////////////////////////////////////////////////
50 UINT8 code DIS_CTRL[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
51 ///////////////////////////////////////////////////////////////////
52 UINT8 code A[16] = {
53 /*a */
54 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00
55
C51 COMPILER V7.01 MAIN 09/23/2005 15:07:28 PAGE 2
56 };
57 extern void config (void);
58 //**********************************************************
59 //********子函数**************
60 //判断状态为STA0(指令读写)和STA1(数据读写)
61 void LcdRWCheck()
62 {
63 1 while((LCD_CODE&0X03)!=0X03)
64 1 {;}
65 1 }
66 //判断自动读状态STA2
67 void LcdAutoRCheck()
68 {
69 1 while((LCD_CODE&0X04)!=0X04)
70 1 {;}
71 1 }
72 //判断自动写状态STA3
73 void LcdAutoWCheck()
74 {
75 1 while((LCD_CODE&0X08)!=0X08)
76 1 {;}
77 1 }
78 //写无参数命令
79 void WrCmdNoP(UINT8 cmd)
80 {
81 1 LcdRWCheck();
82 1 LCD_CODE=cmd;
83 1 }
84 //写一个参数的命令
85 void WrCmdOneP(UINT8 dat,UINT8 cmd)
86 {
87 1 LcdRWCheck();
88 1 LCD_DAT=dat;
89 1 LcdRWCheck();
90 1 LCD_CODE=cmd;
91 1 }
92 //写两个参数的命令
93 void WrCmdTwoP(UINT8 dat1,UINT8 dat2,UINT8 cmd)
94 {
95 1 LcdRWCheck();
96 1 LCD_DAT=dat1;
97 1 LcdRWCheck();
98 1 LCD_DAT=dat2;
99 1 LcdRWCheck();
100 1 LCD_CODE=cmd;
101 1 }
102
103 //自动写
104 void DatAutoWr(UINT8 dat)
105 {
106 1 LcdAutoWCheck();
107 1 LCD_DAT=dat;
108 1 }
109 //数据自动读
110 UINT8 DatAutoRd()
111 {
112 1 UINT8 dat;
113 1 LcdAutoRCheck();
114 1 dat=LCD_DAT;
115 1 return dat;
116 1 }
117 //清屏
C51 COMPILER V7.01 MAIN 09/23/2005 15:07:28 PAGE 3
118 void ClearDisplay()
119 {
120 1 UINT16 i;
121 1 WrCmdTwoP(0,0,LCD_ADDR_POS);
122 1 WrCmdNoP(LCD_AUTO_WR);
123 1 for(i=0;i<30*128;i++)
124 1 {
125 2 DatAutoWr(0x00);
126 2 }
127 1 WrCmdNoP(LCD_AUTO_OVER);
128 1 }
129 //读任意处的值
130 UINT8 ReadAny(UINT8 v_Row, UINT8 v_Col)
131 {
132 1 UINT8 v_Dat;
133 1 UINT16 v_Addr;
134 1 v_Addr=v_Row*30+v_Col;
135 1 WrCmdTwoP(v_Addr&0xff,v_Addr/256,LCD_ADDR_POS);
136 1
137 1 (LCD_NOC_RD);
*** WARNING C275 IN LINE 137 OF MAIN.C: expression with possibly no effect
138 1 v_Dat=LCD_DAT;
139 1 return v_Dat;
140 1 }
141 //在任意处显示任意值
142 void DisplayAny(UINT8 v_Row,UINT8 v_Col,UINT8 v_Dat)
143 {
144 1 UINT16 v_Addr;
145 1 v_Addr=v_Row*30+v_Col;
146 1 WrCmdTwoP(v_Addr&0xff,v_Addr/256,LCD_ADDR_POS);
147 1 WrCmdOneP(v_Dat,LCD_NOC_WR);
148 1 }
149
150 //显示英文字母(8*16)
151 void DisplayChar(UINT8 row,UINT8 col,UINT8 *ch,UINT8 height)
152 {
153 1 UINT8 i;
154 1 UINT16 addr;
155 1 addr=row*30+col;
156 1 WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
157 1 for(i=0;i<height;i++)
158 1 {
159 2 WrCmdOneP(ch[i],LCD_NOC_WR);
160 2 addr+=30;
161 2 WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
162 2 }
163 1 }
164 //显示汉字
165 void DisplayChn(UINT8 row,UINT8 col,UINT8 *chn)
166 {
167 1 UINT8 i;
168 1 UINT16 addr;
169 1 addr=row*30+col;
170 1 WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
171 1 for(i=0;i<16;i++)
172 1 {
173 2 WrCmdOneP(chn[i],LCD_NOC_WR);
174 2 addr+=30;
175 2 WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
176 2 }
177 1 addr=row*30+col+1;
178 1 WrCmdTwoP(addr&0xff,addr/256,LCD_ADDR_POS);
C51 COMPILER V7.01 MAIN 09/23/2005 15:07:28 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -