📄 51.lst
字号:
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 51
OBJECT MODULE PLACED IN 51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 51.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"intrins.h"
2 #include"AT89X51.H"
3
4
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9
10 #define LCD_RS P2_7
11 #define LCD_RW P2_6
12 #define LCD_EN P2_5
13 #define LCD_DATA P0
14 #define bflag P0_7
15
16 /*函数原型*/
17 void init(void); /*初始化硬件*/
18 void LCD_init(void); /*初始化LCD*/
19 void LCD_cmd(uchar cmd); /*写入控制命令*/
20 void delay(uint dly);
21 void setxy(char x,char y);
22 void LCD_string(char *s);
23 void LCD_char(char chr);/*写入要显示的字符*/
24 void wait_until_ready(void); /*检测忙标志,忙则等待*/
25 uchar freqH;
26 uchar freqL;
27 /*4行4列的按键编码*/
28 uchar list[4][4]={
29 0x00,0x01,0x02,0x03,
30 0x04,0x05,0x06,0x07,
31 0x08,0x09,0x0a,0x0b,
32 0x0c,0x0d,0x0e,0x0f
33 };
34 /* 0 1 2 3
35 4 5 6 7
36 8 9 A B
37 C D E F
38 */
39
40 //A确认键
41 //B启动频率输出键
42 //C停止频率输出健
43 //D频率步进增加键
44 //E频率步进减少键
45
46
47
48 /*初始化硬件*/
49 void init(void)
50 {
51 1 IE=0x88; //10001000b允许TIMER1中断
52 1 IP=0x08; //00001000b定义定时器为高优先级中断
53 1 TMOD=0x10; //定时器1采用方式1
54 1 TH1=0xfe; //初始化输出频率1kHz
55 1 TL1=0x0c;
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 2
56 1 freqH=0xfe;
57 1 freqL=0x16;
58 1
59 1 }
60
61 void LCD_init(void)
62 {
63 1 LCD_cmd(0x38);/*8位数据,2行显示*/
64 1 LCD_cmd(0x08);/*显示关闭*/
65 1 LCD_cmd(0x06);/*写入数据后光标右移*/
66 1 LCD_cmd(0x0f);/*显示开,显示光标,光标闪烁*/
67 1 LCD_cmd(0x01);/*清屏*/
68 1 setxy(1,1);
69 1 LCD_string("Press b to start");
70 1
71 1 }
72
73
74 void LCD_cmd(uchar cmd)
75 {
76 1
77 1 LCD_RS=0;
78 1 LCD_RW=0;
79 1 LCD_DATA=cmd;
80 1 LCD_EN=1;
81 1 delay(20);
82 1 LCD_EN=0;
83 1 wait_until_ready();
84 1 }
85
86 void LCD_char(char chr)/*写入要显示的字符*/
87 { LCD_RS=1;
88 1 LCD_RW=0;
89 1 LCD_DATA=chr;
90 1 LCD_EN=1;
91 1 delay(20);
92 1 LCD_EN=0;
93 1 wait_until_ready();
94 1 }
95 void wait_until_ready(void) /*检测忙标志,忙则等待*/
96 {
97 1 LCD_RS=0;
98 1 LCD_RW=1;
99 1 LCD_DATA=0x0ff;
100 1 LCD_EN=1;
101 1 delay(20);
102 1 do{ACC=LCD_DATA;}
103 1 while(bflag==1);
104 1 LCD_EN=0;
105 1 }
106
107 /*设定显示位置,行x=1或2,列y=1~16的任意整数*/
108 void setxy(char x,char y)
109 {
110 1 char temp;
111 1 if(x==1)
112 1 {
113 2 temp=0x80+y-1;
114 2 LCD_cmd(temp);
115 2 }
116 1 else
117 1 {
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 3
118 2 temp=0xC0+y-1;
119 2 LCD_cmd(temp);
120 2 }
121 1 }
122
123 void LCD_string(char *s)
124 {
125 1 for(;*s!='\0';s++)
126 1 LCD_char(*s);
127 1 }
128
129 /*延时*/
130 void delay(uint dly)
131 { uint j;
132 1 for(j=0;j<dly;j++);
133 1 }
134
135
136 void main(void)
137 {uint i1;
138 1 uint i2;
139 1 uint i=0;
140 1 uint j;
141 1 uint start=0;
142 1 uchar Key;
143 1 uchar Keycode[2]={0,1};
144 1 uchar Keydata;
145 1 uchar temp1;
146 1 uint Tinit;
147 1 float freq=1;
148 1 init();
149 1 LCD_init();
150 1 while(1)
151 1 {
152 2 P3_3=0;
153 2 P3_2=0;
154 2 P3_1=0;
155 2 P3_0=0;
156 2
157 2 if(P3_4==0||P3_5==0||P3_6==0||P3_7==0) //初次判断有键
158 2 delay(1000);
159 2 else
160 2 continue;
161 2 P3_3=0;
162 2 P3_2=0;
163 2 P3_1=0;
164 2 P3_0=0;
165 2
166 2 if(P3_4==0||P3_5==0||P3_6==0||P3_7==0) //第二次判断有键
167 2 {
168 3 delay(1000);
169 3 if(P3_4==0)
170 3 i1=0;
171 3 else if(P3_5==0)
172 3 i1=1;
173 3 else if(P3_6==0)
174 3 i1=2;
175 3 else if(P3_7==0)
176 3 i1=3;
177 3
178 3 }
179 2 else
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 4
180 2 continue;
181 2
182 2 P3_3=0;
183 2 P3_2=0;
184 2 P3_1=0;
185 2 P3_0=0;
186 2 if(P3==0xe0||P3==0xd0||P3==0xb0||P3==0x70)
187 2 {
188 3 delay(1000);
189 3 if(P3_4==0)
190 3 i2=0;
191 3 else if(P3_5==0)
192 3 i2=1;
193 3 else if(P3_6==0)
194 3 i2=2;
195 3 else if(P3_7==0)
196 3 i2=3;
197 3
198 3 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -