📄 max7219.lst
字号:
C51 COMPILER V7.50 MAX7219 04/24/2007 15:03:10 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAX7219
OBJECT MODULE PLACED IN max7219.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE max7219.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------------------
2 * 程序说明 *
3 * 1、本程序已经通过测试,非常好用; *
4 * 2、在非译码方式下编码和一般书上写的不一样,请注意; *
5 * 3、每次送显示的时候先初始化一次; *
6 * 4、在设计电路或制作试验板时注意添加Vcc到GND之间的电容,*
7 * 一个10vF的电解电容和0.1vF的陶瓷电容。并在DIN、LOAD、*
8 * CLK到GND之间接入30pF的瓷片电容。 *
9 * *
10 * 程序提供人:苏建宇 *
11 * *
12 * *
13 ----------------------------------------------------------*/
14
15 #include <reg52.H>
16 #include <intrins.h>
17 //#include <absacc.h>
18 /*--------------------------------------------------*/
19 sbit dis_DIN=P1^0; /*显示串行数据输入端*/
20 sbit dis_LOAD=P1^1; /*显示数据锁存端*/
21 sbit dis_CLK=P1^2; /*显示时钟输入端*/
22
23 #define NoOp 0x00 /*空操作*/
24 #define Digit0 0x01 /*数码管1*/
25 #define Digit1 0x02 /*数码管2*/
26 #define Digit2 0x03 /*数码管3*/
27 #define Digit3 0x04 /*数码管4*/
28 #define Digit4 0x05 /*数码管5*/
29 #define Digit5 0x06 /*数码管6*/
30 #define Digit6 0x07 /*数码管7*/
31 #define Digit7 0x08 /*数码管8*/
32 #define DecodeMode 0x09 /*译码模式*/
33 #define Intensity 0x0a /*亮度*/
34 #define ScanLimit 0x0b /*扫描界限*/
35 #define ShutDown 0x0c /*掉电模式*/
36 #define DisplayTest 0x0f /*显示测试*/
37
38 #define ShutdownMode 0x00 /*掉电方式工作*/
39 #define NormalOperation 0x01 /*正常操作方式*/
40
41 #define DecodeDigit 0xff /*译码位数设置*/
42
43 #define IntensityGrade 0x0a /*显示亮度级别设置*/
44
45 #define ScanDigit 0x07 /*扫描位数设置*/
46
47 #define TestMode 0x01 /*显示测试方式*/
48 #define TextEnd 0x00 /*显示测试结束,正常工作*/
49
50 unsigned char data DisBuffer[8]={0,0,0,0,0,0,0,0}; /*显示缓存区*/
51
52 unsigned char code dispaly_list[]=
53 {
54 0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b, /*0,1,2,3,4,5,6,7,8,9*/
55 0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff,0x00}; /*A,B,C,D,E,F,P,U,全
C51 COMPILER V7.50 MAX7219 04/24/2007 15:03:10 PAGE 2
56 亮,全灭*/
57
58 /*--------------------------------------------------------
59 10ms延时子程序
60 ---------------------------------------------------------*/
61 void delayX10ms(unsigned char count)
62 {
63 1 unsigned char j,k;
64 1 while(count--!=0)
65 1 {
66 2 for(j=0;j<43;j++)
67 2 for(k=0;k<73;k++)
68 2 ;
69 2 }
70 1 }
71
72 /*-------------------------------------------------
73 向MAX7219写入字节(8位)
74 --------------------------------------------------*/
75 void SendChar (unsigned char ch)
76 {
77 1 unsigned char i,temp;
78 1 _nop_();
79 1 for (i=0;i<8;i++)
80 1 {
81 2 temp=ch&0x80;
82 2 ch=ch<<1;
83 2 if(temp)
84 2 {
85 3 dis_DIN=1;
86 3 dis_CLK=0;
87 3 dis_CLK=1;
88 3 }
89 2 else
90 2 {
91 3 dis_DIN=0;
92 3 dis_CLK=0;
93 3 dis_CLK=1;
94 3 }
95 2 }
96 1 }
97
98 /*-------------------------------------------------
99 向MAX7219写入字(16位)
100 -------------------------------------------------*/
101 void WriteWord (unsigned char addr,unsigned char num)
102 {
103 1 dis_LOAD=0;
104 1 _nop_();
105 1 SendChar (addr);
106 1 _nop_();
107 1 SendChar (num);
108 1 _nop_();
109 1 dis_LOAD=1;
110 1 }
111
112 /*-------------------------------------------------
113 MAX7219初始化
114 -------------------------------------------------*/
115 void InitDis (void)
116 {
117 1 WriteWord (ScanLimit,ScanDigit); /*设置扫描界限*/
C51 COMPILER V7.50 MAX7219 04/24/2007 15:03:10 PAGE 3
118 1 WriteWord (DecodeMode,DecodeDigit); /*设置译码模式*/
119 1 WriteWord (Intensity,IntensityGrade); /*设置亮度*/
120 1 WriteWord (ShutDown,NormalOperation); /*设置电源工作模式*/
121 1 }
122
123 /*-------------------------------------------------
124 系统上电初始化
125 -------------------------------------------------*/
126 void InitMain (void)
127 {
128 1 IE=0x00; /*设置中断允许寄存器*/
129 1 IP=0x00; /*设置中断优先级管理寄存器*/
130 1 TH0=0xd8; /*设定时器初值,10ms*/
131 1 TL0=0xf0;
132 1 TMOD=0x01; /*T1 定时器模式2,波特率发生器,T0 定时器模式1*/
133 1 TCON=0x11; /*设置定时器控制寄存器,INT0设置为边沿触发方式*/
134 1 PSW=0x00;
135 1 }
136
137 /*-------------------------------------------------
138 主函数
139 -------------------------------------------------*/
140 void main(void)
141 {
142 1 InitMain ();
143 1 InitDis ();
144 1 WriteWord (DisplayTest,TestMode);
145 1 delayX10ms(0x64);
146 1 delayX10ms(0x64);
147 1 WriteWord (DisplayTest,TextEnd);
148 1
149 1 while(1)
150 1 {
151 2 unsigned char i;
152 2 for (i=0;i<=9;i++)
153 2 {
154 3 delayX10ms(0x64);
155 3 delayX10ms(0x64);
156 3 InitDis ();
157 3 DisBuffer[0]=i;
158 3 DisBuffer[1]=i;
159 3 DisBuffer[2]=i;
160 3 DisBuffer[3]=i;
161 3 DisBuffer[4]=i;
162 3 DisBuffer[5]=i;
163 3 DisBuffer[6]=i;
164 3 DisBuffer[7]=i;
165 3
166 3 WriteWord (Digit0,DisBuffer[0]);
167 3 WriteWord (Digit1,DisBuffer[1]);
168 3 WriteWord (Digit2,DisBuffer[2]);
169 3 WriteWord (Digit3,DisBuffer[3]);
170 3 WriteWord (Digit4,DisBuffer[4]);
171 3 WriteWord (Digit5,DisBuffer[5]);
172 3 WriteWord (Digit6,DisBuffer[6]);
173 3 WriteWord (Digit7,DisBuffer[7]);
174 3 }
175 2
176 2 }
177 1
178 1 }
C51 COMPILER V7.50 MAX7219 04/24/2007 15:03:10 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 249 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 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 + -