📄 max7219.lst
字号:
C51 COMPILER V8.08 MAX7219 04/02/2008 11:20:16 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAX7219
OBJECT MODULE PLACED IN max7219.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE max7219.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2
3 #define DECODE_REG 0x09 //译码方式寄存器
4 #define INTENSITY_REG 0x0a //亮度寄存器
5 #define SCANLIMIT_REG 0x0b //扫描界限寄存器
6 #define SHUTDOWN_REG 0x0c //停机寄存器
7 #define DISPLAYTEST_REG 0x0f //显示测试寄存器
8
9 #define MIN 0x00 //最小显示亮度
10 #define MAX 0x0f //最大显示亮度
11
12 sbit DATA=P2^0; //DATA接口
13 sbit CLK=P2^1; //CLK接口
14 sbit LOAD=P2^2; //LOAD接口
15
16 static const struct
17 {
18 char ascii;
19 char segs;
20 } Font[] = //定义并初始化显示数字和字符的段码数组
21 {
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 ///////////////////////////////////////////////
29
30 static void SendByte (unsigned char dataout)
31 {
32 1 char i;
33 1 for (i=8; i>0; i--) //循环发送
34 1 {
35 2 unsigned char mask = 1 << (i - 1);
36 2 CLK=0; //CLK变低电平
37 2 if (dataout & mask) //发送一位数据
38 2 DATA=1;
39 2 else
40 2 DATA=0;
41 2 CLK=1; //CLK变高电平
42 2 }
43 1 }
44
45 static void WriteMAX7219 (unsigned char reg_number, unsigned char dataout)
46 {
47 1 LOAD=1; //置LOAD为高电平,用于启动串行数据发送
48 1 SendByte(reg_number); //发送内部寄存器地址
49 1 SendByte(dataout); //发送数据
50 1 LOAD=0; //置LOAD为低电平,锁存数据
51 1 LOAD=1; //置LOAD为高电平,结束串行数据
52 1 }
53
54 void OpenShutdown (void)
55 {
C51 COMPILER V8.08 MAX7219 04/02/2008 11:20:16 PAGE 2
56 1 WriteMAX7219(SHUTDOWN_REG, 0); //写停机寄存器
57 1 }
58
59 void StopShutdown (void)
60 {
61 1 WriteMAX7219(SHUTDOWN_REG, 1); //写停机寄存器
62 1 }
63
64 void OpenLEDTest (void)
65 {
66 1 WriteMAX7219(DISPLAYTEST_REG, 1); //写显示测试寄存器
67 1 }
68
69 void StopLEDTest (void)
70 {
71 1 WriteMAX7219(DISPLAYTEST_REG, 0); //写显示测试寄存器
72 1 }
73
74 void SetLevel (char ch)
75 {
76 1 ch &= 0x0f; //屏蔽参数中的多余位
77 1 WriteMAX7219(INTENSITY_REG, ch); //写亮度寄存器
78 1 }
79
80 void ClearLED (void)
81 {
82 1 char i;
83 1 for (i=1; i <= 8; i++) //循环
84 1 WriteMAX7219(i, 0x00); //写数字寄存器,关闭全部数码管
85 1 }
86
87 static unsigned char FindCode (char character)
88 {
89 1 char i;
90 1 for (i = 0; Font[i].ascii; i++) //循环查表
91 1 if (character == Font[i].ascii)
92 1 return Font[i].segs; //返回对应的显示段码
93 1 return 0; //未找到,返回0
94 1 }
95
96 void LEDDisplay (char digit, char character)
97 {
98 1 WriteMAX7219(digit, FindCode(character)); //写数字寄存器
99 1 }
100
101 void main(void)
102 {
103 1 //初始化MAX7219
104 1 DATA=1;LOAD=1;CLK=1;
105 1 WriteMAX7219(SCANLIMIT_REG, 7); //扫描8位数字
106 1 WriteMAX7219(DECODE_REG, 0x00); //设置不译码方式
107 1 StopShutdown(); //结束停机方式,正常工作
108 1 StopLEDTest(); //结束显示测试,正常工作
109 1 ClearLED(); //清零全部显示器
110 1 SetLevel(MAX/2); //设置一半的亮度
111 1
112 1 OpenLEDTest (); //显示测试
113 1 StopLEDTest (); //结束显示测试
114 1
115 1 LEDDisplay (0x01, '0'); //第1位LED显示0
116 1 LEDDisplay (0x02, '1'); //第2位LED显示1
117 1 LEDDisplay (0x03, '2'); //第3位LED显示2
C51 COMPILER V8.08 MAX7219 04/02/2008 11:20:16 PAGE 3
118 1 LEDDisplay (0x04, '3'); //第4位LED显示3
119 1 LEDDisplay (0x05, '4'); //第5位LED显示4
120 1 LEDDisplay (0x06, '5'); //第6位LED显示5
121 1 LEDDisplay (0x07, '6'); //第7位LED显示6
122 1 LEDDisplay (0x08, '7'); //第8位LED显示7
123 1
124 1 ClearLED (); //关闭全部LED显示器
125 1
126 1 LEDDisplay (0x01, 'A'); //第1位LED显示A
127 1 LEDDisplay (0x02, 'B'); //第2位LED显示B
128 1 LEDDisplay (0x03, 'C'); //第3位LED显示C
129 1 LEDDisplay (0x04, 'D'); //第4位LED显示D
130 1 LEDDisplay (0x05, 'E'); //第5位LED显示E
131 1 LEDDisplay (0x06, 'F'); //第6位LED显示F
132 1 LEDDisplay (0x07, 'H'); //第7位LED显示H
133 1 LEDDisplay (0x08, 'L'); //第8位LED显示L
134 1
135 1 OpenShutdown (); //停机
136 1 StopShutdown (); //结束停机
137 1
138 1 while(1) //主循环
139 1 {
140 2 }
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 311 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 1
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 + -