📄 dig_func.lst
字号:
C51 COMPILER V8.02 DIG_FUNC 06/07/2008 19:32:59 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DIG_FUNC
OBJECT MODULE PLACED IN dig_func.OBJ
COMPILER INVOKED BY: C:\keil c51\C51\BIN\C51.EXE dig_func.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "c8051f020.h"
2 #include "lcd.h"
3 #include "digital_radio.h"
4 //#include "string.h"
5
6 #define T_3MS 0xf533 //定时器延时3ms(system clock=22118400/2,定时器12分频)
7 #define T_0_8MS 0xfd1f //定时器延时0.8ms(system clock=22118400/2,定时器12分频)
8 #define CONFIG_2614 0x8300
9
10 sbit CLK_2614 = P2^0;
11 sbit DATA_2614 = P2^1;
12 sbit EN_2614 = P2^2;
13
14 extern unsigned char code tble[10]={48,49,50,51,52,53,54,55,56,57};//0-9 ascii code
15
16 static bit Head_ok=0,Got=0; //head_ok=1:帧头正确,got=1:收齐四字节
17
18 static unsigned char val[4]=0;//四字节的红外键值
19
20
21 void Timer3_Init()
22 {
23 1 TMR3CN &=0xfb; //关定时器3
24 1 TMR3RL = T_3MS; //延时3ms
25 1 TMR3 = T_3MS;
26 1 }
27
28 unsigned char Wait_infrared()
29 {
30 1 unsigned char keyvalue;
31 1
32 1 while(!Got);
33 1 if(val[2]+val[3]==0xff)
34 1 keyvalue=val[2];
35 1 Got=0;
36 1
37 1 return(keyvalue);
38 1 }
39
40 /*即时输出并取出按键的实值*/
41 /* void Get_Letter(unsigned char x,unsigned char y,unsigned char *letter)
42 {
43 unsigned char m,ascii,temp;
44 unsigned char *let=letter;
45 for(m=0;m<7;m++) letter[m]=0;
46 clear1line(x);
47 LCD_Goto(x,y);
48 Delay1us(40);
49 for(m=0;m<5;m++)
50 {
51
52 temp=Wait_infrared();
53
54 ascii=tbel[temp];
55 if(temp==0x15)
C51 COMPILER V8.02 DIG_FUNC 06/07/2008 19:32:59 PAGE 2
56 {
57 clear1line(x);
58 let-=1;
59 *let='\0';
60 LCD_Printf(x, y,letter);
61 }
62 else if(temp==0x14)
63 {
64 *let='\0';
65 break;
66 }
67 else if(ascii!=0x21)
68 {
69 clear1line(x);
70 *let=ascii;
71 LCD_Printf(x, y,letter); //向LCD发送
72 let++;
73 }
74 }
75 } */
76
77 void One_float_Dis(unsigned char x,unsigned char y,float flt_data)
78 {
79 1 unsigned char dec_data,dec[3],dp_data,i,temp_dec;
80 1 temp_dec=dec_data=(unsigned char)flt_data;
81 1 for(i=0;i<3;i++)
82 1 {
83 2 dec[2-i]=dec_data%10;
84 2 dec_data=dec_data/10;
85 2 }
86 1 if(dec_data<100) i=1;
87 1 else i=0;
88 1 LCD_Goto(x,y);
89 1 for(;i<3;i++) LCD_WriteData(tble[dec[i]]);
90 1 Delay1us(40);
91 1 LCD_WriteData(0x2e);
92 1 dp_data=(unsigned char)((flt_data-temp_dec+0.01)*10);
93 1 LCD_WriteData(tble[dp_data]);
94 1 }
95
96 void clear1line(unsigned char j)
97 {
98 1 unsigned char i;
99 1 LCD_Goto(j,1);
100 1 for(i=0;i<16;i++) LCD_WriteData(0x20);
101 1 Delay1ms(1);
102 1 }
103
104 void Radio_Send(unsigned int num)
105 {
106 1 unsigned int conf=CONFIG_2614;
107 1 unsigned char i,j,d;
108 1 bit flag=0;
109 1 CLK_2614=EN_2614=1;
110 1 DATA_2614=1;
111 1 for(d=0;d<200;d++) conf=num;
112 1 for(j=0;j<2;j++)
113 1 {
114 2 for(i=0;i<32;i++)
115 2 {
116 3 CLK_2614=~CLK_2614;
117 3 if(flag==0)
C51 COMPILER V8.02 DIG_FUNC 06/07/2008 19:32:59 PAGE 3
118 3 {
119 4 DATA_2614=0x0001&conf;
120 4 conf=conf>>1;
121 4 }
122 3 for(d=0;d<200;d++);
123 3 flag=~flag;
124 3 }
125 2 conf=CONFIG_2614;
126 2 }
127 1 for(d=0;d<100;d++);
128 1 EN_2614=0;
129 1 for(d=0;d<200;d++) conf=CONFIG_2614;
130 1 }
131
132
133 void ex_interrupt() interrupt 19 //下降沿中断,收到低电平开始
134 {
135 1
136 1 if(!Head_ok)
137 1 {
138 2 EIE2&=0xdf;//关中断7
139 2 P3IF&=0x7f;//清中断7的中断标志
140 2 Timer3_Init();//定时器3初始化
141 2 TMR3CN|=0x04; //开定时器3
142 2 }
143 1 else
144 1 {
145 2 while(P37==0&&TMR3CN<0x80); //等待变高
146 2 if(TMR3CN<0x80)
147 2 {
148 3 P3IF&=0x7f;//清中断7的中断标志
149 3 TMR3 = T_0_8MS;//延时0.8ms
150 3 TMR3CN|=0x04; //开定时器3
151 3 }
152 2 }
153 1 }
154
155 void T3_inter() interrupt 14
156 {
157 1 static unsigned char i=0,n=0;
158 1 static bit h=0;
159 1 unsigned int v;
160 1 TMR3CN&=0x7f; //清中断标志
161 1
162 1 if(Head_ok==0&&h==0&&P37==0) h=1; //开始后第一个3ms处应为低
163 1 else if(Head_ok==0&&h==1&&P37==1) // 开始后第二个3ms处应为高
164 1 {
165 2 EIE2|=0x20; //开中断7
166 2 TMR3CN&=0xfb; //关定时器3
167 2 h=0;Head_ok=1;return;
168 2 }
169 1 else if(Head_ok)
170 1 {
171 2 TMR3CN&=0xfb; //关定时器3
172 2 n=i++/8;
173 2 if(P37) //每0.8ms读一次数据
174 2 {
175 3 val[n]=val[n]>>1;
176 3 val[n]|=0x80;
177 3 }
178 2 else
179 2 val[n]=val[n]>>1;
C51 COMPILER V8.02 DIG_FUNC 06/07/2008 19:32:59 PAGE 4
180 2 // n=++i/8;
181 2 if(i==32)
182 2 {
183 3 i=0;n=0;Head_ok=0;
184 3 EIE2&=0xdf;//关中断7
185 3 for(v=0;v<60000;v++); //避开重复码
186 3 EIE2|=0x20; //开中断7
187 3 Got=1;
188 3 }
189 2 }
190 1 else //还原为最原始状态
191 1 {
192 2 EIE2|=0x20;//开中断7
193 2 Timer3_Init();
194 2 h=0;Got=0;Head_ok=0;
195 2 }
196 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 571 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 12
IDATA SIZE = ---- ----
BIT SIZE = 3 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -