📄 7219.lst
字号:
C51 COMPILER V7.08 7219 02/27/2006 16:50:27 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 7219
OBJECT MODULE PLACED IN .\output\7219.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 7219.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\output\7219.obj)
line level source
1 /**************************************************************************
2 7219.H
3
4 7219接口函数
5 ***************************************************************************/
6 #define _7219_
7 #include "general.h"
8
9 //led显示码表,位置码表
10 //static uchar code code_led_09[10]= {0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};
11 // 0 1 2 3 4 5 6 7 8 9
12 #define TABLELEN 30
13 static struct {uchar asc; uchar cod;}code code_led[TABLELEN] =
14 {
15 {0x00,0x7e}, {0x01,0x30}, {0x02,0x6d}, {0x03,0x79}, {0x04,0x33},
16 {0x05,0x5b}, {0x06,0x5f}, {0x07,0x70}, {0x08,0x7f}, {0x09,0x7b},
17 {'A',0x77}, {'S',0x5b}, {'C',0x4e}, {'o',0x1d}, {'E',0x4f},
18 {'F',0x47}, {'G',0x5e}, {'O',0x7e}, {'P',0x67}, {'U',0x3e},
19 {'r',0x05}, {'T',0x46}, {'.',0x80}, {'-',0x01}, {'=',0x09},
20 {'^',0x63}, {'/',0x02}, {'"',0x22}, {' ',0x00}, {0xff,0xff}//度、分、秒、空格、无键
21 };
22
23 static uchar code code_led_bit[10]={0x01,0x02,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
24 //左高右低
25 //显示缓冲区
26 static uchar data buf_disp[10];
27
28 //定义MAX7219寄存器
29 #define nop 0x00
30 #define digit0 0x01
31 #define digit1 0x02
32 #define digit2 0x03
33 #define digit3 0x04
34 #define digit4 0x05
35 #define digit5 0x06
36 #define digit6 0x07
37 #define digit7 0x08
38 #define decodemode 0x09
39 #define intensity 0x0a
40 #define scanlimit 0x0b
41 #define shutdown 0x0c
42 #define displaytest 0x0f
43
44 //定义硬件引脚
45 sbit clk=P1^2;
46 sbit load=P1^1;
47 sbit din=P1^0;
48
49 /*---------------------------------------
50 向一个MAX7219写8bit
51 ---------------------------------------
52 void sendbyte(uchar d)//
53 {
54 char i;
55 for(i=8;i>=1;i--)
C51 COMPILER V7.08 7219 02/27/2006 16:50:27 PAGE 2
56 {
57 din=d&0x80;
58 d=d<<1;
59 clk=1;
60 _nop_();
61 _nop_();
62 _nop_();
63 _nop_();
64 clk=0;
65 }
66
67 }*/
68 /******************************************************
69 操作两片7219,送32字节子函数
70 *******************************************************/
71 void send32(uchar add1,uchar dat1,uchar add2,uchar dat2)
72 {
73 1 uchar tmp8,i,j;
74 1 load=0;
75 1 i=0;
76 1 while(i<32)
77 1 {
78 2 if(i<8) {tmp8=add1;}
79 2 else if(i<16){tmp8=dat1;}
80 2 else if(i<24){tmp8=add2;}
81 2 else {tmp8=dat2;}
82 2 for(j=8;j>=1;j--)
83 2 {
84 3 din=tmp8&0x80;
85 3 tmp8=tmp8<<1;
86 3 clk=1;
87 3 _nop_();
88 3 _nop_();
89 3 _nop_();
90 3 _nop_();
91 3 clk=0;
92 3 }
93 2 i=i+8;
94 2 }
95 1 load=1;
96 1 }
97
98
99
100 /*---------------------------------------
101 全部熄灭
102 ---------------------------------------*/
103
104 void cls(void)
105 {
106 1 unsigned int i;
107 1 for(i=0x01;i<=0x08;i+=0x01)
108 1 send32(i,0x00,i,0x00);
109 1
110 1 }
111 /******************************************
112 关闭显示
113 ******************************************
114 void dispoff()
115 {
116 cls();
117 load=1;
C51 COMPILER V7.08 7219 02/27/2006 16:50:27 PAGE 3
118 }
119 /****************************************
120 缓冲区操作,从pos开始填充n个c
121 *****************************************
122 void set_buf_disp(uchar c,uchar pos, uchar n)
123 {
124 uchar buf_pos;
125 dispoff();
126 for(buf_pos=pos-1; n>0; n--)
127 {
128 buf_disp[buf_pos]=c;
129 buf_pos++;
130 //if(buf_pos>=10) buf_pos=0;
131 }
132 }
133 /*----------------------------------------
134 初始化MAX7219,并清屏
135 -----------------------------------------*/
136
137 void init_max7219(void)
138 {
139 1 /* send16(decodemode,0x00); //设置无解码方式
140 1 send16(intensity,0x0f); //设置亮度为max
141 1 send16(scanlimit,0x07); //8段全扫描
142 1 send16(shutdown,0x01); //设置为正常模式
143 1 send16(displaytest,0x01); //进行LED测试,全部点亮
144 1 delay(100);
145 1 send16(displaytest,0x00); //测试完毕
146 1 cls();
147 1 */
148 1 cls();
149 1 send32(decodemode,0x00,decodemode,0x00); //设置解码方式:00-无,ff-BCD
150 1 send32(intensity,0x04,intensity,0x0f); //设置亮度为max(注意调节两片亮度一致)
151 1 send32(scanlimit,0x01,scanlimit,0x07); //高2位,低8位
152 1 send32(shutdown,0x01,shutdown,0x01); //设置为正常模式
153 1 send32(displaytest,0x01,displaytest,0x01); //进行LED测试,全部点亮
154 1 delay(500);
155 1 send32(displaytest,0x00,displaytest,0x00); //测试完毕
156 1 cls();
157 1
158 1
159 1 }
160 /******************************************
161 查LED码表
162 ******************************************/
163 uchar get_seg(uchar c)
164 {
165 1 uchar i=0;
166 1 while(code_led[i].asc != c)
167 1 i++;
168 1 return(code_led[i].cod);
169 1 //if(i>=TABLELEN)return(0x00);
170 1 }
171 /*****************************************
172 将显存写寄存器显示
173 ****************************************
174 void dispon()
175 {
176 //uchar dmask=0x01; // 显示位控制码
177 uchar pos,dat;
178 for(pos=0; pos<10; pos++)
179 {
C51 COMPILER V7.08 7219 02/27/2006 16:50:27 PAGE 4
180 dat=get_seg(buf_disp[pos]); // 输出字型
181 if(pos<2){send32((pos+1),dat,nop,nop);}
182 else{send32(nop,nop,(pos-1),dat);}
183
184
185 //delay(1); // 延时1ms
186 //dmask=_crol_(dmask,1); // 修改位控制码
187 }
188 }
189
190 /*********************************************
191 在第pos位寄存器写char
192 **********************************************/
193 void disp(uchar c,uchar pos)
194 {
195 1 uchar dat;
196 1 dat=get_seg(c);
197 1 if(pos<3) {send32(pos,dat,nop,nop);}
198 1 else {send32(nop,nop,(pos-2),dat);}
199 1
200 1 }
201 /*******************************************
202 在第pos位寄存器写char,加小数点,
203 ********************************************/
204 void disp_dp(uchar c,uchar pos)
205 {
206 1 uchar dat;
207 1 dat=get_seg(c)+0x80;
208 1 if(pos<3) {send32(pos,dat,nop,nop);}
209 1 else {send32(nop,nop,(pos-2),dat);}
210 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 284 ----
CONSTANT SIZE = 70 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 6
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 + -