📄 ad9835_v2.lst
字号:
C51 COMPILER V7.50 AD9835_V2 04/15/2008 17:47:52 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE AD9835_V2
OBJECT MODULE PLACED IN AD9835_v2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD9835_v2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //F=12MHz with LCD1602
2 //2008/4/13 AD9835 on AT89C51
3
4 #include <reg51.H>
5 #include <stdio.h>
6 #include <INTRINS.H>//_nop_()
7
8 typedef unsigned char uchar;
9 typedef unsigned int uint;
10
11 //键排列
12 // 7 8 9 C
13 // 4 5 6 D
14 // 1 2 3 E
15 // A 0 B F
16
17 //LCD 1602
18 sbit LCD_D7=P2^7;
19 sbit LCD_D6=P2^6;
20 sbit LCD_D5=P2^5;
21 sbit LCD_D4=P2^4;
22 sbit LCD_E =P2^3;
23 sbit LCD_RW=P2^2;
24 sbit LCD_RS=P2^1;
25
26 //I/O
27 sbit BEP=P2^0;//Beep
28 sbit LED=P3^2;//RED LED
29 //AD9835
30 sbit DAT=P3^0;//
31 sbit CLK=P3^1;//
32 sbit SYC=P3^3;//
33
34 //FREQ
35 sbit FRQ=P3^5;//T1 check
36 #define No_key 255
37
38 //键值
39 #define MHz 12 //MHz
40 #define KHz 13 //KHz
41 #define Hzz 14 //Hz
42 #define point 15//小数点
43 #define shift 11//不用
44 #define back 10 //改正
45
46 uchar freq[8]={0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00};//8位频率数800.0Hz
47 uchar F_word[4];
48
49 uchar step=8,cur=7,act=0,key=No_key;//act有效位
50 uchar buf[9];//输入缓存
51
52 /*------------------------------------------------------------------
53 Public function prototypes
54 --------------------------------------------------------------------*/
55 void LCD_init (void);
C51 COMPILER V7.50 AD9835_V2 04/15/2008 17:47:52 PAGE 2
56 void LCD_en_write (void);
57 void LCD_write_char (uchar cd,uchar ab);
58 void LCD_set_xy (uchar x, uchar y);
59 void LCD_write_str (uchar X,uchar Y,uchar *s);
60 void LCD_byte (uchar abc);
61
62 void delay_nus (uint n);
63 void del_ms (uint n);
64
65 uchar Key_scan (void);
66 void Key_num (uchar n); //输入数字并显示
67 uchar Key_table (k);
68 void bee(); //低有效蜂鸣
69 void Long_bee (void); //低有效蜂鸣长声
70
71 void AD9835_byte (uchar a); //发一个字节
72 void AD9835_word (uchar *p); //发一个字两个字节
73 void AD9835_init (void); //初始化和写频
74 void AD9835_calc (void); //计算出频率寄存器的四个字节值
75 void disp(void); //显示
76
77 //------------------------------------
78 void LCD_init(void) //液晶初始化
79 {
80 1 P1=0xFF;
81 1 P3=0xff; //输出
82 1 LCD_RS=0; //
83 1 del_ms(50);
84 1
85 1 LCD_write_char(0x30,0);
86 1 del_ms(6);
87 1 LCD_write_char(0x30,0); //
88 1 del_ms(1);
89 1 LCD_write_char(0x30,0); //上电即显示正常,无需复位
90 1 del_ms(1);
91 1 LCD_write_char(0x02,0);
92 1 del_ms(1);
93 1 LCD_write_char(0x28,0); //4bit test显示模式设置(不检测忙信号)
94 1 del_ms(1);
95 1 LCD_write_char(0x08,0); // 显示关闭
96 1 del_ms(1);
97 1 LCD_write_char(0x01,0); // 显示清屏
98 1 del_ms(1);
99 1 LCD_write_char(0x06,0); // 显示光标移动设置
100 1 del_ms(1);
101 1 LCD_write_char(0x0C,0); // 显示开及光标设置
102 1 del_ms(10);
103 1 }
104 //---------------------------------------------
105 void LCD_write_str(uchar X,uchar Y,uchar *s)
106 {
107 1 LCD_set_xy( X, Y ); //写地址
108 1 while (*s) // 写显示字符
109 1 {
110 2 LCD_write_char( 0, *s );
111 2 s ++;
112 2 }
113 1 }
114 void LCD_set_xy( uchar x, uchar y ) //写地址函数
115 {
116 1 uchar address;
117 1 if (y == 0) address = 0x80 + x;
C51 COMPILER V7.50 AD9835_V2 04/15/2008 17:47:52 PAGE 3
118 1 else
119 1 address = 0xc0 + x;
120 1 LCD_write_char( address, 0 );
121 1 }
122 //------------------------------------------------
123 void LCD_en_write(void) //液晶使能
124 {
125 1 _nop_();
126 1 LCD_E=1;//EN=1
127 1 _nop_();
128 1 LCD_E=0;//EN=0
129 1 }
130 //------------------------------------------------
131 void LCD_write_char(uchar cd,uchar ab) // 写数据
132 {
133 1 delay_nus(20);
134 1 if(cd==0)
135 1 {
136 2 LCD_RS=1; //RS=1,写显示内容
137 2 LCD_byte(ab);
138 2 }
139 1 else
140 1 {
141 2 LCD_RS=0; //RS=0,写命令
142 2 LCD_byte(cd);
143 2 }
144 1 }
145 //-----------------------------------------------
146 void LCD_byte(uchar abc)//
147 {
148 1 delay_nus(50);
149 1 if(((abc<<0)&0x80)==0) //MSB is output first
150 1 LCD_D7=0; //abc=0
151 1 else LCD_D7=1; //abc=1
152 1 if(((abc<<1)&0x80)==0) //MSB is output first
153 1 LCD_D6=0; //abc=0
154 1 else LCD_D6=1; //abc=1
155 1 if(((abc<<2)&0x80)==0) //MSB is output first
156 1 LCD_D5=0; //abc=0
157 1 else LCD_D5=1; //abc=1
158 1 if(((abc<<3)&0x80)==0) //MSB is output first
159 1 LCD_D4=0; //abc=0
160 1 else LCD_D4=1; //abc=1
161 1 LCD_en_write();
162 1
163 1 if(((abc<<4)&0x80)==0) //MSB is output first
164 1 LCD_D7=0; //abc=0
165 1 else LCD_D7=1; //abc=1
166 1 if(((abc<<5)&0x80)==0) //MSB is output first
167 1 LCD_D6=0; //abc=0
168 1 else LCD_D6=1; //abc=1
169 1 if(((abc<<6)&0x80)==0) //MSB is output first
170 1 LCD_D5=0; //abc=0
171 1 else LCD_D5=1; //abc=1
172 1 if(((abc<<7)&0x80)==0) //MSB is output first
173 1 LCD_D4=0; //abc=0
174 1 else LCD_D4=1; //abc=1
175 1 LCD_en_write();
176 1
177 1 }
178
179 //-------------------------------------
C51 COMPILER V7.50 AD9835_V2 04/15/2008 17:47:52 PAGE 4
180 uchar Key_table(k)
181 {
182 1 uchar TempNum;
183 1 switch (k)
184 1 {
185 2 case 0x11:TempNum=12;break;
186 2 case 0x12:TempNum=13;break;
187 2 case 0x14:TempNum=14;break;
188 2 case 0x18:TempNum=15;break;
189 2 case 0x88:TempNum=10;break;
190 2 case 0x28:TempNum=11;break;
191 2 case 0x48:TempNum=0;break;
192 2 case 0x84:TempNum=1;break;
193 2 case 0x44:TempNum=2;break;
194 2 case 0x24:TempNum=3;break;
195 2 case 0x82:TempNum=4;break;
196 2 case 0x42:TempNum=5;break;
197 2 case 0x22:TempNum=6;break;
198 2 case 0x81:TempNum=7;break;
199 2 case 0x41:TempNum=8;break;
200 2 case 0x21:TempNum=9;break;
201 2 default:break;
202 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -