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