📄 zlg7290yanshi.lst
字号:
C51 COMPILER V7.50 ZLG7290YANSHI 11/26/2008 19:53:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7290YANSHI
OBJECT MODULE PLACED IN ZLG7290yanshi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ZLG7290yanshi.C BROWSE ORDER INTVECTOR(0X8000) DEFINE(Monitor,c51) DEBUG OB
-JECTEXTEND
line level source
1 #include<reg52.h>
2 /*
3 ZLG7290 演示程序
4 */
5 #include "I2C.h"
6 #include "ZLG7290.h"
7 //定义键盘中断标志,FlagINT=1 表示有键按下
8 volatile bit FlagINT = 0;
9 sbit rst=P1^0;
10 /*
11 函数:INT0_SVC()
12 功能:ZLG7290 键盘中断服务程序
13 说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
14 */
15 void INT0_SVC() interrupt 0
16 {
17 1 FlagINT = 1;
18 1 }
19 /*
20 函数:Delay()
21 功能:延时10ms~655.36s
22 参数:
23 t>0 时,延时(t*0.01)s
24 t=0 时,延时655.36s
25 说明:
26 晶振采用11.0592MHz
27 */
28 void Delay(unsigned int t)
29 {
30 1 do
31 1 {
32 2 TH0 = 0xDC;
33 2 TL0 = 0x00;
34 2 TR0 = 1;
35 2 while ( !TF0 );
36 2 TF0 = 0;
37 2 TR0 = 0;
38 2 } while (--t);
39 1 }
40 /*
41 函数:SystemInit()
42 功能:系统初始化
43 */
44 void SystemInit()
45 {
46 1 I2C_Init();
47 1 TMOD = 0x01;
48 1 Delay(30); //等待ZLG7290 复位完毕
49 1 }
50 /*
51 函数:ClearAll()
52 功能:清除所有显示
53 */
54
C51 COMPILER V7.50 ZLG7290YANSHI 11/26/2008 19:53:14 PAGE 2
55 void ClearAll()
56 {
57 1 unsigned char x;
58 1 for ( x=0; x<8; x++ )
59 1 {
60 2 ZLG7290_Download(x,0,0,31);
61 2 }
62 1 }
63 /*
64 函数:Test_DispBuf()
65 功能:测试直接写显存
66 */
67
68 void Test_DispBuf()
69 {
70 1 code char DispDat[16] =
71 1 {//字母AbCdEFgHiJkLoPqr 的字形数据
72 1 0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x6E,
73 1 0x20,0x70,0x0E,0x1C,0x3A,0xCE,0xE6,0x0A
74 1 };
75 1 unsigned char n;
76 1 unsigned char x;
77 1 unsigned char reg;
78 1 unsigned char dat;
79 1 for ( n=0; n<16; n++ )
80 1 {
81 2 for ( x=0; x<8; x++ )
82 2 {
83 3 reg = ZLG7290_DpRam + x;
84 3 dat = DispDat[n];
85 3 ZLG7290_WriteReg(reg,dat);
86 3 }
87 2 Delay(50);
88 2 }
89 1 }
90 /*
91 函数:Test_Download()
92 功能:测试下载数据功能
93 */
94
95 void Test_Download()
96 {
97 1 unsigned char x;
98 1 bit dp;
99 1 bit flash;
100 1 char dat;
101 1 //点亮所有数码管
102 1 dp = 1;
103 1 flash = 0;
104 1 dat = 8;
105 1 for ( x=0; x<8; x++ )
106 1 {
107 2 ZLG7290_Download(x,dp,flash,dat);
108 2 }
109 1 Delay(100);
110 1 //依次显示所有字型
111 1 dp = 0;
112 1 flash = 0;
113 1 for ( dat=0; dat<32; dat++ )
114 1 {
115 2 for ( x=0; x<8; x++ )
116 2 {
C51 COMPILER V7.50 ZLG7290YANSHI 11/26/2008 19:53:14 PAGE 3
117 3 ZLG7290_Download(x,dp,flash,dat);
118 3
119 3 }
120 2 Delay(50);
121 2 }
122 1 }
123 /*
124 函数:Test_ScanNum()
125 功能:测试不同扫描位数
126 说明:扫描位数越少,数码管就越亮
127 */
128
129 void Test_ScanNum()
130 {
131 1 unsigned char x;
132 1 for ( x=0; x<8; x++ )
133 1 {
134 2 ZLG7290_Download(x,1,0,8);
135 2 }
136 1 Delay(100);
137 1 for ( x=0; x<8; x++ )
138 1 {
139 2 ZLG7290_WriteReg(ZLG7290_ScanNum,x);
140 2 Delay(100);
141 2 }
142 1 }
143 /*
144 函数:Test_Flash()
145 功能:测试闪烁功能
146 */
147
148 void Test_Flash()
149 {
150 1 char dat = 0x01;
151 1 unsigned char x;
152 1 //显示01234567
153 1 for ( x=0; x<8; x++ )
154 1 {
155 2 ZLG7290_Download(x,0,0,x);
156 2 }
157 1 //设置闪烁控制寄存器
158 1 ZLG7290_WriteReg(ZLG7290_FlashOnOff,0x11);
159 1 //闪烁演示
160 1 for ( x=0; x<8; x++ )
161 1 {
162 2 ZLG7290_Flash(dat);
163 2
164 2 dat <<= 1;
165 2 Delay(300);
166 2 }
167 1 //数码管的8 个位一起闪烁
168 1 ZLG7290_Flash(0xFF);
169 1 Delay(350);
170 1 //停止闪烁
171 1 ZLG7290_Flash(0x00);
172 1 Delay(50);
173 1 }
174 /*
175 函数:Test_SegOnOff()
176 功能:测试段寻址功能
177 */
178
C51 COMPILER V7.50 ZLG7290YANSHI 11/26/2008 19:53:14 PAGE 4
179 void Test_SegOnOff()
180 {
181 1 unsigned char seg;
182 1 ClearAll();
183 1 Delay(100);
184 1 for ( seg=0; seg<64; seg++ )
185 1 {
186 2 ZLG7290_SegOnOff(seg,1);
187 2 Delay(30);
188 2 }
189 1 Delay(100);
190 1 for ( seg=0; seg<64; seg++ )
191 1 {
192 2 ZLG7290_SegOnOff(seg,0);
193 2 Delay(30);
194 2 }
195 1 Delay(100);
196 1 }
197 /*
198 函数:DispValue()
199 功能:显示100 以内的数值
200 参数:
201 x:显示位置,取值0~6
202 dat:要显示的数据,取值0~99
203 */
204 void DispValue(char x, unsigned char dat)
205 {
206 1 unsigned char d;
207 1 d = dat / 10;
208 1 ZLG7290_Download(x,0,0,d);
209 1 d = dat - d * 10;
210 1 ZLG7290_Download(x+1,0,0,d);
211 1 }
212 /*
213 函数:DispHexValue()
214 功能:以16 进制方式显示数值
215 参数:
216 x:显示位置,取值0~6
217 dat:要显示的数据,取值0~255
218 */
219 void DispHexValue(char x, unsigned char dat)
220 {
221 1 unsigned char d;
222 1 d = dat / 16;
223 1 ZLG7290_Download(x,0,0,d);
224 1 d = dat - d * 16;
225 1 ZLG7290_Download(x+1,0,0,d);
226 1 }
227 /*
228 函数:Test_Key()
229 功能:测试按键功能
230 */
231 void Test_Key()
232 {
233 1 unsigned char KeyValue;
234 1 unsigned char RepeatCnt;
235 1 unsigned char FnKeyValue;
236 1 ClearAll();
237 1 EA = 0;
238 1 IT0 = 1; //负边沿触发中断
239 1 EX0 = 1; //允许外部中断
240 1 EA = 1;
C51 COMPILER V7.50 ZLG7290YANSHI 11/26/2008 19:53:14 PAGE 5
241 1 for (;;)
242 1 {
243 2 if ( FlagINT ) //如果有键按下
244 2 {
245 3 //清除中断标志
246 3 FlagINT = 0;
247 3 //读取键值、连击计数器值、功能键值
248 3 ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
249 3 ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
250 3 ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
251 3 //显示键值、连击计数器值、功能键值
252 3 DispValue(0,KeyValue);
253 3 DispHexValue(3,RepeatCnt);
254 3 DispHexValue(6,FnKeyValue);
255 3 }
256 2 PCON |= 0x01; //使CPU 进入空闲状态,任一中断可唤醒
257 2 }
258 1 }
259 void main()
260 {
261 1 rst=0;
262 1 Delay(10);
263 1 rst=1;
264 1 SystemInit(); //系统初始化
265 1 Test_DispBuf(); //测试直接写显存
266 1 Test_Download(); //测试下载数据
267 1 Test_ScanNum(); //测试不同扫描位数
268 1 Test_Flash(); //测试闪烁功能
269 1 Test_SegOnOff(); //测试段寻址功能
270 1 Test_Key(); //测试键盘功能
271 1 while (1);
272 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 629 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 20
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -