?? send.c
字號:
// 遙控發射器
//使用AT89C52單片機,12MHZ晶振,
//
//#pragma src(E:\remote.asm)
#include "reg51.h"
#include "intrins.h" //_nop_();延時函數用
//
#define char unsigned char
#define int unsigned int
#define key0 P0 //鍵列線
#define key1 P1 //鍵行線
//
sbit remoteout=P3^5; // 遙控輸出口
//
//
int i,j,m,n,k,s;
char keyvol; //鍵值存放
char code keyv[8]={1,2,4,8,16,32,64,128};
//
////
/*********1毫秒延時程序**********/
delay1ms(int t)
{
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
//
//
/***********初始化函數**********/
clearmen()
{
remoteout=0; //關遙控輸出
IE=0x00;
IP=0x01;
TMOD=0x22; //8位自動重裝模式
TH1=0xf3; //40KHZ初值
TL1=0xf3;
EA=1; //開總中斷
}
//
//
//
/**********發射函數************/
sed()
{
ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;remoteout=0;//40KHZ發3毫秒
for(m=keyvol;m>0;m--)
{
delay1ms(1); //停1毫秒
ET1=1;TR1=1;delay1ms(1);ET1=0;TR1=0;remoteout=0;//40KHZ發1毫秒
}
delay1ms(10);
}
//
tx()
{
switch(keyvol)
{
case 0:keyvol=keyvol+1;sed();break;
case 1:keyvol=keyvol+1;sed();break;
case 2:keyvol=keyvol+1;sed();break;
case 3:keyvol=keyvol+1;sed();break;
case 4:keyvol=keyvol+1;sed();break;
case 5:keyvol=keyvol+1;sed();break;
case 6:keyvol=keyvol+1;sed();break;
case 7:keyvol=keyvol+1;sed();break;
case 8:keyvol=keyvol+1;sed();break;
case 9:keyvol=keyvol+1;sed();break;
case 10:keyvol=keyvol+1;sed();break;
case 11:keyvol=keyvol+1;sed();break;
case 12:keyvol=keyvol+1;sed();break;
case 13:keyvol=keyvol+1;sed();break;
case 14:keyvol=keyvol+1;sed();break;
case 15:keyvol=keyvol+1;sed();break;
default:break;
}
}
//
//
/**********鍵功能函數************/
keywork()
{
keyvol=0x00;key1=0xf0;if(key0!=0xff)
{delay1ms(20);if(key0!=0xff)
{while(key0!=0xff);
key1=0xfe;if(key0!=0xff){for(i=0;i<8;i++){if(~key0==keyv[i]){keyvol=i;tx();}} }
else{key1=0xfd;if(key0!=0xff){for(i=0;i<8;i++){if(~key0==keyv[i]){keyvol=i+8;tx();}} }}
// key1=0xfb;if(key0!=0xff){for(i=0;i<8;i++){if(~key0==keyv[i]){keyvol=i+16;tx();}} }
// key1=0xf7;if(key0!=0xff){for(i=0;i<8;i++){if(~key0==keyv[i]){keyvol=i+24;tx();}} }
}
}
}
//
//
/***********主函數***************/
main()
{
clearmen(); //初始化
while(1)
{
keywork(); //按鍵掃描
}
}
//
//
/*********40KHZ發生器***********/
//定時中斷T1
void time_intt1(void) interrupt 3
{
remoteout=~remoteout;
}
//
//
//*********************結束**************************//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -