📄 choice_transmit.lst
字号:
C51 COMPILER V7.06 CHOICE_TRANSMIT 06/07/2007 15:48:06 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CHOICE_TRANSMIT
OBJECT MODULE PLACED IN .\choice_transmit.obj
COMPILER INVOKED BY: D:\常用软件\keil\C51\BIN\C51.EXE ..\电子设计竞赛\发射\choice_transmit.c BROWSE DEBUG OBJECTEXTEND P
-RINT(.\choice_transmit.lst) OBJECT(.\choice_transmit.obj)
stmt level source
1 #include<reg52.h>
2 #include<math.h>
3 #include<intrins.h>
4 #define uchar unsigned char
5
6 /*说明:功能显示函数 *********************************************************
7 ****** LCD_set_xy ******** //显示光标定位 ***********************************
8 ****** LCD_write_char ***** //在指定位置显示字符 ******************************
9 ****** transfer_display *** //显示连续字串 ***********************************
10 ****** LCD_Write_String *** //写入字符串 ************************************
11 ****** FLOAT_NUM_Display ** //显示浮点型 ************************************
12 ****** INT_NUM_Display **** //显示整数 *************************************
13 ****** HEX_NUM_Display **** //显示十六进制 **********************************
14 ******为了避免程序"死等",故在功能函数中尽量避免调用Delay函数******************/
15
16 void choice_transmit();
17 void MC145162_Reset(unsigned int,unsigned long int,unsigned int,unsigned int);
18 void set_frequency();
19 unsigned int tlc1543(unsigned char port);
20 void ad();
21 bit judge_hitkey();
22 uchar scan_key();
23 uchar hh=0;
24 uchar code *frequency0[10]={"34.80M","34.90M","35.00M","35.10M","35.20M","35.30M","35.40M","35.50M","35.60
-M"," "};
25 int code fry[9]={3480,3490,3500,3510,3520,3530,3540,3550,3560};
26 void xp(uchar d);
27 uchar xx,yy,date0;
28 /***************led********************/
29 void led();
30 #define led_in P1//***************
31 sbit led_en=P3^0;//***************
32
33
34
35
36
37 /***************************LCD Part*******************************************/
38 #define uchar unsigned char
39
40 #define LCDIO P1 //LCD数据口
41
42 #define LINE1 0 //1602第一行
43
44 #define LINE2 1 //1602第二行
45
46 #define LINE1_HEAD 0x80 //第一行首地址
47
48 #define LINE2_HEAD 0xC0 //第二行首地址
49
50
51 /****************************LCD与单片机的接口*********************************/
52
53 sbit LCD1602_RS=P3^7; //指令/数据选择,1选择数据,0选择指令
C51 COMPILER V7.06 CHOICE_TRANSMIT 06/07/2007 15:48:06 PAGE 2
54
55 sbit LCD1602_RW=P3^6; //读写选择,1读出,0写入
56
57 sbit LCD1602_EN=P3^5; //写使能。高有效,下降沿时锁定数据
58
59 sbit LCD1602_busy=LCDIO^7; //判忙标志
60
61 /********************数组定义区************************************************/
62
63 uchar CHR[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','.'};
64
65 uchar LCDDisplaybuffer[32]={0};
66
67 /******************全局变量定义区**********************************************/
68
69 unsigned long frequency; //显示整型定义
70
71 float dd; //显示浮点型定义]
72
73 uchar zhi=0x30; //数字0的代码值
74
75 long int Num;
76
77 uchar Bite;
78
79 /******************函数声明区**************************************************/
80
81 void LCD_en_command(uchar command); //写指令
82
83 void LCD_en_dat(uchar temp); //写数据
84
85 void LCD_set_xy( uchar x, uchar y );//设置显示地址
86
87 void LCD_write_char( uchar x,uchar y,uchar dat);//显示字符
88
89 void LCD_write_string(uchar X,uchar Y,uchar *s);//显示字符串
90
91 void transfer_display(uchar zhi,uchar x,uchar y);//显示滚动的字符
92
93 void LCD_init(void); //LCD初始化
94
95 void LCD_busy(); //判忙
96
97 void FLOAT_NUM_Display(float dd,uchar x,uchar y); //显示浮点型
98
99 void INT_NUM_Display(unsigned int Num,uchar x,uchar y);//显示整型
100
101 void HEX_NUM_Display(unsigned long Num,uchar Bite,uchar x,uchar y);//显示十六进制
102
103 void delay_nms(unsigned int n);//延时功能
104
105 /*******************nms延时函数************************************************/
106
107
108 void delay_nms(unsigned int n)
109 {
110 1 unsigned int i=0,j=0;
111 1 for (i=n;i>0;i--)
112 1 for (j=0;j<1140;j++)
113 1 {;};
114 1
115 1 }
C51 COMPILER V7.06 CHOICE_TRANSMIT 06/07/2007 15:48:06 PAGE 3
116
117
118
119 /*******************************************************************************
120 /***************LCD模块的子程序*************************************************
121 ****************要注意判忙程序的写法和在指令数据函数里放的顺序,不可调换********/
122
123 //判忙程序
124 void LCD_busy()
125 {
126 1 LCDIO=0xff; //置p0口为输入状态
127 1 LCD1602_RS=0;
128 1 LCD1602_RW=1;
129 1 LCD1602_EN=1;
130 1 while(LCD1602_busy);
131 1 LCD1602_EN=0;
132 1 }
133
134 //写入指令代码,即数据的地址
135 void LCD_en_command(uchar command)
136 {
137 1
138 1 LCDIO=command;
139 1 LCD1602_RS=0;
140 1 LCD1602_RW=0;
141 1 LCD1602_EN=0;
142 1 LCD_busy();
143 1 LCD1602_EN=1;
144 1 }
145
146
147 //写入要显示的数据
148 void LCD_en_dat(uchar dat)
149 {
150 1 LCDIO=dat;
151 1 LCD1602_RS=1;
152 1 LCD1602_RW=0;
153 1 LCD1602_EN=0;
154 1 LCD_busy();
155 1 LCD1602_EN=1;
156 1 }
157
158 /*********************************************************************************
159 ** 函数名:void LCD_set_xy( uchar x, uchar y )************************************
160 ** 功能:设置LCD显示的起始位置****************************************************
161 ** 入口参数:uchar x,uchar y (x:0-15;y:0-1;)************************************
162 ********************LCD第一行显示寄存器地址:0X80-0X8F****************************
163 ********************LCD第一行显示寄存器地址:0XC0-0XCF****************************
164 *********** uchar x,uchar y(字符显示的坐标)************************************
165 ** 出口参数:无 ******************************************************************
166 **********************************************************************************/
167
168
169 void LCD_set_xy( uchar x, uchar y )
170 {
171 1
172 1 uchar address;//光标位置
173 1 if (y==LINE1)
174 1 address=LINE1_HEAD+x;
175 1 else
176 1 address=LINE2_HEAD+x;
177 1
C51 COMPILER V7.06 CHOICE_TRANSMIT 06/07/2007 15:48:06 PAGE 4
178 1 LCD_en_command(address);
179 1 }
180
181
182
183 /*********************************************************************************
184 ** 函数名:void LCD_write_char( uchar x,uchar y,uchar dat)************************
185 ** 功能:在指定位置显示单字符(最多32个字符)*************************************
186 ** 入口参数:uchar dat (直接输入需要显示的字符,例如'1','a'等等)***************
187 *********** uchar x,uchar y(字符显示的坐标)************************************
188 ** 出口参数:无 ******************************************************************
189 **********************************************************************************/
190
191 void LCD_write_char( uchar x,uchar y,uchar dat)
192 {
193 1
194 1 LCD_set_xy( x, y );
195 1 LCD_en_dat(dat);
196 1
197 1 }
198
199
200 /*********************************************************************************
201 **函数名:void transfer_display()**************************************************
202 **功能:显示从定义的zhi的ASCALL码开始的连续的字符(最多显示32个字符)**************
203 **入口参数:uchar zhi (输入要显示连续字串的首字符)*********************************
204 **其中的i,j是x轴,LINE1,LINE2为y轴************************************************
205 **出口参数:无*********************************************************************/
206
207
208 void transfer_display(uchar zhi,uchar x,uchar y)
209 {
210 1
211 1 uchar i,j;
212 1
213 1 for(i=x;i<16;i++) //第一行显示
214 1 {
215 2 LCD_write_char(i,y,zhi++);
216 2 }
217 1
218 1 y^=1;
219 1 for(j=0;j<16;j++) //当第一行显示满后第二行显示
220 1 {
221 2 LCD_write_char(j,y,zhi++);
222 2 }
223 1
224 1 }
225
226 /*********************************************************************************
227 ** 函数名:void LCD_write_string(uchar X,uchar Y,uchar *s)************************
228 ** 功能:字符串显示的输入函数(最多32个字符)*************************************
229 ** 入口参数:uchar *s (直接输入需要显示的字符串,例如"welcome to use!")********
230 *********** uchar X,uchar Y(第一个字符开始显示的坐标)**************************
231 ** 出口参数:无 ******************************************************************
232 **********************************************************************************/
233 void LCD_write_string(uchar X,uchar Y,uchar *s)
234 {
235 1
236 1 while (*s) // 显示的字符
237 1 {
238 2
239 2 LCD_set_xy( X, Y ); //设置显示的地址
C51 COMPILER V7.06 CHOICE_TRANSMIT 06/07/2007 15:48:06 PAGE 5
240 2 LCD_en_dat(*s);
241 2 s++;
242 2 X++;
243 2 if(X==16) //当第一行显示满时,Y^=1,取另一行
244 2 {
245 3 X=0;
246 3 Y^=1;
247 3 }
248 2
249 2 }
250 1
251 1 }
252
253
254 /************LCD模块初始化******************************************************/
255 void LCD_init(void)
256 {
257 1 LCD_en_command(0x01);//清屏 (得两次清屏)
258 1 LCD_en_command(0x38);//设定双行显示,字形5*7点阵,8位数据转移
259 1 LCD_en_command(0x0c);//开显示,光标不显示,不闪烁
260 1 LCD_en_command(0x06);//右移光标(光标加1,字符不动)
261 1 LCD_en_command(0x01);//清屏
262 1 }
263
264
265 /*********************************************************************************
266 ** 函数名:void FLOAT_NUM_Display(float dd)***************************************
267 ** 功能:显示浮点型数字(6位有效数字)********************************************
268 ** 入口参数:float dd (dd 为调用这个子程序时传入的数据)*************************
269 ** 出口参数:无 ******************************************************************
270 **注意各变量的数据类型,数的有效范围***********************************************
271 **实现方式:从小数点第六位 起往左逆向取数字,存入数组,再正向输出7位数字**********
272 **该函数的缺陷是:小数部分最多显示六位,如0.000020**************************************/
273
274
275 void FLOAT_NUM_Display(float dd,uchar x,uchar y)
276 {
277 1
278 1 uchar i,j,k=0;
279 1 frequency=dd*1000000;//取小数点后六位
280 1 if(frequency>=10000000) //整数部分不为0
281 1 {
282 2 for (i=0;i<16;i++)
283 2 {
284 3 if(i==6)
285 3 {
286 4 LCDDisplaybuffer[i]='.';
287 4 }
288 3 else
289 3 {
290 4 LCDDisplaybuffer[i]=CHR[frequency%10];
291 4 frequency/=10;
292 4 }
293 3
294 3 if(frequency==0)
295 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -