📄 hd7279.lst
字号:
C51 COMPILER V8.02 HD7279 07/26/2008 10:59:22 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE HD7279
OBJECT MODULE PLACED IN hd7279.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE hd7279.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2
3 void long_delay(void);
4 void short_delay(void);
5 void delay10ms(unsigned char);
6 void write7279(unsigned char, unsigned char); // 写入HD7279
7 unsigned char read7279(unsigned char); // 读HD7279
8 void send_byte(unsigned char); //发送1个字节
9 unsigned char receive_byte(void); //接受1个字节
10 unsigned char digit[5]; //变量即I/O口定义
11 unsigned char key_number, j, k;
12 unsigned int tmr;
13 unsigned long wait_cnter;
14
15 sbit cs=P2^0; //
16 sbit clk=P2^1; //
17 sbit dat=P2^2; //
18 sbit key=P2^3; //
19 //****** HD7279A ******
20 #define CMD_RESET 0xa4 //复位指令
21 #define CMD_TEST 0xbf //测试指令
22 #define DECODE0 0x80 //方式0译码
23 #define DECODE1 0xc8 //方式1译码
24 #define CMD_READ 0x15 //读键盘指令
25 #define UNDECODE 0x90 //不译码指令
26 #define RTL_CYCLE 0xa3 //循环左移
27 #define RTR_CYCLE 0xa2 //循环右移
28 #define RTL_UNCYL 0xa1 //左移
29 #define RTR_UNCYL 0xa0 //右移
30 #define ACTCTL 0x98 //消隐
31 #define SEGON 0xe0 //段电亮
32 #define SEGOFF 0xc0 //闪烁控制
33 #define BLINKCTL 0x88
34 void main()
35 {
36 1 while (1)
37 1 {
38 2 //for (tmr=0;tmr<0x2000;tmr++); //上电延时
39 2 //send_byte(CMD_RESET); // HD7279A
40 2 //******************************************
41 2 // 闪烁及键盘借口测试
42 2 //******************************************
43 2 send_byte(CMD_TEST); //
44 2 for (j=0;j<3;j++) // 3
45 2 {
46 3 delay10ms(100);
47 3 }
48 2 send_byte(CMD_RESET); //消除显示
49 2 //*********************************************
50 2 //10S无键盘按下,顺序执行
51 2 //**********************************************
52 2 wait_cnter=0;
53 2 key_number=0xff;
54 2 write7279(BLINKCTL,0xfc); // 1 2位为闪烁位
55 2 write7279(UNDECODE,0X08); // 1 '_'
C51 COMPILER V8.02 HD7279 07/26/2008 10:59:22 PAGE 2
56 2 write7279(UNDECODE+1,0x08); // 2 '_'
57 2 do
58 2 {
59 3 if (!key) //有键按下
60 3 {
61 4 key_number=read7279(CMD_READ);//读出键码
62 4 write7279(DECODE1+1,key_number/16);//第2位显示键码高8位
63 4 write7279(DECODE1,key_number&0x0f);//第1位显示键码低 8位
64 4 while (!key); //等待键码按下
65 4 wait_cnter=0;
66 4 }
67 3 wait_cnter++;
68 3 } while (key_number!=0 && wait_cnter<0x30000);
69 2 //按键为0和超时进入下一步
70 2 write7279(BLINKCTL,0xff); // 消除闪烁
71 2 //快速计数
72 2
73 2 //*************数码管显示
74 2
75 2 for (j=0;j<5;j++) // 初始值00000
76 2 {
77 3 digit[j]=0;
78 3 write7279(DECODE0+j,digit[j]);
79 3 }
80 2 while (digit[4]<2) // 计数到20000就停止
81 2 {
82 3 digit[0]++;
83 3 if (digit[0]>9)
84 3 {
85 4 digit[0]=0;
86 4 digit[1]++;
87 4 if (digit[1]>9)
88 4 {
89 5 digit[1]=0;
90 5 digit[2]++;
91 5 if (digit[2]>9)
92 5 {
93 6 digit[2]=0;
94 6 digit[3]++;
95 6 if (digit[3]>9)
96 6 {
97 7 digit[3]=0;
98 7 digit[4]++;
99 7 if (digit[4]>9)
100 7 {
101 8 digit[4]=0;
102 8 }
103 7 }
104 6 }
105 5 }
106 4 }
107 3
108 3
109 3 write7279(DECODE0,digit[0]);
110 3 if (digit[0]==0)
111 3 {
112 4 write7279(DECODE0+1,digit[1]);
113 4 if (digit[1]==0)
114 4 {
115 5 write7279(DECODE0+2,digit[2]);
116 5 if (digit[2]==0)
117 5 {
C51 COMPILER V8.02 HD7279 07/26/2008 10:59:22 PAGE 3
118 6 write7279(DECODE0+3,digit[3]);
119 6 if (digit[3]==0)
120 6 {
121 7 write7279(DECODE0+4,digit[4]);
122 7 }
123 6 }
124 5 }
125 4 }
126 3 }
127 2
128 2 delay10ms(150);
129 2 send_byte(CMD_RESET); //消除显示
130 2 //************************
131 2 //下载数据但不译码
132 2 //***********************
133 2 write7279(UNDECODE+7,0x49);
134 2 delay10ms(80);
135 2 //*************************************************
136 2 //循环左右移动“三”左右移动23次
137 2 //*************************************************
138 2 for (j=0;j<23;j++)
139 2 {
140 3 send_byte(RTR_CYCLE); // 右移23次
141 3 delay10ms(12);
142 3 }
143 2 for (j=0;j<23;j++)
144 2 {
145 3 send_byte(RTL_CYCLE); // 左移23
146 3 delay10ms(12);
147 3 }
148 2 //*********************************************
149 2 for (j=0;j<16;j++)
150 2 {
151 3 send_byte(RTL_UNCYL); //不循环左移
152 3 write7279(DECODE0,j); //译码方式0,显示在第一位
153 3 delay10ms(50);
154 3 }
155 2 delay10ms(150);
156 2 send_byte(CMD_RESET);
157 2 //*********************************************
158 2 for (j=0;j<16;j++)
159 2 {
160 3 send_byte(RTR_UNCYL) ; //不循环右移
161 3 write7279(DECODE1+7,j) ; //译码方式1,显示在第8位
162 3 delay10ms(50);
163 3 }
164 2 delay10ms(150);
165 2 //*********************************************
166 2 //消隐指令测试
167 2 //*****************************
168 2 k=0xff;
169 2 for (j=0;j<6;j++)
170 2 {
171 3 k=k/2;
172 3 write7279(ACTCTL,k); //每间隔1秒增加一个消隐位
173 3 delay10ms(100);
174 3 }write7279(ACTCTL,0xff); // 恢复8位显示
175 2 delay10ms(100);
176 2 send_byte(CMD_RESET); //消除显示
177 2 //**********************************************
178 2 for (j=0;j<64;j++)
179 2 {
C51 COMPILER V8.02 HD7279 07/26/2008 10:59:22 PAGE 4
180 3 write7279(SEGON,j); // 64个显示段逐个电亮
181 3 write7279(SEGOFF,j-1); //同时将前一个显示段关闭
182 3 delay10ms(20);
183 3 }
184 2 }
185 1 }
186 //********************************************** 功能 子函数
187 void write7279(unsigned char cmd, unsigned char dta)
188 {
189 1 send_byte (cmd);
190 1 send_byte (dta);
191 1 }
192
193 unsigned char read7279(unsigned char command)
194 {
195 1 send_byte(command);
196 1 return(receive_byte());
197 1 }
198
199 void send_byte( unsigned char out_byte)
200 {
201 1 unsigned char i;
202 1 cs=0;
203 1 long_delay();
204 1 for (i=0;i<8;i++)
205 1 {
206 2 if (out_byte&0x80)
207 2 {
208 3 dat=1;
209 3 }
210 2 else
211 2 {
212 3 dat=0;
213 3
214 3 }
215 2 clk=1;
216 2 short_delay();
217 2 clk=0;
218 2 short_delay();
219 2 out_byte=out_byte*2;
220 2 }
221 1 dat=0;
222 1 }
223 unsigned char receive_byte(void)
224 {
225 1 unsigned char i, in_byte;
226 1 dat=1; //设为输入状态
227 1 long_delay();
228 1
229 1 for (i=0;i<8;i++)
230 1 {
231 2 clk=1;
232 2 short_delay();
233 2 in_byte=in_byte*2;
234 2 if (dat)
235 2 {
236 3 in_byte=in_byte|0x01;
237 3 }
238 2 clk=0;
239 2 short_delay();
240 2 }
241 1 dat=0;
C51 COMPILER V8.02 HD7279 07/26/2008 10:59:22 PAGE 5
242 1 return (in_byte);
243 1 }
244
245 void long_delay(void)
246 {
247 1 unsigned char i;
248 1 for (i=0;i<0x30;i++);
249 1 }
250 void short_delay(void)
251 {
252 1 unsigned char i;
253 1 for (i=0;i<8;i++);
254 1 }
255 // ********************* 延时n*10ms **********************
256 void delay10ms(unsigned char time)
257 {
258 1 unsigned char i;
259 1 unsigned int j;
260 1 for (i=0;i<time;i++)
261 1 {
262 2 for(j=0;j<0x390;j++)
263 2 {
264 3 if (!key)
265 3 {
266 4 key_int();
*** WARNING C206 IN LINE 266 OF HD7279.C: 'key_int': missing function-prototype
267 4 }
268 3 }
269 2 }
270 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 703 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -