?? ch14-1r.c
字號:
//接收機程序
#include <reg51.h>
#define XBYTE ((char *)0x20000L)
bit ask_flag=1,OK_flag=1; /* OK 指示燈狀態標志;等待連機成功時間標志;*/
sbit M7512_MOD2=0xb2;
sbit M7512_MOD1=0xb3;
sbit M7512_RS=0xb4;
sbit M7512_CD=0xb5;
sbit BELL=0x97;
sbit P_D=0xb7;
data unsigned char d_data,times,f_t;
code unsigned char disp_list[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};
void delay(void);
void delay_t(int j);
void f_test(void);
main()
{
P1=0xff;
P3=0x7f;
P_D=1;
TMOD=0x21; /* T0 為16位定時器,T1 波特率1200 */
TL0=0x01;TH0=0x00;
TL1=0xe8;TH1=0xe8;
SCON=0xd8;PCON=0x00;
ET0=1;
TR0=1; /* 啟動T0 */
TR1=1; /* 啟動T1 */
d_data=1;
P1=0xfe; /* disp_list[d_data]; */
BELL=1;
ES=1;
EA=1;
M7512_MOD1=0;
M7512_MOD2=0; /* M7512 為發送方式 */
while(1) /* 鍵盤掃描 */
{
if((BELL==0)&&(ask_flag==1))
{
delay_t(80);
while(BELL==1);
delay_t(10);
ask_flag=0;
P_D=0;
delay_t(10);
P1=0xf7;
times=0x90;
}
}
}
void f_test(void)
{
EA=0;
M7512_RS=0;
while(1)
{
SBUF=0x0f;
while(TI==0);
TI=0;
}
}
void series_int(void) interrupt 4 using 2
{
unsigned char data_temp;
if(TI==1)
{
TI=0;
M7512_RS=1;
M7512_MOD1=1;
M7512_MOD2=0;
P1=0xfd;
}
if (RI==1)
{
data_temp=SBUF;
RI=0;
switch(data_temp)
{
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
case 0x08:
case 0x09:
case 0x0a:
P1=disp_list[data_temp];
times=0xff;
break;
case 0xa5:
P_D=1;
M7512_MOD1=0;
M7512_MOD2=0;
ask_flag=1;
OK_flag=1;
P1=0xfe;
break;
}
}
}
void time_int(void) interrupt 1 using 3
{
TH0=0x00;
TL0=0x01;
TR0=1;
times--;
if((times==0x00)&&(ask_flag==0))
{
if(OK_flag==1)
{
M7512_MOD1=0;
M7512_MOD2=0;
M7512_RS=0;
delay();
delay_t(100);
SBUF=0xa5;
OK_flag=0;
}
else
{
P_D=1;
M7512_MOD1=0;
M7512_MOD2=0;
ask_flag=1;
OK_flag=1;
P1=0xfe;
}
}
}
void delay(void)
{
idata int i;
for(i=0;i<1000;i++)
{}
}
void delay_t(int j)
{
idata int i;
while(j>0)
{
for(i=0;i<1000;i++)
{}
j--;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -