?? max.lst
字號:
C51 COMPILER V8.02 MAX 11/30/2008 00:04:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAX
OBJECT MODULE PLACED IN max.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE max.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 /*********************** 定義MAX7219 內(nèi)部寄存器 **********************/
3 #define REG_DECODE 0x09 // 譯碼方式寄存器
4 #define REG_INTENSITY 0x0a // 亮度寄存器
5 #define REG_SCAN_LIMIT 0x0b // 掃描界限寄存器
6 #define REG_SHUTDOWN 0x0c // 停機寄存器
7 #define REG_DISPLAY_TEST 0x0f // 顯示測試寄存器
8
9 #define INTENSITY_MIN 0x00 // 最小顯示亮度
10 #define INTENSITY_MAX 0x0f // 最大顯示亮度
11
12 /*********************** 定義MAX7219 端口信號 ************************/
13 sbit DATA=P1^0;
14 sbit LOAD=P1^1;
15 sbit CLK=P1^2;
16
17 /************************** 定義顯示常數(shù)表格 *************************/
18 static const struct {
19 char ascii;
20 char segs;
21 } Font[] = {
22 {' ', 0x00},{'0', 0x7e},{'1', 0x30},{'2', 0x6d},{'3', 0x79},{'4', 0x33},
23 {'5', 0x5b},{'6', 0x5f},{'7', 0x70},{'8', 0x7f},{'9', 0x7b},{'A', 0x77},
24 {'B', 0x1f},{'C', 0x4e},{'D', 0x3d},{'E', 0x4f},{'F', 0x47},{'H',0x37},
25 {'L',0x0e}, {'O',0x7e},{'\0', 0x00}
26 };
27
28 /************************** 函數(shù)原型說明 *****************************/
29 static void Write (unsigned char reg_number, unsigned char dataout);
30 static void SendByte (unsigned char dataout);
31 static unsigned char LookupCode (char character);
32 void Init (void);
33 void ShutdownStart (void);
34 void ShutdownStop (void);
35 void DisplayTestStart (void);
36 void DisplayTestStop (void);
37 void SetBrightness (char brightness);
38 void Clear (void);
39 void DisplayChar (char digit, char character);
40
41 /************************************************************************
42 * 函數(shù)原型:void Init()
43 * 功 能: 對MAX7219進行初始化,調(diào)用任何其他函數(shù)之前必需先調(diào)用此函數(shù)
44 *************************************************************************/
45 void Init (void) {
46 1 DATA=1;LOAD=1;CLK=1;
47 1 Write(REG_SCAN_LIMIT, 7); // 掃描8位數(shù)字
48 1 Write(REG_DECODE, 0x00); // 設(shè)置不譯碼方式
49 1 ShutdownStop(); // 結(jié)束停機方式,正常工作
50 1 DisplayTestStop(); // 結(jié)束顯示測試,正常工作
51 1 Clear(); // 清零全部顯示器
52 1 SetBrightness(INTENSITY_MAX); // 設(shè)置最大亮度
53 1 }
54
55 /*************************************************************************
C51 COMPILER V8.02 MAX 11/30/2008 00:04:00 PAGE 2
56 * 函數(shù)原型:void ShutdownStart()
57 * 功 能: 進入停機方式
58 **************************************************************************/
59 void ShutdownStart (void) {
60 1 Write(REG_SHUTDOWN, 0);
61 1 }
62
63 /*************************************************************************
64 * 函數(shù)原型:void ShutdownStop()
65 * 功 能:結(jié)束停機方式
66 **************************************************************************/
67 void ShutdownStop (void) {
68 1 Write(REG_SHUTDOWN, 1);
69 1 }
70
71 /*************************************************************************
72 * 函數(shù)原型:void DisplayTestStart()
73 * 功 能:啟動顯示測試
74 **************************************************************************/
75 void DisplayTestStart (void) {
76 1 Write(REG_DISPLAY_TEST, 1);
77 1 }
78
79 /*************************************************************************
80 * 函數(shù)原型:void DisplayTestStop()
81 * 功 能:結(jié)束顯示測試
82 **************************************************************************/
83 void DisplayTestStop (void) {
84 1 Write(REG_DISPLAY_TEST, 0);
85 1 }
86
87 /*************************************************************************
88 * 函數(shù)原型:void SetBrightness(char brightness)
89 * 功 能:設(shè)置LED顯示亮度
90 * 參 數(shù):亮度值(brightness = 0-15)
91 *************************************************************************/
92 void SetBrightness (char brightness) {
93 1 brightness &= 0x0f; // 屏蔽參數(shù)中的多余位
94 1 Write(REG_INTENSITY, brightness); // 設(shè)置亮度
95 1 }
96
97 /*************************************************************************
98 * 函數(shù)原型:void Clear()
99 * 功 能:關(guān)閉全部顯示器
100 **************************************************************************/
101 void Clear (void) {
102 1 char i;
103 1 for (i=1; i <= 8; i++)
104 1 Write(i, 0x00); // 關(guān)閉全部顯示器
105 1 }
106
107 /*************************************************************************
108 * 函數(shù)原型:void DisplayChar(char digit, char character)
109 * 功 能:在指定數(shù)位上顯示字符
110 * 參 數(shù):digit = 數(shù)位(0-7)
111 character = 顯示字符(0-9, A-Z)
112 *************************************************************************/
113 void DisplayChar (char digit, char character) {
114 1 Write(digit, LookupCode(character));
115 1 }
116
117 /*************************************************************************
C51 COMPILER V8.02 MAX 11/30/2008 00:04:00 PAGE 3
118 * 函數(shù)原型:static unsigned char LookupCode(char character)
119 * 功 能:查段碼表將顯示字符轉(zhuǎn)換為顯示段碼
120 * 參 數(shù):character = 顯示字符
121 * 返 回 值:顯示段碼
122 **************************************************************************/
123 static unsigned char LookupCode (char character) {
124 1 char i;
125 1 for (i = 0; Font[i].ascii; i++) // 查表搜尋顯示字符的ASCII碼
126 1 if (character == Font[i].ascii)
127 1 return Font[i].segs; // 找到則返回對應(yīng)的顯示段碼
128 1 return 0; // 未找到則返回0
129 1 }
130
131 /*************************************************************************
132 * 函數(shù)原型:static void Write (unsigned char reg_number, unsigned char dataout)
133 * 功 能:向指定的MAX7219內(nèi)部寄存器寫入數(shù)據(jù)
134 * 參 數(shù): reg_number = MAX7219內(nèi)部寄存器地址
135 dataout = 待寫入的數(shù)據(jù)
136 **************************************************************************/
137 static void Write (unsigned char reg_number, unsigned char dataout) {
138 1 LOAD=1; // 使LOAD變高,啟動串行數(shù)據(jù)發(fā)送
139 1 SendByte(reg_number); // 發(fā)送MAX7219內(nèi)部寄存器地址
140 1 SendByte(dataout); // 發(fā)送待寫入的數(shù)據(jù)
141 1 LOAD=0; // 使LOAD變低,鎖存數(shù)據(jù)
142 1 LOAD=1; // 使LOAD變高,串行數(shù)據(jù)結(jié)束
143 1 }
144
145 /*************************************************************************
146 * 函數(shù)原型:static void SendByte (unsigned char dataout)
147 * 功 能:向MAX7219發(fā)送一個字節(jié)串行數(shù)據(jù)
148 * 參 數(shù):dataout = 待發(fā)送的數(shù)據(jù)
149 **************************************************************************/
150 static void SendByte (unsigned char dataout) {
151 1 char i;
152 1 for (i=8; i>0; i--) {
153 2 unsigned char mask = 1 << (i - 1);
154 2 CLK=0; // 使CLK變低
155 2 if (dataout & mask) // 發(fā)送一位數(shù)據(jù)"1"或"0"
156 2 DATA=1;
157 2 else
158 2 DATA=0;
159 2 CLK=1; // 使CLK變高
160 2 }
161 1 }
162
163 /**************************************************************************
164 * 函數(shù)原型:main()
165 * 功 能:初始化MAX7219,設(shè)置亮度,在指定數(shù)位上顯示字符
166 **************************************************************************/
167 void main(void) {
168 1 Init (); // 初始化MAX7219
169 1 ShutdownStart (); // 停機
170 1 ShutdownStop (); // 結(jié)束停機
171 1 DisplayTestStart (); // 顯示測試
172 1 DisplayTestStop (); // 結(jié)束顯示測試
173 1 SetBrightness (0x0b); // 設(shè)置顯示亮度
174 1 DisplayChar (0x01, '0'); // 第1位LED顯示0
175 1 DisplayChar (0x02, '1'); // 第2位LED顯示1
176 1 DisplayChar (0x03, '2'); // 第3位LED顯示2
177 1 DisplayChar (0x04, '3'); // 第4位LED顯示3
178 1 //Clear (); // 關(guān)閉全部LED顯示器
179 1 DisplayChar (0x05, 'A'); // 第5位LED顯示A
C51 COMPILER V8.02 MAX 11/30/2008 00:04:00 PAGE 4
180 1 DisplayChar (0x06, 'B'); // 第6位LED顯示B
181 1 DisplayChar (0x07, 'C'); // 第7位LED顯示C
182 1 DisplayChar (0x08, 'D'); // 第8位LED顯示D
183 1 DisplayChar (0x08, '\0'); // 第8位LED顯示“暗碼”
184 1 while(1);
185 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 275 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -