📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 12/07/2007 20:43:05 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include <stdlib.h>
3 #include <intrins.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define ulong unsigned long
7 sbit key_port0=P1^0;
8 sbit key_port1=P1^1;
9 sbit key_port2=P1^2;
10 sbit key_port3=P1^3;
11 sbit key_port4=P1^4;
12 sbit lcd_da=P1^5;
13 sbit lcd_clk=P1^6;
14 sbit data_in=P2^3;
15 sbit data_clk=P2^4;
16 sbit control_oe=P2^5;
17 sbit control_in=P2^6;
18 sbit control_clk=P2^7;
19 sbit dds_da=P3^3;
20 sbit dds_clk=P3^4;
21 sbit dds_ag=P3^5;
22 bit have_data=0;
23 uchar data line[9];
24 uchar p;
25 uchar up_down=1;
26 uchar data word[5]={0x22,0x22,0x22,0x02,0x01};
27 uchar code fre[]={"1.频率调节"};
28 uchar code am[]={"2.AM幅度调制"};
29 uchar code pa_sk[]={"3.产生psk,ask"};
30 uchar code fm[]={"4.FM频率调制"};
31 uchar code fre_mode_tab1[]={"请输入频率后按确"};
32 uchar code fre_mode_tab2[]={"定输出或按返回重"};
33 uchar code fre_mode_tab3[]={"新输入!"};
34 uchar code fre_mode_tab4[]={" (Hz)"};
35 uchar code am_mode_tab1[]={"请选择调制度Ma"};
36 uchar code am_mode_tab2[]={"10%"};
37 uchar code pa_sk_mode_tab1[]={"选择ASK/PSK.模式"};
38 uchar code pa_sk_mode_tab2[]={" ASK PSK "};
39 uchar code pa_sk_mode_tab3[]={"输入基带序列编码"};
40 uchar code fm_mode_tab1[]={"按左右键选择频偏"};
41 uchar code fm_mode_tab2[]={" 5K 10K"};
42 uchar code fm_mode_tab3[]={"请输入载波频率"};
43 /******************************送FPGA控制数据*************************************/
44 //---------------------------------------------------送控制指令
45 void send_control(uchar x){
46 1 uchar i; CY=0;
47 1 for(i=0;i<8;i++)
48 1 {
49 2 x<<=1;
50 2 control_in=CY;
51 2 control_clk=0;
52 2 control_clk=1;
53 2 control_clk=0;
54 2 }
55 1 control_oe=1;
C51 COMPILER V8.01 MAIN 12/07/2007 20:43:05 PAGE 2
56 1 control_oe=0;
57 1 control_oe=1;
58 1 }
59 //-----------------------------------------------送数据
60 void send_data(uchar x){
61 1 uchar i; CY=0;
62 1 for(i=0;i<8;i++){
63 2 x<<=1;
64 2 data_in=CY;
65 2 data_clk=0;
66 2 data_clk=1;
67 2 data_clk=0;
68 2 }
69 1 }
70 //------------------------------------
71 void send_dds_bit(uchar num)
72 {
73 1 uchar i;
74 1 CY=0;
75 1 for(i=0;i<8;i++)
76 1 {
77 2 num=num>>1;
78 2 dds_da=CY;
79 2 dds_clk=1;
80 2 dds_clk=0;
81 2 }
82 1 }
83 //-------------------------------------------------数据转化
84 void send_dds_data(void)
85 {
86 1 uchar i;
87 1 uchar x0,x1,x2,x3;
88 1 float y;
89 1 ulong z;
90 1 y=atof(line);
91 1 z=y*35.7913941;
92 1 x0=z/16777216;word[3]=x0;
93 1 x1=(z%16777216)/65536;word[2]=x1;
94 1 x2=((z%16777216)%65536)/256;word[1]=x2;
95 1 x3=(((z%16777216)%65536)%256)/1;word[0]=x3;
96 1 for(i=0;i<5;i++)
97 1 {
98 2 send_dds_bit(word[i]);
99 2 }
100 1 dds_ag=1;
101 1 dds_ag=0;
102 1 }
103 /**************************以下为液晶显示子程序***********************/
104 void lcd_delay(void) //显示延时1MS
105 {
106 1 uint i;
107 1 for(i=0;i<50;i++);
108 1 _nop_();
109 1 }
110 //------------------------------------发数据
111 void lcd_send_data(uchar mun)
112 {
113 1 uchar i;
114 1 for(i=0;i<8;i++)
115 1 {
116 2 lcd_clk=0;
117 2 if((mun&0x80)!=0)lcd_da=1;
C51 COMPILER V8.01 MAIN 12/07/2007 20:43:05 PAGE 3
118 2 else lcd_da=0;
119 2 lcd_clk=1;
120 2 mun=mun<<1;
121 2 }
122 1 }
123 //-----------------------------------------------写指令
124 void lcd_write_ins(uchar num)
125 {
126 1 uchar hdata,ldata;
127 1 hdata=num&0xf0;
128 1 ldata=((num<<4)&0xf0);
129 1 lcd_send_data(0xf8);
130 1 lcd_delay();
131 1 lcd_send_data(hdata);
132 1 lcd_delay();
133 1 lcd_send_data(ldata);
134 1 lcd_delay();
135 1 }
136 //-----------------------------------写数据
137 void lcd_write_da(uchar num)
138 {
139 1 uchar hdata,ldata;
140 1 hdata=num&0xf0;
141 1 ldata=((num<<4)&0xf0);
142 1 lcd_send_data(0xfa);
143 1 lcd_delay();
144 1 lcd_send_data(hdata);
145 1 lcd_delay();
146 1 lcd_send_data(ldata);
147 1 lcd_delay();
148 1 }
149 //-------------------------------------X表示第几个字,Y表示第几行,Z表示字符;
150 void lcd_show(uchar x,uchar y,uchar *z)
151 {
152 1 switch (y)
153 1 {
154 2 case 1:lcd_write_ins(0x80+x-1);break;
155 2 case 2:lcd_write_ins(0x90+x-1);break;
156 2 case 3:lcd_write_ins(0x88+x-1);break;
157 2 case 4:lcd_write_ins(0x98+x-1);break;
158 2 default:break;
159 2 }
160 1 while(*z)
161 1 {
162 2 lcd_write_da(*z++);
163 2 }
164 1 }
165 //--------------------------------------------
166 //12864液晶反白子程序
167 //X第几个字(1~8),Y第几行(1~4行),width反白的宽度(1~16)(单位:字符)
168 //若width==0则上次反白的位置变为正常显示,若width!=0,上次反白的位
169 //置变为正常显示,则这次反白的位置反白。
170 void fan(uchar lcd_x,uchar lcd_y,uchar width)
171 {
172 1 uchar xx,yy,i,j;
173 1 yy=0x80;xx=0x80; //下半屏绘图区X,y轴地址
174 1 lcd_write_ins(0x36); //扩展指令模式,形图开关开
175 1 for (i=0;i<32;i++) //上半屏处理显示空白
176 1 {
177 2 lcd_write_ins(yy++);lcd_write_ins(xx);
178 2 for (j=0;j<16;j++)
179 2 { lcd_write_da(0x00);}
C51 COMPILER V8.01 MAIN 12/07/2007 20:43:05 PAGE 4
180 2 }
181 1 yy=0x80;xx=0x88; //下半屏绘图区X,轴地址
182 1 for (i=0;i<32;i++) //下半屏处理显示空白
183 1 {
184 2 lcd_write_ins(yy++); lcd_write_ins(xx);
185 2 for (j=0;j<16;j++)
186 2 { lcd_write_da(0x00); }
187 2 }
188 1 lcd_write_ins(0x30); //基本指令模式
189 1
190 1 //-------------------------------------------
191 1 if(width!=0) //如果width不等0,则反白选中区域并存此次的参数
192 1 {
193 2 if(lcd_y>2)
194 2 {
195 3 xx=lcd_x+0x87;
196 3 yy=((lcd_y-3)<<4)+0x80;
197 3 }
198 2 else
199 2 {
200 3 xx=lcd_x+0x7f;
201 3 yy=((lcd_y-1)<<4)+0x80;
202 3 }
203 2 //--------------------反白选中区域----------------------------
204 2 lcd_write_ins(0x36); //扩展指令模式,形图开关开
205 2 for (i=0;i<16;i++) //一行处理显示
206 2 {
207 3 lcd_write_ins(yy++);lcd_write_ins(xx);
208 3 for (j=0;j<width;j++)
209 3 { lcd_write_da(0xff);}
210 3 }
211 2 lcd_write_ins(0x30); //基本指令模式
212 2 }
213 1 }
214 //----------------------------------------------lcd初始化
215 void lcd_begin(void)
216 {
217 1 lcd_delay();
218 1 lcd_write_ins(0x30);
219 1 lcd_write_ins(0x08);
220 1 lcd_write_ins(0x0e);
221 1 lcd_write_ins(0x01);
222 1 lcd_write_ins(0x06);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -