📄 ddfstest2.lst
字号:
C51 COMPILER V6.20c DDFSTEST2 12/25/2006 22:50:55 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE DDFSTEST2
OBJECT MODULE PLACED IN ddfstest2.OBJ
COMPILER INVOKED BY: D:\Program Files\keilc\C51\BIN\C51.EXE ddfstest2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*7218在硬件译码的时候,低四位数据进行译码,最高位控制小数点,其余三位无效*/
2 //distab保存要显示的8位数据(每一位为一个字节)
3 //ledtab为7218软件译码字型表
4 #include<AT89x51.h>
5 #include<absacc.h>
6 #include<intrins.h>
7 #define DisCmd XBYTE [0xC100] //7218控制字地址
8 #define DisData XBYTE [0xC000] //7218数据口地址
9 #define LedMode P1_5
10 #define PLD_Reset XBYE [0xA0FB] // 重置信号reset;复位值:0xff;
11 #define FreHigh XBYTE [0XA0FC] //频率信号高八位地址;
12 #define FreLow XBYTE [0XA0FD] //频率信号低八位地址;
13 #define PhaHigh XBYTE [0XA0FE] //相位信号高八位地址;
14 #define Phalow XBYTE [0XA0FF] //相位信号第八位地址;
15 #define scode 0xb0 //7218软件译码方式命令字
16 #define bcode 0x90 //B码译码方式命令字
17 #define hexcode 0xd0 //软件译码方式命令字
18 #define unchar unsigned char
19 #define unint unsigned int
20 bit flinkflag; //闪烁标志位
21 unchar keynum; //按键号
22 unchar enter=0;
23 bit Led_On;
24 char ledcursor=7; //保存光标当前位置
25 unint Freq; //输入频率
26 long Phase; //输入相位
27 unchar sw;
28 char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
29 //char temp[8];
30 char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
31 //0, 1, 2, 3, 4, 5, 6, 7
32 0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
33 //8 ,9 ,a ,b ,c ,d ,e ,f
34 0x80,0xbe,0x8b,0xee,0x84 };
35 //熄灭 H L P -
36 //***************************************************************************************
37 void delay200ms()
38 {
39 1 int i=10000,j=1000;
40 1 for(;i>0;i--)
41 1 for(;j>0;j--);
42 1 }
43 //***************************************************************************************
44
45 void display(unchar dot)
46 {
47 1 unchar i;
48 1 LedMode=1;
49 1 DisCmd=scode; //采用软件译码
50 1 LedMode=0;
51 1 if(Led_On)
52 1 {
53 2 for(i=0;i<8;i++) //将distab中的数据送如7218
54 2 {
55 3 if((i==dot)&(dot!=0))
C51 COMPILER V6.20c DDFSTEST2 12/25/2006 22:50:55 PAGE 2
56 3 DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
57 3 else
58 3 DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
59 3 }
60 2 }
61 1 }
62 //***************************************************************************************
63 void flink() //flag为1闪烁,flag为0,不闪烁;
64 {
65 1
66 1 unchar i;
67 1 while(flinkflag) //光标位置闪烁
68 1 {
69 2 LedMode=1;
70 2 DisCmd=scode; //采用软件译码
71 2 LedMode=0;
72 2 for(i=0;i<8;i++) //将distab中的数据送如7218
73 2 {
74 3 if(i==ledcursor)
75 3 DisData=0x80; //查表转化并将字型送入7218
76 3 else
77 3 DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
78 3 }
79 2 delay200ms();
80 2 LedMode=1;
81 2 DisCmd=scode;
82 2 display(0);
83 2 delay200ms();
84 2 }
85 1 }
86 //***************************************************************************************
87 void KeyprgF1(void) //输入频率
88 {
89 1 sw=1;
90 1 flinkflag=1;
91 1 ledcursor=4;
92 1 distab[0]=0x00;
93 1 distab[1]=0x00;
94 1 distab[2]=0x00;
95 1 distab[3]=0x00;
96 1 distab[4]=0x00;
97 1 distab[5]=0x10;
98 1 distab[6]=0x10;
99 1 distab[7]=0x0f;
100 1 display(0);
101 1 }
102 void KeyprgF2(void ) //输入相位
103 {
104 1 sw=0;
105 1 ledcursor=2;
106 1 flinkflag=1;
107 1 distab[0]=0x00;
108 1 distab[1]=0x00;
109 1 distab[2]=0x00;
110 1 distab[3]=0x10;
111 1 distab[4]=0x10;
112 1 distab[5]=0x10;
113 1 distab[6]=0x10;
114 1 distab[7]=0x13;
115 1 display(0);
116 1 }
117 //void KeyprgClear(void){}
C51 COMPILER V6.20c DDFSTEST2 12/25/2006 22:50:55 PAGE 3
118 void KeyprgEnter(void)
119 {
120 1 unint temp;
121 1 //enter=!enter;
122 1 flinkflag=0;
123 1 if(sw)
124 1 {
125 2 Freq=distab[4]*1000+distab[3]*100+distab[2]*10+distab[1];
126 2 temp=_iror_(Freq,8);
127 2 FreHigh=temp;
128 2 temp=Freq%256;
129 2 FreLow=temp;
130 2 }
131 1 else
132 1 {
133 2 Phase=distab[2]*100+distab[1]*10+distab[0];
134 2 Phase=(Phase*512)/360;
135 2 temp=(unint)_lror_(Phase,1);
136 2 PhaHigh=temp;
137 2 temp=(unint)(Phase&0x01);
138 2 temp=_irol_(Phase,7);
139 2 Phalow=temp;
140 2 }
141 1 display(0); //显示键值
142 1
143 1 }
144
145 //**************************************************************************************
146
147 void keyprg(unchar key) //键盘键值执行的程序
148 {
149 1 // unchar i;
150 1 if(key<=9)
151 1 {
152 2 distab[ledcursor]=keynum; //键值送入distab最低位保存
153 2 if(ledcursor>0) //光标移位
154 2 ledcursor--;
155 2 else
156 2 ledcursor=7;
157 2 display(0); //显示键值
158 2 }
159 1
160 1 else
161 1 {
162 2 switch(key)
163 2 {
164 3
165 3 case 0x0A:
166 3 KeyprgF1();
167 3 break;
168 3 case 0x0B: //功能键F2
169 3 KeyprgF2();
170 3 break;
171 3 case 0x0C: //KeyprgBack();
172 3 if(ledcursor<7) //光标移位
173 3 ledcursor++;
174 3 else
175 3 ledcursor=0;
176 3 display(0); //显示键值
177 3 break;
178 3 case 0x0D: //加
179 3 if(distab[ledcursor]<0x09)
C51 COMPILER V6.20c DDFSTEST2 12/25/2006 22:50:55 PAGE 4
180 3 distab[ledcursor]++;
181 3 else
182 3 distab[ledcursor]=0;
183 3 display(0); //显示键值
184 3 break;
185 3 case 0x0E: //减
186 3 if(distab[ledcursor]>0)
187 3 distab[ledcursor]--;
188 3
189 3 else
190 3 distab[ledcursor]=9;
191 3 display(00); //显示键值
192 3
193 3 break;
194 3 case 0x0F:
195 3 KeyprgEnter();
196 3 break;
197 3 default:
198 3 break;
199 3 }
200 2 }
201 1
202 1 }
203 //**************************************************************************************
204 void intt0() interrupt 0
205 {
206 1
207 1 EX0=0; //关键盘中断,禁止相应其他按键
208 1 keynum=P1; //从p1口读入键盘值
209 1 keynum=keynum&0x0f; //取低四位;
210 1 keyprg(keynum);
211 1 //if(enter) //不是enter键,屏蔽中断
212 1 EX0=1;
213 1 }
214
215 //**************************************************************************************
216
217 void main()
218 {
219 1 unchar j=0;
220 1 EX0=1;
221 1 //ET0=1;
222 1 EA=1;
223 1 //clock_initial() ;
224 1 Led_On=1;
225 1 display(0);
226 1 while(1)
227 1 {
228 2 // if(flinkflag==1)
229 2 flink();
230 2 }
231 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 772 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 3
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
C51 COMPILER V6.20c DDFSTEST2 12/25/2006 22:50:55 PAGE 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -