📄 12232.lst
字号:
C51 COMPILER V6.14 12232 08/25/2006 08:15:20 PAGE 1
C51 COMPILER V6.14, COMPILATION OF MODULE 12232
OBJECT MODULE PLACED IN C:\DOCUME~1\YXM\桌面\12232\12232.OBJ
COMPILER INVOKED BY: E:\Program files\Keil\C51\BIN\C51.EXE C:\DOCUME~1\YXM\桌面\12232\12232.C DB SB OE
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <absacc.h>
4 #include <stdio.h>
5
6 #define W_CM XBYTE[0x8000]; //;写指令代码地址A,CSA CSB高电平有效!
7 #define R_SM XBYTE[0x8200]; //;读状态字地址A
8 #define W_DM XBYTE[0x8100]; //;写显示数据地A
9 #define R_DM XBYTE[0x8300]; //;读显示数据地址A
10 #define W_CS XBYTE[0x9000]; // ;写指令代码地址B
11 #define R_SS XBYTE[0x9200]; // ;读状态字地址B
12 #define W_DS XBYTE[0x9100]; //;写显示数据地址B
13 #define R_DS XBYTE[0x9300]; //;读显示数据地址B
14
15 #define disp_on 0xaf //显示关闭
16 #define disp_off 0xae //显示打开
17 #define disp_start_line 0xc0 //显示起始地址
18 #define page_addr_set 0xb8 //页地址
19 #define col_addr_set 0x00 //列地址
20 #define status_busy 0x80 //0=ready
21 #define moderwite 0xee //写模式
22 #define dynamic_driver 0xa4 //动态驱动
23 #define adc_select 0xa0 //clockwise
24 #define clk32 0xa9 //刷新时钟设置1/32
25 #define clk16 0xa8 //刷新时钟设置1/16
26 #define reset 0xe2 //软件复位
27 #define uchar unsigned char
28 #define uint unsigned int
29
30
31 //设汉字的数据
32 uchar code num[11][16]=
33 {
34 0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x0f,0x10,0x20,0x20,0x10,0x0f,0x00, //0
35 0x00,0x10,0x10,0xfb,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3f,0x20,0x20,0x00,0x00, //1
36 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, //2
37 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0e,0x00, //3
38 0x00,0x00,0xc0,0x20,0x10,0xf8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3f,0x24,0x00, //4
39 0x00,0xf8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0e,0x00, //5
40 0x00,0xe0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0f,0x11,0x20,0x20,0x11,0x0e,0x00, //6
41 0x00,0x38,0x08,0x08,0xc8,0x38,0x08,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00, //7
42 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1c,0x22,0x21,0x21,0x22,0x1c,0x00, //8
43 0x00,0xe0,0x10,0x08,0x08,0x10,0xe0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0f,0x00, //9
44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, //.
45 };
46
47
48
49 //判断主窗口忙
50 void wait_readym(void)
51 {
52 1 data uchar status;
53 1 status=R_SM;
54 1 _nop_();
55 1 while (status&status_busy);
C51 COMPILER V6.14 12232 08/25/2006 08:15:20 PAGE 2
56 1 }
57
58
59 //判断从窗口忙
60 void wait_readys(void)
61 {
62 1 data uchar status;
63 1 status=R_SS;
64 1 _nop_();
65 1 while (status&status_busy);
66 1 }
67
68
69
70 //发指令instruction到主窗口
71 void send_mi(uchar instruction)
72 {
73 1 wait_readym();//判断忙
74 1 XBYTE[0x8000]=instruction; // 写指令
75 1 }
76
77
78 //发数据到主窗口
79 void send_md(uchar c)
80 {
81 1 wait_readym(); //判断忙
82 1 XBYTE[0x8100]=c; //写数据
83 1 }
84
85
86 //发指令到从窗口
87 void send_si (uchar instruction)
88 {
89 1 wait_readys(); //判断忙
90 1 XBYTE[0x9000]=instruction;//写指令
91 1 }
92
93 //发数据到从窗口
94 void send_sd (uchar c)
95 {
96 1 wait_readys(); //判断忙
97 1 XBYTE[0x9100]=c;
98 1 }
99
100 //12232lcd初始化
101 void lcd_init(void)
102 {
103 1 send_mi(reset); //复位
104 1 send_si(reset);
105 1
106 1 send_mi(disp_off); //关闭显示
107 1 send_si(disp_off);
108 1
109 1 send_mi(dynamic_driver); //动态驱动
110 1 send_si(dynamic_driver);
111 1
112 1 send_mi(adc_select); //clockwise
113 1 send_si(adc_select);
114 1
115 1 send_mi(moderwite); //写模式结束
116 1 send_si(moderwite);
117 1
C51 COMPILER V6.14 12232 08/25/2006 08:15:20 PAGE 3
118 1 send_mi(col_addr_set); //归回零列,设定起始行首
119 1 send_mi(disp_start_line);
120 1 send_si(col_addr_set);
121 1 send_si(disp_start_line);
122 1
123 1 send_mi(disp_on); //开显示
124 1 send_si(disp_on);
125 1 }
126
127
128 //清屏函数
129 void lcd_clr(void)
130 {
131 1 uchar i,page;
132 1 for (page=0;page<4;page++)
133 1 {
134 2 send_mi(page_addr_set|page);
135 2 send_si(page_addr_set|page);
136 2 send_mi(0X00);
137 2 send_si(0X00);
138 2 for (i=0;i<62;i++)
139 2 {
140 3 send_md(0x00);
141 3 send_sd(0x00);
142 3 }
143 2 }
144 1 }
145
146
147 //同时设置主(右)从(左)显示页为0-3页
148 void set_page(uchar page)
149 {
150 1 send_mi(page_addr_set|page);
151 1 send_si(page_addr_set|page);
152 1 }
153
154 //同时设置主(右)从(左)显示列为0-61列
155 void set_address(uchar address)
156 {
157 1 send_mi(address&0x7f);
158 1 send_si(address&0x7f);
159 1 }
160
161
162 void putchar_l(uchar c)
163 {
164 1 send_md(c);
165 1 }
166
167
168 void putchar_r(uchar c)
169 {
170 1 send_sd(c);
171 1 }
172
173
174 //画图函数, col横坐标,layer,表示上下层,width是图形的可宽度,高固定为16 bmp图形指针
175 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
176 {
177 1 uchar x;
178 1 uchar address;
179 1 uchar p=0;
C51 COMPILER V6.14 12232 08/25/2006 08:15:20 PAGE 4
180 1 uchar page=0;
181 1 uchar window=0;
182 1 uchar wid=width;
183 1 if(layer) page=2;
184 1 for(x=col;x<col+width;x++)
185 1 {
186 2
187 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -