📄 zlg7289.lst
字号:
C51 COMPILER V7.50 ZLG7289 07/24/2007 21:41:17 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7289
OBJECT MODULE PLACED IN zlg7289.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE zlg7289.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 ZLG7289.c
3 数码管显示与键盘管理芯片ZLG7289的标准80C51驱动程序(C51)
4 Copyright (c) 2005,广州周立功单片机发展有限公司
5 All rights reserved.
6 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的
7 */
8 #include "ZLG7289.h"
9
10
11 //定义一个全局变量,用于延时
12 //该变量在调用函数ZLG7289_Init()时被初始化
13 unsigned char ZLG7289_Delay_t;
14
15 /*
16 宏定义:ZLG7289_ShortDelay()
17 功能:短延时
18 说明:延时(ZLG7289_Delay_t*2+2)个机器周期
19 */
20 #define ZLG7289_ShortDelay()\
21 {\
22 unsigned char t = ZLG7289_Delay_t;\
23 while (--t != 0);\
24 }
25
26 /*
27 宏定义:ZLG7289_LongDelay()
28 功能:长延时
29 说明:延时(ZLG7289_Delay_t*12+8)个机器周期
30 */
31 #define ZLG7289_LongDelay() \
32 {\
33 unsigned char t = ZLG7289_Delay_t * 6;\
34 while ( --t != 0 );\
35 }
36
37
38 /*
39 函数:ZLG7289_SPI_Write()
40 功能:向SPI总线写入1个字节的数据
41 参数:
42 dat:要写入的数据
43 */
44 void ZLG7289_SPI_Write(char dat) reentrant
45 {
46 1 unsigned char t = 8;
47 1 do
48 1 {
49 2 ZLG7289_pinDIO = (bit)(dat & 0x80);
50 2 dat <<= 1;
51 2 ZLG7289_pinCLK = 1;
52 2 ZLG7289_ShortDelay();
53 2 ZLG7289_pinCLK = 0;
54 2 ZLG7289_ShortDelay();
55 2 } while ( --t != 0 );
C51 COMPILER V7.50 ZLG7289 07/24/2007 21:41:17 PAGE 2
56 1 }
57
58
59 /*
60 函数:ZLG7289_SPI_Read()
61 功能:从SPI总线读 1个字节的数据
62 返回:
63 读
64 */
65 char ZLG7289_SPI_Read() reentrant
66 {
67 1 char dat;
68 1 unsigned char t = 8;
69 1 ZLG7289_pinDIO = 1; //读 DIO引脚要置1以切换到输入状态
70 1 do
71 1 {
72 2 ZLG7289_pinCLK = 1;
73 2 ZLG7289_ShortDelay();
74 2 dat <<= 1;
75 2 if ( ZLG7289_pinDIO ) dat++;
76 2 ZLG7289_pinCLK = 0;
77 2 ZLG7289_ShortDelay();
78 2 } while ( --t != 0 );
79 1 return dat;
80 1 }
81
82 /*
83 函数:ZLG7289_cmd()
84 功能:执行ZLG7289纯指令
85 参数:
86 cmd:命令字
87 */
88 void ZLG7289_cmd(char cmd)
89 {
90 1 char sav = IE;
91 1 IE &= 0xFA; //关闭外部中断
92 1 ZLG7289_pinCS = 0;
93 1 ZLG7289_LongDelay();
94 1 ZLG7289_SPI_Write(cmd);
95 1 ZLG7289_pinCS = 1;
96 1 ZLG7289_LongDelay();
97 1 IE = sav; //恢复IE
98 1 }
99
100 /*
101 函数:ZLG7289_cmd_dat()
102 功能:执行ZLG7289带数据指令
103 参数:
104 cmd:命令字
105 dat:数据
106 */
107 void ZLG7289_cmd_dat(char cmd, char dat)
108 {
109 1 char sav = IE;
110 1 IE &= 0xFA; //关闭外部中断
111 1 ZLG7289_pinCS = 0;
112 1 ZLG7289_LongDelay();
113 1 ZLG7289_SPI_Write(cmd);
114 1 ZLG7289_LongDelay();
115 1 ZLG7289_SPI_Write(dat);
116 1 ZLG7289_pinCS = 1;
117 1 ZLG7289_LongDelay();
C51 COMPILER V7.50 ZLG7289 07/24/2007 21:41:17 PAGE 3
118 1 IE = sav; //恢复IE
119 1 }
120
121 /*
122 函数:ZLG7289_Download()
123 功能:下载数据
124 参数:
125 mod=0:下载数据且按方式0译码
126 mod=1:下载数据且按方式1译码
127 mod=2:下载数据但不译码
128 x:数码管编号(横坐标),取值0 7
129 dp=0:小数点不亮
130 dp=1:小数点亮
131 dat:要显示的数据
132 说明:
133 译码方式的具体含义请参考数据手册
134 */
135 void ZLG7289_Download(unsigned char mod, char x, bit dp, char dat)
136 {
137 1 code char ModDat[3] = {0x80,0xC8,0x90};
138 1 char d1;
139 1 char d2;
140 1 if ( mod > 2 ) mod = 2;
141 1 d1 = ModDat[mod];
142 1 x &= 0x07;
143 1 d1 |= x;
144 1 d2 = dat & 0x7F;
145 1 if ( dp ) d2 |= 0x80;
146 1 ZLG7289_cmd_dat(d1,d2);
147 1 }
148
149 /*
150 功能:执行ZLG7289键盘命令
151 返回:
152 返回读 0 63
153 如果返回0xFF则表示没有键按下
154 */
155 char ZLG7289_Key() reentrant
156 {
157 1 char key;
158 1 ZLG7289_pinCS = 0;
159 1 ZLG7289_LongDelay();
160 1 ZLG7289_SPI_Write(0x15);
161 1 ZLG7289_LongDelay();
162 1 key = ZLG7289_SPI_Read();
163 1 ZLG7289_pinCS = 1;
164 1 ZLG7289_LongDelay();
165 1 return key;
166 1 }
167
168 /*
169 函数:ZLG7289_Init()
170 功能:ZLG7289初始化
171 参数:
172 t:SPI总线的延时值设置,取值1-40(超出范围可能导致错误)
173 说明:
174 t的取值可以参照以下公式:t >= 5 * f1 / f2,其中f1表示80C51的
175 晶振频率,f2表示ZLG7289的晶振频率
176 */
177 void ZLG7289_Init(unsigned char t)
178 {
179 1 unsigned char x;
C51 COMPILER V7.50 ZLG7289 07/24/2007 21:41:17 PAGE 4
180 1 //I/O口初始化
181 1 ZLG7289_pinCS = 1;
182 1 ZLG7289_pinCLK = 0;
183 1 ZLG7289_pinDIO = 1;
184 1 ZLG7289_pinINT = 1;
185 1 //延时初始化
186 1 ZLG7289_Delay_t = t;
187 1 //点亮所有数码管
188 1 for ( x=0; x<8; x++ )
189 1 {
190 2 ZLG7289_Download(1,x,1,0x08);
191 2 }
192 1 }
193 /*
194 函数:Delay()
195 功能:延时0.01 655.36s
196 参数:
197 t>0时,延时(t*0.01)s
198 t=0时,延时655.36s
199 说明:
200 晶振采用11.0592MHz
201 */
202
203 //*********************************************
204 void Delay(unsigned int t)
205 {
206 1 do
207 1 {
208 2 TH0 = 0xDC;
209 2 TL0 = 0x00;
210 2 TR0 = 1;
211 2 while ( !TF0 );
212 2 TF0 = 0;
213 2 TR0 = 0;
214 2 } while (--t);
215 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 409 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 5
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -