📄 keyint.lst
字号:
C51 COMPILER V7.50 KEYINT 08/15/2007 19:26:19 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEYINT
OBJECT MODULE PLACED IN KeyInt.OBJ
COMPILER INVOKED BY: D:\软件\单片机\keil c51\keil 软件\C51\BIN\C51.EXE KeyInt.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "hardware.h"
3 #include "LCD1602.h"
4
5 extern bit cur_signal;
6 extern unsigned int data freq;
7
8 /* 方波占空比 */
9 extern unsigned char data time_high, time_low;
10
11 /* 与方波频率相关 */
12 extern unsigned char data rect_high_TH0;
13 extern unsigned char data rect_high_TL0;
14 extern unsigned char data rect_low_TH0;
15 extern unsigned char data rect_low_TL0;
16
17 /* 正弦频率相关 */
18 extern unsigned char data sin_TH0;
19 extern unsigned char data sin_TL0;
20
21 /* 与幅度相关 */
22 extern unsigned char data range_low, range_high;
23 extern float data proportion; /* 幅度与DAC量程之比 */
24 extern unsigned char data range_low_data; /* 幅值下界对应的DAC的数字量 */
25
26
27
28
29 extern void mdelay(unsigned int msec);
30 void enable_timer1()
31 {
32 1 TMOD = 0X10; /* 方式1, 定时器1 */
33 1 ET1 = 1;
34 1 PT1 = 1;
35 1 EA = 1;
36 1 TR1 = 1;
37 1 }
38
39
40
41 void key_scan_ISR() interrupt 3 using 0
42 {
43 1 unsigned int count;
44 1 unsigned char dec_bit;
45 1 bit update_rect = 0x21;
46 1 bit update_sin_freq = 0x22;
47 1
48 1 KEYPORT = 0Xff;
49 1 if (KEYPORT == 0xff) goto out;
50 1 mdelay(10);
51 1 if (KEYPORT == 0xff) goto out;
52 1
53 1 if((KEYPORT & 0xf) != 0xf)
54 1 update_rect = update_sin_freq = 1;
55 1 else
C51 COMPILER V7.50 KEYINT 08/15/2007 19:26:19 PAGE 2
56 1 update_rect = update_sin_freq = 0;
57 1
58 1 if((KEYPORT & 0x8) == 0) { //频率 千位调节
59 2 freq += 1000;
60 2 if (freq > 4000) freq -= 4000;
61 2 dec_bit = (freq / 1000)+0x30;
62 2 LCD_write_data(0, 0xa, dec_bit);
63 2 } else if ((KEYPORT & 0x4) == 0) { //百位
64 2 freq += 100;
65 2 if ((freq % 1000) < 100)
66 2 freq = freq - 1000;
67 2 dec_bit = ((freq / 100) % 10) + 0x30;
68 2 LCD_write_data(0, 0xb, dec_bit);
69 2 } else if ((KEYPORT & 0x2) == 0) { //十位
70 2 freq += 10;
71 2 if ((freq % 100 )< 10)
72 2 freq = freq - 100;
73 2 dec_bit = ((freq / 10) % 10) + 0x30;
74 2 LCD_write_data(0, 0xc, dec_bit);
75 2 } else if ( (KEYPORT & 0x1) == 0) { //个位
76 2 freq++;
77 2 if ((freq % 10) == 0)
78 2 freq -= 10;
79 2 dec_bit = freq % 10 + 0x30;
80 2 LCD_write_data(0, 0xd, dec_bit);
81 2 }
82 1
83 1 else if ( (KEYPORT & 0x20) == 0) { //方波占空比 和正弦幅度设置
84 2 if (cur_signal == SIG_RECT) { //若当前为方波,调节占空比
85 3 time_high++;
86 3 if (time_high > 9)
87 3 time_high = 1;
88 3 LCD_write_data(0, 4, time_high + 0x30);
89 3 LCD_write_data(0, 5, 'H');
90 3 update_rect = 1;
91 3 } else { // 若为正弦, 则调节幅度
92 3 range_high += 10;
93 3 if (range_high <= range_low )
94 3 range_high = range_low + 10;
95 3 proportion = (float)(range_high - range_low) / 0xff;
96 3 ///////////////////////////////out put
97 3
98 3 dec_bit = range_high / 50 + 0x30;//将256个阶分为25份,每份10, 对于Vref为5V的情况,10近似地代表0.2V
99 3 //50近似代表1V, 所以这里的dec_bit表示幅度的整数部分
100 3 LCD_write_data(0, 6, dec_bit);
101 3 dec_bit = (range_high / 5) % 10 + 0x30;// range_low /5 表示0。1V的个数, %10 取个位数
102 3 LCD_write_data(0, 8, dec_bit);
103 3 }
104 2 } else if (((KEYPORT & 0x10) == 0)) {
105 2 if (cur_signal == SIG_RECT) {
106 3 time_low++;
107 3 if (time_low > 9)
108 3 time_low = 1;
109 3 LCD_write_data(0, 6, time_low + 0x30);
110 3 LCD_write_data(0, 7, 'L');
111 3 update_rect = 1;
112 3 } else {
113 3 range_low += 10;
114 3 if (range_low >= range_high)
115 3 range_low = 0;
116 3 proportion = (float)(range_high - range_low) / 0xff;
117 3 //range_low_data = range_low / ((float)Vref / 256);
C51 COMPILER V7.50 KEYINT 08/15/2007 19:26:19 PAGE 3
118 3 dec_bit = range_low / 50 + 0x30;//将256个阶分为25份,每份10, 对于Vref为5V的情况,10近似地代表0.2V
119 3 //50近似代表1V, 所以这里的dec_bit表示幅度的整数部分
120 3 LCD_write_data(0, 2, dec_bit);
121 3 dec_bit = (range_low / 5) % 10 + 0x30;// range_low /5 表示0。1V的个数, %10 取个位数
122 3 LCD_write_data(0, 4, dec_bit);
123 3 }
124 2 }
125 1 else if ((KEYPORT & 0x40) == 0) {
126 2 cur_signal = SIG_RECT;
127 2 } else if ((KEYPORT & 0x80) == 0) {
128 2 cur_signal = SIG_SIN;
129 2
130 2 }
131 1 if (update_rect) {
132 2 count = (HZ * time_high) / (freq * 12 * (time_high + time_low)) * 1000000;
133 2 rect_high_TL0 = (unsigned char) count;
134 2 rect_high_TH0 = count >> 8;
135 2
136 2 count = (HZ * time_low) / (freq * 12 * (time_high + time_low)) * 1000000;
137 2 rect_low_TL0 = (unsigned char) count;
138 2 rect_low_TH0 = count >> 8;
139 2 }
140 1 if (update_sin_freq) {
141 2 count = (HZ / (12 * 256 * freq)) * 1000000;
142 2
143 2 sin_TL0 = (unsigned char) count;
144 2 sin_TH0 = count >> 8;
145 2 }
146 1 while(KEYPORT != 0xff);//等待按键松开
147 1 out:
148 1 TH1 = 0x3c;
149 1 TL1 = 0xb0;
150 1 return ;
151 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 911 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -