📄 lcd_test.lst
字号:
C51 COMPILER V8.12 LCD_TEST 10/07/2008 19:06:36 PAGE 1
C51 COMPILER V8.12, COMPILATION OF MODULE LCD_TEST
OBJECT MODULE PLACED IN LCD_test.OBJ
COMPILER INVOKED BY: D:\kell\C51\BIN\C51.EXE LCD_test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************
2 功能描述: LC75823E芯片测试程序
3 说明:本测试程序能够测试LC75823E的每一个字段,依次点亮每一个字段
4 ********************************************************/
5 #include " REGX51.h "
6 #include " intrins.h "
7 #include <stdio.h>
8 #include <absacc.h>
9
10 sbit LCD_SCL = P3^5; //LC75823E的SCLk引脚
11 sbit LCD_SDA = P3^1; //LC75823E的SDA引脚
12 sbit LCD_CE = P3^3; //LC75823E的sce引脚
13
14 //按键定义
15 sbit keya=P2^1;
16 sbit keyb=P2^0;
17
18 #define uchar unsigned char
19 #define uint unsigned int
20
21 #define LCD_BUFFER_SIZE 20//20*8 = 160
22 #define LC75823E_ADDRESS 0x41
23 #define DR_1_2_BIAS 0
24 #define DR_1_3_BIAS 1
25 #define SC_ON 0
26 #define SC_OFF 1
27 #define BU_NORMAL 0
28 #define BU_POWER_SAVING 1
29
30
31 unsigned char a,b;//a(20)表示LC75823E的内存区中的byte数;
32 //b(10)表示对应的byte中的数据段,设置了10个数,
33 //0表示不显示,9表示全部显示,1~8表示byte对应的段
34
35 unsigned char display_flag;//更改显示标志
36 unsigned char LEDScanPointer;
37 unsigned char displaya,displayb,displayc,displayd;
38 unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9共阳数码管代码
-
39 unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选代码
40 uchar LC75823E_buff[20];//LC75823E的内存数据区,共20个byte
41 /********************************************************
42 函数名称:延时函数
43 功能描述:
44 全局变量:
45 参数说明:
46 返回说明:
47 说明:
48 ********************************************************/
49 void delay_nms(unsigned int n)
50 {
51 1 unsigned int i;
52 1 unsigned char j;
53 1 for(i=0;i<n;i++)
54 1 for(j=0;j<120;j++)
C51 COMPILER V8.12 LCD_TEST 10/07/2008 19:06:36 PAGE 2
55 1 ; //空操作
56 1 }
57 /********************************************************
58 函数名称:LC75823_Write_Buffer()
59 功能描述:向LC75823E一次性发送地址码、显示位、控制码
60 全局变量:
61 参数说明:
62 返回说明:
63 说明:地址码共8bit、显示位与控制码一共20byte
64 ********************************************************/
65 void LC75823_Write_Buffer() reentrant
66 {
67 1 uint temp;
68 1 uchar i,j,ccb_address = LC75823E_ADDRESS;
69 1
70 1 //发送地址码0x41//
71 1 LCD_CE = 0;
72 1 for (i=0;i<8;i++)
73 1 {
74 2 LCD_SCL=0;
75 2 if(ccb_address&0x01)
76 2 LCD_SDA = 1;
77 2 else
78 2 LCD_SDA = 0;
79 2 ccb_address>>=1;
80 2 LCD_SCL=1;
81 2 }
82 1
83 1 LCD_CE = 1;
84 1
85 1 //发送显示位与控制位//
86 1 for (j=0;j<LCD_BUFFER_SIZE;j++)
87 1 {
88 2 temp = LC75823E_buff[j];
89 2 if (j == LCD_BUFFER_SIZE-1)
90 2 {
91 3 temp|=0x80;//最后最后一个byte的高4位为控制位:DR,SC,BU,*
92 3 } //0001:DR(0)1/2偏压;SC(0)segment on;BU(0)Normal mode;* 1
93 2 for(i=0;i<8;i++)
94 2 {
95 3 LCD_SCL=0;
96 3 if(temp&0x01)
97 3 LCD_SDA = 1;
98 3 else
99 3 LCD_SDA = 0;
100 3 temp>>=1;
101 3 LCD_SCL=1;
102 3 }
103 2 }
104 1 LCD_CE=0;
105 1 LCD_SDA=1;
106 1 LCD_SCL=1;
107 1 }
108 /********************************************************
109 函数名称:LCD_init()
110 功能描述: LC75823E初始化
111 全局变量:
112 参数说明:
113 返回说明:
114 说明:
115 ********************************************************/
116 void LCD_init()
C51 COMPILER V8.12 LCD_TEST 10/07/2008 19:06:36 PAGE 3
117 {
118 1 delay_nms(100);
119 1 LCD_CE = 1;
120 1 delay_nms(20);
121 1 LCD_CE=0;
122 1 delay_nms(10);
123 1 LCD_SCL=0;
124 1 LCD_SDA=0;
125 1 }
126 /********************************************************
127 函数名称:main()
128 功能描述: LC75823E测试主函数
129 全局变量:
130 参数说明:
131 返回说明:
132 说明:可以测试出LC75823E显示屏的156个点的位置
133 ********************************************************/
134 void main()
135 {
136 1 TMOD=0x01;
137 1 TH0=(65536-5000)/256;
138 1 TL0=(65536-5000)%256;
139 1 TR0=1;
140 1 ET0=1;
141 1 EA=1;
142 1
143 1 a=0;
144 1 b=0;
145 1 display_flag=0;
146 1 LCD_init();
147 1
148 1 LC75823_Write_Buffer();
149 1 while(1)
150 1 { if(keya==0)
151 2 {
152 3 delay_nms(200);
153 3 if(keya==0)
154 3 {
155 4 a++;
156 4 if(a==20) { a=0; }//按键A用于记数内存区 byte个数
157 4 display_flag=1;
158 4 while(keya==0);
159 4 }
160 3 }
161 2 if(keyb==0)
162 2 {
163 3 delay_nms(200);
164 3 if(keyb==0)
165 3 {
166 4 b++;
167 4 if(b==10) { b=0; } //按键B用于记数每个byte中对应的显示位,
168 4 //设置10个数,0表示不显示;9表示全部显示
169 4 //1~8表示对应的8个显示位
170 4 display_flag=1;
171 4 while(keyb==0);
172 4 }
173 3 }
174 2 //LED显示当前按键的按下次数//
175 2 displaya=a/10;
176 2 displayb=a%10;
177 2 displayc=b/10;
178 2 displayd=b%10;
C51 COMPILER V8.12 LCD_TEST 10/07/2008 19:06:36 PAGE 4
179 2 }
180 1 }
181 /********************************************************
182 函数名称:
183 功能描述:
184 全局变量:
185 参数说明:
186 返回说明:
187 说明:
188 ********************************************************/
189 void timer0(void) interrupt 1
190 {
191 1 TH0=(65536-5000)/256;
192 1 TL0=(65536-5000)%256;
193 1 switch(LEDScanPointer)
194 1 {
195 2 case 0:
196 2 P0=LEDCode[displaya];
197 2 P1=bitcode[3];
198 2 break;
199 2 case 1:
200 2 P0=LEDCode[displayb];
201 2 P1=bitcode[2];
202 2 break;
203 2 case 2:
204 2 P0=LEDCode[displayc];
205 2 P1=bitcode[1];
206 2 break;
207 2 case 3:
208 2 P0=LEDCode[displayd];
209 2 P1=bitcode[0];
210 2 break;
211 2 }
212 1
213 1 LEDScanPointer++;
214 1 if(LEDScanPointer==4) LEDScanPointer=0;
215 1 if(display_flag==1)
216 1 {
217 2 unsigned char dataT;
218 2 uint temp;
219 2 temp = a;
220 2 switch(b)
221 2 {
222 3 //不显示数据标志//
223 3 case 0 : dataT=0x00; break;
224 3
225 3 //显示低4bit对应的数据段//
226 3 case 1 : dataT=0x01; break;
227 3 case 2 : dataT=0x02; break;
228 3 case 3 : dataT=0x04; break;
229 3 case 4 : dataT=0x08; break;
230 3
231 3 //显示高4bit对应的数据段//
232 3 case 5 : dataT=0x10; break;
233 3 case 6 : dataT=0x20; break;
234 3 case 7 : dataT=0x40; break;
235 3 case 8 : dataT=0x80; break;
236 3
237 3 //全部显示//
238 3 case 9 : dataT=0xff; break;
239 3 }
240 2
C51 COMPILER V8.12 LCD_TEST 10/07/2008 19:06:36 PAGE 5
241 2 LC75823E_buff[temp]|=dataT;//向LC75823E内存区送数
242 2 LC75823_Write_Buffer();//向LC75823E写数据
243 2 display_flag=0;
244 2 }
245 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 604 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 28 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -