?? shiboqi.lst
字號:
C51 COMPILER V7.20 SHIBOQI 11/20/2007 14:15:22 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SHIBOQI
OBJECT MODULE PLACED IN shiboqi.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE shiboqi.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------
2 //
3 //2007年全國電子設計大賽培訓專用
4 // 基于DDS的信號發生器
5 // Design By BoBo&ShuiJian
6 //------------------------------------------
7 #include<reg51.h>
8 #include<absacc.h>
9 #include<stdio.h>
10 #include"LCD.h"
11 //----------每位的控制字-----------------
12 #define FF7 357913941//858993459 //50M //2147483648 20M //357913941 120M
-//385136686 111MHz晶振
13 #define FF6 35791394//85899346 //214748365 //35791394 //38513669
14 #define FF5 3579139//8589935 //21474836 //3579139 //3851367
15 #define FF4 357914//858993 //2147484 //357914 //385137
16 #define FF3 35791//85899 //214748 //35791 //38514
17 #define FF2 3579//8590 //21475 //3579 //3851
18 #define FF1 358//859 //2148 //358 //385
19 #define FF0 36//86 //215 //36
20 //--------------8279端口定義--------------
21 #define com XBYTE[0X0001] //命令字地址
22 #define dat XBYTE[0X0000] //數據口地址
23 //--------------DDS控制--------------------
24 #define data_OUT XBYTE[0x1C00] //采用總線方式CE7
25 #define data_OUT1 XBYTE[0x1400] //采用總線方式CE5
26 //--------------AD7524端口定義-------------
27 #define AD7524 XBYTE[0x0C00] //程控衰減地址
28
29 unsigned long data temp_r ; //頻率值預存
30 sfr AUXR = 0x8e;
31 bit int_flag=0; /*中斷標志位*/
32 sbit clflag=ACC^7;
33 unsigned char LCD_string[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'\0'}; //LCD顯示字符串變量
34 unsigned char LCD_step[]={0x00,'\0'};
35 unsigned char step_i=0; //ma步進值下標
36 unsigned char step[]={0x00,0x19,0x32,0x4B,0x64,0x7D,0x96,0xAF,0xC8,0xE1,0xFA}; //ma步進控制值
37 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管段碼
38 unsigned char freq[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //8位數碼管頻率值
39 unsigned char con_word[5]; //頻率控制字
40 unsigned char i,temp; //temp用于存放臨時命令狀態字
41 unsigned char key_value; //按鍵值
42 //-----------------------主要函數--------------------------
43 void IntToStr(void); //LCD顯示字符轉換
44 void longtoword(unsigned long num); //長整型轉頻率控制字
45 void write_ad9850(void); //控制字寫入ad9850
46 void write_ad98501(void);
47 unsigned long jisuan(unsigned char data *fno); //頻率值產生
48 unsigned char keyin(void); //按鍵函數
49 void setup_8279(void); //8279初始化
50 void display_led(void); //數碼管顯示
51 void delay(unsigned char i); //延時
52 //------------------頻率步進設置----------------------
53 void f10Mhz(void); //S1
54 void f1Mhz(void); //S2
C51 COMPILER V7.20 SHIBOQI 11/20/2007 14:15:22 PAGE 2
55 void f100Khz(void); //S3
56 void f10Khz(void); //S4
57 void f1Khz(void); //S5
58 void f100Hz(void); //S6
59 void f10Hz(void); //S7
60 void f1Hz(void); //S8
61 //-----------------------------------------------------
62 void carry_sin(void); //載波正弦波發生 S9
63 void mod_sin(void); //調制信號正弦波發生S10
64 void ma_step(void); //調制度10%步進
65 void mode(void);
66 unsigned char a,b,k;
67 //-------------------------主函數--------------------------------
68 void main(void)
69 {
70 1
71 1 Init_LCD();
72 1 Clear_Screen();
73 1 Write_Nopara_Command(0x98);
74 1 AUXR = 0x02; /*STC單片機關內部RAM和開ALE*/
75 1 EA=1;
76 1 EX0=1; //開外部中斷
77 1 IT0=1;
78 1 //-----------延時(必須加)-------------
79 1 for(a=0;a<5;a++)
80 1 {
81 2 for(b=0;b<50;b++)
82 2 {
83 3 for(k=0;k<50;k++);
84 3 }
85 2 }
86 1 //------------------------------------
87 1 setup_8279(); //初始化8279
88 1 delay(1000);
89 1 Display_hz(2,0,"信號發生器");
90 1 Display_String(12,0,"(Hz)");
91 1 Display_hz(0,1,"載波");
92 1 Display_String(4,1,":");
93 1 Display_hz(0,2,"調制波");
94 1 Display_String(6,2,":");
95 1 Display_hz(0,3,"調制度");
96 1 Display_String(6,3,":");
97 1 while(1)
98 1 {
99 2 mode();
100 2 }
101 1 }
102 //------數碼管顯示----------------
103 void display_led(void)
104 {
105 1 for(i=0;i<8;i++)
106 1 { com=0x80+i; //寫顯示RAM
107 2 dat=dispcode[freq[7-i]]; //顯示段碼
108 2 delay(120);
109 2 }
110 1 }
111 //-----8279初始化-----------------
112 void setup_8279(void)
113 {
114 1 com=0x00; //鍵盤,顯示方式
115 1 com=0x34; //20分頻
116 1 com=0xd1; //1101 0001b 清除所有顯示
C51 COMPILER V7.20 SHIBOQI 11/20/2007 14:15:22 PAGE 3
117 1 temp=com; //讀狀態字
118 1 do{ACC=com;}
119 1 while(clflag==1); //清除起來比較慢,所以一條指令執行的時間不足以完成所有清除,故需等待
120 1 }
121
122 //---------頻率值轉換控制字----------
123 void longtoword(unsigned long num)
124 {
125 1 con_word[0]=0x00; //置工作方式選擇位為00
126 1 con_word[4]=num&(0xff);
127 1 num=num>>8;
128 1 con_word[3]=num&(0xff);
129 1 num=num>>8;
130 1 con_word[2]=num&(0xff);
131 1 num=num>>8;
132 1 con_word[1]=num&(0xff);
133 1 }
134 /***計算控制字************/
135 /***入口:頻率數組指針***出口,控制字*****/
136 unsigned long jisuan(unsigned char data *fno)
137 {
138 1 unsigned long dds_no ;
139 1 dds_no=
140 1 (*(fno+7))*FF7+
141 1 (*(fno+6))*FF6+
142 1 (*(fno+5))*FF5+
143 1 (*(fno+4))*FF4+
144 1 (*(fno+3))*FF3+
145 1 (*(fno+2))*FF2+
146 1 (*(fno+1))*FF1+
147 1 (*fno)*FF0 ;
148 1 return(dds_no);
149 1 }
150 //---------------------進位判斷-------------------
151 unsigned char judge(unsigned char a)
152 {
153 1 unsigned char b=0;
154 1 if(a>=10)
155 1 {
156 2 b=0;
157 2 }
158 1 else
159 1 {
160 2 b=a;
161 2 }
162 1 return b;
163 1
164 1 }
165 //-------------------步進按鍵or模式選擇---------------
166 void mode(void)
167 {
168 1 if(int_flag==1)
169 1 {
170 2 int_flag=0;
171 2 switch(key_value)
172 2 {
173 3 case 0x40:f10Mhz();break;
174 3 case 0x41:f1Mhz();break;
175 3 case 0x42:f100Khz();break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -