📄 test7279.lst
字号:
C51 COMPILER V6.23a TEST7279 10/28/2002 20:35:00 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE TEST7279
OBJECT MODULE PLACED IN test7279.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test7279.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "c8051f020.h"
2 #include <intrins.h>
3
4 sbit HD7279_DAT=P1^7;
5 sbit HD7279_CLK=P1^6;
6
7 #define NOSELECT7279 P5 |= 0x80 //SPICS4(P57)=1
8 #define SELECT7279 P5 &= ~(0x80) //SPICS4(P57)=0;
9 #define Set7279DAT HD7279_DAT=1
10 #define Clr7279DAT HD7279_DAT=0
11 #define Set7279CLK HD7279_CLK=1
12 #define Clr7279CLK HD7279_CLK=0
13
14 // HD7279测试/演示程序
15
16 // I/O口初始化
17
18 void Delay1ms(unsigned char T);
19 void Delay1s(unsigned char T);
20 void Delay1us(unsigned char T);
21
22 void Send7279Byte(unsigned char ch)
23 {
24 1 char i;
25 1 SELECT7279; //置CS低电平
26 1 Delay1us(50); //延时50μ
27 1
28 1 for (i=0;i<8;i++)
29 1 {
30 2 if (ch&0x80) //输出7位到HD7279A的DATA端
31 2 {
32 3 Set7279DAT;
33 3 }
34 2 else
35 2 {
36 3 Clr7279DAT;
37 3 }
38 2 Set7279CLK; //置CLK高电平
39 2 ch=ch<<1; //待发数据左移
40 2 Delay1us(8); //延时8μ
41 2 Clr7279CLK; //置CLK低电平
42 2 Delay1us(8); //延时50μ
43 2 }
44 1 Clr7279DAT; //发送完毕,DATA端置低,返回
45 1 }
46 unsigned char Receive7279Byte(void)
47 {
48 1 unsigned char i,ch;
49 1 ch=0;
50 1 Set7279DAT; //DATA端置为高电平,输入状态
51 1 Delay1us(50); //延时50μ
52 1 for (i=0;i<8;i++)
53 1 {
54 2 Set7279CLK; //置CLK高电平
55 2 Delay1us(8); //延时8μ
C51 COMPILER V6.23a TEST7279 10/28/2002 20:35:00 PAGE 2
56 2 ch=ch<<1; //接收数据左移1位
57 2 if (HD7279_DAT)
58 2 ch+=1; //接收1位数据
59 2 Clr7279CLK; //置CLK低电平
60 2 Delay1us(8); //延时8μ
61 2 }
62 1 Clr7279DAT; //接收完毕,DATA端重新置成低电平(输出状态)
63 1 return ch;
64 1 }
65
66 void FlashLED(unsigned char No)
67 {
68 1 char i;
69 1 Send7279Byte(0x88); //发闪烁指令
70 1 i=0x1;
71 1 while (No)
72 1 {
73 2 i=i<<1;
74 2 No--;
75 2 }
76 1 Send7279Byte(~i); //1闪烁
77 1 NOSELECT7279; //置CS高电平
78 1 }
79
80 void BlankLED(unsigned char ch)
81 {
82 1 Send7279Byte(0x98); //发消隐指令
83 1 Send7279Byte(ch); //1-显示 0-消隐
84 1 NOSELECT7279; //置CS高电平
85 1 }
86
87 void MoveLeft(void)
88 {
89 1 Send7279Byte(0xA1); //发左移指令
90 1 NOSELECT7279; //置CS高电平
91 1 }
92
93 void MoveRight(void)
94 {
95 1 Send7279Byte(0xA0); //发右移指令
96 1 NOSELECT7279; //置CS高电平
97 1 }
98
99 unsigned char code BdSeg[]={
100 0x7e,0x30,0x6d,0x79, // 0 1 2 3
101 0x33,0x5b,0x5f,0x70, // 4 5 6 7
102 0x7f,0x7b,0x77,0x1f, // 8 9 a b
103 0x4e,0x3d,0x4f,0x47, // c d e f
104 0x00,0x01};
105 /*
106 ; b6
107 ; ----
108 ; b1| b0 |b5
109 ; ---- small
110 ; b2| b3 |b4
111 ; ---- .b7
112 */
113 void DispLED(char *DispBuf,char ShowDot)//ShowDot 显示小数点位
114 {
115 1 char i,ch;
116 1 ShowDot--;
117 1 for (i=0;i<6;i++)
C51 COMPILER V6.23a TEST7279 10/28/2002 20:35:00 PAGE 3
118 1 {
119 2 ch=DispBuf[i];
120 2 if ((ch>='a') && (ch<='f'))
121 2 {
122 3 ch-='a';ch+=0xa;
123 3 }
124 2 if ((ch>='A') && (ch<='F'))
125 2 {
126 3 ch-='A';ch+=0xa;
127 3 }
128 2 Send7279Byte(0x90+5-i); //不译码
129 2 if (ch==' ')
130 2 Send7279Byte(0x00);
131 2 else
132 2 if (ch=='-')
133 2 Send7279Byte(0x01);
134 2 else
135 2 {
136 3 if (ShowDot==i)
137 3 Send7279Byte(0x80|BdSeg[ch&0x0f]);
138 3 else
139 3 Send7279Byte(BdSeg[ch&0x0f]);
140 3 }
141 2 }
142 1 NOSELECT7279; //置CS高电平
143 1 }
144
145 void Test7279(bit LoopFlag)
146 {
147 1 unsigned char i,KeyValue;
148 1 Delay1ms(25); //等待25ms复位时间
149 1 Send7279Byte(0xA4); //发复位指令
150 1 NOSELECT7279; //置CS高电平
151 1 if (LoopFlag==0) return;
152 1 DispLED("123456",0); //显示123456
153 1 for (i=0;i<8;i++)
154 1 {
155 2 Delay1s(1);
156 2 MoveLeft();
157 2 }
158 1
159 1 DispLED("123456",0); //显示123456
160 1 DispLED("7890AB",2); //显示123456
161 1 DispLED("CDEF -",3); //显示123456
162 1
163 1 for (i=0;i<6;i++)
164 1 {
165 2 Delay1s(1);
166 2 MoveRight();
167 2 }
168 1
169 1 DispLED("F 1",1); //显示123456
170 1
171 1 FlashLED(0); //第一位闪烁
172 1 Delay1s(1);
173 1 FlashLED(1); //第二位闪烁
174 1 Delay1s(1);
175 1 FlashLED(8); //关闪烁
176 1
177 1 //BlankLED(0x23); //注意:执行消隐后,键盘输入中断口不能恢复.
178 1
179 1 for (;;)
C51 COMPILER V6.23a TEST7279 10/28/2002 20:35:00 PAGE 4
180 1 {
181 2 while (CPT1CN&0x40);//检测按键,无键按下等待
182 2 Send7279Byte(0x15); //发读键盘指令
183 2 KeyValue=Receive7279Byte();
184 2 NOSELECT7279; //置CS高电平
185 2
186 2 Send7279Byte(0xC8); //发送键码值,按方式1译码下载显示
187 2 Send7279Byte(KeyValue%16);
188 2 NOSELECT7279; //置CS高电平
189 2 while (!(CPT1CN&0x40));
190 2 }
191 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 535 ----
CONSTANT SIZE = 46 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -