📄 lcdinterface.lst
字号:
C51 COMPILER V8.02 LCDINTERFACE 03/15/2009 20:48:19 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LCDINTERFACE
OBJECT MODULE PLACED IN LCDinterface.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe LCDinterface.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // LCDInterface.c
3 //-----------------------------------------------------------------------------
4 // Copyright 2004 Silicon Laboratories, Inc.
5 //
6 // AUTH: GP
7 // DATE: 9 DEC 04
8 //
9 // This program interfaces a C8051F330 device with an example LCD.
10 //
11 // Target: C8051F33x
12 // Tool Chain : Keil
13 //
14
15 //-----------------------------------------------------------------------------
16 // Includes
17 //-----------------------------------------------------------------------------
18
19 #include <c8051F330.h>
20 #include <stdio.h>
21
22 //-----------------------------------------------------------------------------
23 // 16-bit SFR Definitions for 'F3xx
24 //-----------------------------------------------------------------------------
25
26 extern int printf (const char *, ...);
27 sfr16 TMR2RL = 0xca; // Timer2 reload value
28 sfr16 TMR2 = 0xcc; // Timer2 counter
29
30 sfr16 TMR3RL = 0x92; // Timer3 reload value
31 sfr16 TMR3 = 0x94; // Timer3 counter
32
33 //-----------------------------------------------------------------------------
34 // Structures, Unions, Enumerations, and Type Definitions
35 //-----------------------------------------------------------------------------
36
37 // The translation table provides the mapping between ASCII characters
38 // and the segment pin values
39
40 // The first 32 characters (except 10) just produce a space;
41 // Character 10 (newline) clears the LCD digits
42 // Characters that can't be translated produce a space
43 // The MSB in the byte is meaningless because there are only 7 segments
44
45 // If the bit is low, the corresponding bar in the digit is active
46 // The 'diagram' below shows which bit corresponds to which bar in the LCD digit
47
48 // 0
49 // _
50 // 5 | | 1 the middle inner bar is bit 6
51 // -
52 // 4 | | 2
53 // -
54 // 3
55
C51 COMPILER V8.02 LCDINTERFACE 03/15/2009 20:48:19 PAGE 2
56
57 unsigned char code translation_table[128] = {
58
59 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0 - 7
60 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 8 - 15
61 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 16 - 23
62 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 24 - 31
63
64 0xFF, 0xCF, 0xDD, 0xFF, 0x92, 0x9B, 0xFF, 0xDF, // 32 - 39
65 0xC6, 0xF0, 0xFF, 0xFF, 0xDF, 0xBF, 0xEF, 0xFF, // 40 - 47
66 0x40, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x02, 0xF8, // 48 - 55
67 0x00, 0x10, 0xF9, 0xF9, 0x9E, 0xB7, 0xBC, 0x18, // 56 - 63
68
69 0xFF, 0x08, 0x00, 0xC6, 0x21, 0x06, 0x0E, 0x02, // 64 - 71
70 0x09, 0xF9, 0xE1, 0x07, 0xC7, 0xFF, 0x48, 0x40, // 72 - 79
71 0x0C, 0x18, 0xAF, 0x92, 0xF8, 0x41, 0xE3, 0xFF, // 80 - 87
72 0x09, 0x11, 0xA4, 0x06, 0xFF, 0xF0, 0xDC, 0xF7, // 88 - 95
73
74 0xDF, 0x20, 0x03, 0xA7, 0x21, 0x04, 0x0E, 0x10, // 96 - 103
75 0x0B, 0xFB, 0x61, 0x07, 0xF9, 0xFF, 0xAB, 0x23, // 104 - 111
76 0x0C, 0x18, 0xAF, 0x92, 0x07, 0xE3, 0xE3, 0xFF, // 112 - 119
77 0x09, 0x11, 0xA4, 0xC6, 0xF9, 0xF0, 0xBF, 0xFF, // 120 - 127
78 };
79
80 //-----------------------------------------------------------------------------
81 // Global Constants
82 //-----------------------------------------------------------------------------
83
84 #define SYSCLK 24500000 // SYSCLK frequency in Hz
85 #define TIMER2_RATE 1000 // Timer 2 overflow rate in Hz
86 #define TIMER3_RATE 2000 // Timer 3 overflow rate in Hz
87 #define PULSE_LENGTH 25
88
89 //-----------------------------------------------------------------------------
90 // Port names
91 //-----------------------------------------------------------------------------
92
93 sbit SRCLK = P1^1; // shift register clock
94 sbit RCLK = P1^2; // shift register latch
95 sbit SER = P1^3; // shift register serial in
96
97 sbit COM1 = P1^4; // COM1 pin on LCD
98 sbit COM2 = P1^5; // COM2 pin on LCD
99 sbit COM3 = P1^6; // COM3 pin on LCD
100 sbit COM4 = P1^7; // COM4 pin on LCD
101
102
103 //-----------------------------------------------------------------------------
104 // Global LCD Variables
105 //-----------------------------------------------------------------------------
106
107 unsigned char com_cycle = 1; // start at COM 1
108 unsigned char com_invert = 0; // start with positive cycle
109
110 // Below are the bit maps for each of the bars on the LCD; If the bit is low
111 // then the bar is opaque (ON). If the bit is high, the bar is transparent (OFF).
112
113 // one char per digit on the LCD; initialized to OFF
114 unsigned char bdata LCD_digits[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
115
116 // The naming scheme: D1A means the A segment of digit 1
117
C51 COMPILER V8.02 LCDINTERFACE 03/15/2009 20:48:19 PAGE 3
118 // Digit 1 (D1) is the leftmost digit on the LCD
119 sbit D1A = LCD_digits[0] ^ 0;
120 sbit D1B = LCD_digits[0] ^ 1; // D1 is controlled by S1 and S2
121 sbit D1C = LCD_digits[0] ^ 2;
122 sbit D1D = LCD_digits[0] ^ 3;
123 sbit D1E = LCD_digits[0] ^ 4;
124 sbit D1F = LCD_digits[0] ^ 5;
125 sbit D1G = LCD_digits[0] ^ 6;
126
127 sbit D2A = LCD_digits[1] ^ 0; // D2 is controlled by S3 and S4
128 sbit D2B = LCD_digits[1] ^ 1;
129 sbit D2C = LCD_digits[1] ^ 2;
130 sbit D2D = LCD_digits[1] ^ 3;
131 sbit D2E = LCD_digits[1] ^ 4;
132 sbit D2F = LCD_digits[1] ^ 5;
133 sbit D2G = LCD_digits[1] ^ 6;
134
135 sbit D3A = LCD_digits[2] ^ 0; // D3 is controlled by S5 and S6
136 sbit D3B = LCD_digits[2] ^ 1;
137 sbit D3C = LCD_digits[2] ^ 2;
138 sbit D3D = LCD_digits[2] ^ 3;
139 sbit D3E = LCD_digits[2] ^ 4;
140 sbit D3F = LCD_digits[2] ^ 5;
141 sbit D3G = LCD_digits[2] ^ 6;
142
143 sbit D4A = LCD_digits[3] ^ 0; // D4 is controlled by S7 and S8
144 sbit D4B = LCD_digits[3] ^ 1;
145 sbit D4C = LCD_digits[3] ^ 2;
146 sbit D4D = LCD_digits[3] ^ 3;
147 sbit D4E = LCD_digits[3] ^ 4;
148 sbit D4F = LCD_digits[3] ^ 5;
149 sbit D4G = LCD_digits[3] ^ 6;
150
151 sbit D5A = LCD_digits[4] ^ 0; // D5 is controlled by S9 and S10
152 sbit D5B = LCD_digits[4] ^ 1;
153 sbit D5C = LCD_digits[4] ^ 2;
154 sbit D5D = LCD_digits[4] ^ 3;
155 sbit D5E = LCD_digits[4] ^ 4;
156 sbit D5F = LCD_digits[4] ^ 5;
157 sbit D5G = LCD_digits[4] ^ 6;
158
159 sbit D6A = LCD_digits[5] ^ 0; // D6 is controlled by S11 and S12
160 sbit D6B = LCD_digits[5] ^ 1;
161 sbit D6C = LCD_digits[5] ^ 2;
162 sbit D6D = LCD_digits[5] ^ 3;
163 sbit D6E = LCD_digits[5] ^ 4;
164 sbit D6F = LCD_digits[5] ^ 5;
165 sbit D6G = LCD_digits[5] ^ 6;
166
167 //-----------------------------------------------------------------------------
168 // Function Prototypes
169 //-----------------------------------------------------------------------------
170
171 void SYSCLK_Init (void);
172 void Port_IO_Init();
173 void Timer2_Init (int);
174 void Timer3_Init (int);
175 char putchar(char);
176 void Strobe();
177 void wait_one_ms(unsigned int);
178
179 //-----------------------------------------------------------------------------
C51 COMPILER V8.02 LCDINTERFACE 03/15/2009 20:48:19 PAGE 4
180 // MAIN Routine
181 //-----------------------------------------------------------------------------
182
183 void main(void)
184 {
185 1 PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer enable)
186 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -