📄 ss_sweep.lst
字号:
C51 COMPILER V7.06 SS_SWEEP 02/25/2007 16:14:28 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SS_SWEEP
OBJECT MODULE PLACED IN ss_sweep.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ss_sweep.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <absacc.h>
2 #include <reg51.h>
3 #include <stdlib.h>
4 #include <math.h>
5 #include <intrins.h>
6 #include "display_drv.h"
7
8
9 #define uchar unsigned char
10 #define uint unsigned int
11
12 /*定义开关中断*/
13 #define DISABLE EA=0
14 #define ENABLE EA=1
15 #define ON 1
16 #define OFF 0
17
18 /*定义键盘*/
19 #define key0 0
20 #define key1 1
21 #define key2 2
22 #define key3 3
23 #define key4 4
24 #define key5 5
25 #define key6 6
26 #define key7 7
27 #define key8 8
28 #define key9 9
29 #define key_mod 10
30 #define key_clr 11
31 #define key_enter 12
32 #define key_tiao 13
33 #define key_xuan1 14
34 #define key_xuan2 15
35 /*define Command*/
36
37 #define Wsin 0
38 #define Wtri 1
39 #define Wpul 2
40 #define Wclr 3
41
42 /*定义端口,P2口用作控制线*/
43 sbit WR_M=P2^4; //回送M控制线
44 sbit RESET_PHASEREG=P2^5; //复位相位累加器
45
46 /*P1口用作LED显示线*/
47 sbit LED_CLK=P1^0; //LED时钟线
48 sbit LED_DAT=P1^1; //LED数据线
49
50 sbit Cmd_CS=P2^5;
51 sbit DC=P2^6;
52 sbit Mh=P2^7;
53 sbit Int_wire=P3^2;
54
55
C51 COMPILER V7.06 SS_SWEEP 02/25/2007 16:14:28 PAGE 2
56 uchar count=0; //显示的位数
57 bit flag=0; //是否按了ENTER,为0表示没有按
58 uchar idata value[5]={0,0,0,0,0}; //存储显示的数值
59 uchar mh_data=0; //送给CPLD的频率步进值高位
60 uchar ml_data=0; //送给CPLD的频率步进值低位
61
62 uchar idata key_pressed;
63 static uchar key_no;
64
65 void led_display(uchar i);
66 /*数字'1','2','3','4','5','6','7','8','9','0'的七段码字库*/
67 const uchar code LED_FONT[11]={ //
68 0xFC, //0
69 0x60, //1
70 0xDA, //2
71 0xF2, //3
72 0x66, //4
73 0xB6, //5
74 0xBE, //6
75 0xE0, //7
76 0xFE, //8
77 0xF6, //9
78 0x00, //不显示
79 };
80
81 void init_port()
82 {
83 1 uchar i;
84 1 P0 = 0xFF;
85 1 P1 = 0xFF;
86 1 RESET_PHASEREG=1; //禁止相位累加器工作
87 1 WR_M=1; //回送M控制线初始为高电平
88 1 Cmd_CS=1;
89 1 P3 = 0xFF;
90 1 for(i=0;i<6;i++)
91 1 led_display(10);
92 1 }
93
94
95 void init_interrupt()
96 {
97 1 IE=0x81;
98 1 PX0=1;
99 1 EX0=1;
100 1 IE0=0;
101 1 EA=1;
102 1 IT0=1; //外部中断0为跳变触发方式
103 1 ENABLE;
104 1
105 1 //CPU开中断
106 1 }
107
108 void led_display(uchar i)
109 {
110 1 uchar j,mask;
111 1 mask=0x01;
112 1 for(j=0;j<8;j++){
113 2 LED_CLK=0;
114 2 LED_DAT=( (LED_FONT[i]) & mask);
115 2 mask<<=1;
116 2 LED_CLK=1; //上升沿移位
117 2 }
C51 COMPILER V7.06 SS_SWEEP 02/25/2007 16:14:28 PAGE 3
118 1 }
119
120
121 void wait(void)
122 {
123 1 unsigned int i;
124 1 for(i=0;i<5000;i++);;
125 1 }
126
127 void delayMs(unsigned char dly)
128 {
129 1 unsigned char i;
130 1 unsigned int k;
131 1 for(i=dly;i!=0;i--)
132 1 {
133 2 for(k=0;k<1000;k++);
134 2 }
135 1 }
136
137
138
139 #define SysFrq 12
140
141 void SetPhase(unsigned long int Freq)
142 {
143 1 unsigned char div;
144 1 unsigned int phase;
145 1 #if SysFrq==12
146 1 if(Freq>31250)
147 1 {
148 2 Freq=31250;
149 2 value[0]=3;
150 2 value[1]=1;
151 2 value[2]=2;
152 2 value[3]=5;
153 2 value[4]=0;
154 2 }
155 1 if(Freq<1007)
156 1 {
157 2 div=31;
158 2 phase=Freq/0.4922;
159 2 }
160 1
161 1 if((Freq>=1007)&&(Freq<2081))
162 1 {
163 2 div=15;
164 2 phase=Freq/1.0173;
165 2 }
166 1 if((Freq>=2081)&&(Freq<4463))
167 1 {
168 2 div=7;
169 2 phase=Freq/2.1798;
170 2 }
171 1 if((Freq>=4463)&&(Freq<6249))
172 1 {
173 2 div=5;
174 2 phase=Freq/3.0517;
175 2 }
176 1 if((Freq>=6249)&&(Freq<7811))
177 1 {
178 2 div=4;
179 2 phase=Freq/3.8147;
C51 COMPILER V7.06 SS_SWEEP 02/25/2007 16:14:28 PAGE 4
180 2 }
181 1 if((Freq>=7811)&&(Freq<10415))
182 1 {
183 2 div=3;
184 2 phase=Freq/5.0863;
185 2 }
186 1 if((Freq>=10415)&&(Freq<15624))
187 1 {
188 2 div=2;
189 2 phase=Freq/7.6294;
190 2 }
191 1 if((Freq>=15624))
192 1 {
193 2 div=1;
194 2 phase=Freq/15.2588;
195 2 }
196 1 #endif
197 1 #if SysFrq==11
if(Freq>30316)
{
Freq=30316;
value[0]=3;
value[1]=0;
value[2]=3;
value[3]=1;
value[4]=6;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -