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