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