本帖最后由 zx_85 于 2012-8-6 22:09 编辑  
 
我是做射频的,从来没有写过单片机,第一次写的单片机程序。 
 
原理图是315M发射电路,类似PT2262,但和PT2262的发射时序不同。原理图上面有详细说明。 
 
C程序的按键扫描没有加消抖,麻烦指导一下。 
 
程序写的很傻瓜很傻瓜,希望大侠不要笑话我。 
 
原理图: 
 
 
 
 
 
 
 
 
 
以下为C程序: 
 
#include<stdio.h> 
#include<reg51.h> 
 
#define uchar unsigned char 
#define uint unsigned int 
 
sbit TX_STATUS=P1^0;//定义P1.0口为发射状态指示 
sbit PA_CNTL=P1^1;//定义P1.1口为功放电源控制信号 
sbit data_out=P1^2;//定义P1.2口为数据输出 
 
//初始化程序 
void init() 
{ 
        TX_STATUS=0;//初始化,灭发射状态指示灯 
        PA_CNTL=0;//初始化,关功放电源使能 
        data_out=0;//初始化,关数据输出 
}  
//初始化程序 
 
 
//延时程序 
void delayms(uint x) 
{ 
        uchar i; 
        while(x--) 
        { 
                for(i=0;i<120;i++); 
        } 
} 
//延时程序 
 
 
//功放电源开启 
void PA_POWER_ON() 
{ 
        PA_CNTL=1;//开功放电源 
} 
//功放电源开启 
 
 
 
//功放电源关闭 
void PA_POWER_OFF() 
{ 
        PA_CNTL=0;//关功放电源 
} 
//功放电源关闭 
 
 
 
//发射状态指示程序 
void TX_LED() 
{ 
        TX_STATUS=1;//点亮发射指示灯 
        delayms(150);//延时150ms 
        TX_STATUS=0;//灭发射指示灯 
} 
//发射状态指示程序 
 
 
 
//产生1010        000000        0波形 
void wave01() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
 
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
 
 
 
//产生1010        000001        1波形 
void wave02() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
 
        data_out=1; 
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        000010        1波形 
void wave03() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        data_out=1; 
        delayms(150);//第9位 
 
        data_out=0; 
        delayms(150);//第10位 
 
        data_out=1; 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        000011        0波形 
void wave04() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        data_out=1; 
        delayms(150);//第9位 
 
        delayms(150);//第10位 
 
        data_out=0; 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        000100        1波形 
void wave05() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        data_out=1; 
        delayms(150);//第8位 
 
        data_out=0; 
        delayms(150);//第9位 
 
        delayms(150);//第10位 
 
        data_out=1; 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        000101        0波形 
void wave06() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        data_out=1; 
        delayms(150);//第8位 
 
        data_out=0; 
        delayms(150);//第9位 
         
        data_out=1; 
        delayms(150);//第10位 
 
        data_out=0; 
        delayms(150);//第11位 
} 
 
 
 
 
//产生1010        000110        0波形 
void wave07() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        data_out=1; 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        data_out=0; 
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
//产生1010        000111        1波形 
void wave08() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        delayms(150);//第7位 
 
        data_out=1; 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        001000        1波形 
void wave09() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        data_out=0; 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        delayms(150);//第10位 
 
        data_out=1; 
        delayms(150);//第11位 
} 
 
 
//产生1010        001001        0波形 
void wave10() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        data_out=0; 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        data_out=1; 
        delayms(150);//第10位 
 
        data_out=0; 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        001010        0波形 
void wave11() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        data_out=0; 
        delayms(150);//第8位 
 
        data_out=1; 
        delayms(150);//第9位 
         
        data_out=0; 
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
//产生1010        001011        1波形 
void wave12() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        data_out=0; 
        delayms(150);//第8位 
 
        data_out=1; 
        delayms(150);//第9位 
         
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        001100        0波形 
void wave13() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        data_out=0; 
        delayms(150);//第9位 
         
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
//产生1010        001101        1波形 
void wave14() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        data_out=0; 
        delayms(150);//第9位 
         
        data_out=1; 
        delayms(150);//第10位 
 
        delayms(150);//第11位 
} 
 
 
//产生1010        001110        1波形 
void wave15() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        data_out=0; 
        delayms(150);//第10位 
 
        data_out=1; 
        delayms(150);//第11位 
} 
 
 
 
//产生1010        001111        0波形 
void wave16() 
{ 
        data_out=1; 
        delayms(150);//第1位 
 
        data_out=0; 
        delayms(150);//第2位 
 
        data_out=1; 
        delayms(150);//第3位 
 
        data_out=0; 
        delayms(150);//第4位 
 
        delayms(150);//第5位 
 
        delayms(150);//第6位 
 
        data_out=1; 
        delayms(150);//第7位 
 
        delayms(150);//第8位 
 
        delayms(150);//第9位 
         
        delayms(150);//第10位 
 
        data_out=0; 
        delayms(150);//第11位 
} 
 
 
void key_scan() 
{ 
                uchar x,y,z; 
        P2=0x0f; 
        x=P2&0x0f; 
        P2=0xf0; 
        y=P2&0xf0; 
        z=x|y; 
         
        switch(z) 
        { 
        case 0xee A_POWER_ON();wave01() A_POWER_OFF();TX_LED();break;//按键01,输出波形01 
        case 0xde A_POWER_ON();wave02() A_POWER_OFF();TX_LED();break;//按键02,输出波形02 
        case 0xbe A_POWER_ON();wave03() A_POWER_OFF();TX_LED();break;//按键03,输出波形03 
        case 0x7e A_POWER_ON();wave04() A_POWER_OFF();TX_LED();break;//按键04,输出波形04 
        case 0xed A_POWER_ON();wave05() A_POWER_OFF();TX_LED();break;//按键05,输出波形05 
        case 0xdd A_POWER_ON();wave06() A_POWER_OFF();TX_LED();break;//按键06,输出波形06 
        case 0xbd A_POWER_ON();wave07() A_POWER_OFF();TX_LED();break;//按键07,输出波形07 
        case 0x7d A_POWER_ON();wave08() A_POWER_OFF();TX_LED();break;//按键08,输出波形08 
        case 0xeb A_POWER_ON();wave09() A_POWER_OFF();TX_LED();break;//按键09,输出波形09 
        case 0xdb A_POWER_ON();wave10() A_POWER_OFF();TX_LED();break;//按键10,输出波形10 
        case 0xbb:PA_POWER_ON();wave11();PA_POWER_OFF();TX_LED();break;//按键11,输出波形11 
        case 0x7b:PA_POWER_ON();wave12();PA_POWER_OFF();TX_LED();break;//按键12,输出波形12 
        case 0xe7:PA_POWER_ON();wave13();PA_POWER_OFF();TX_LED();break;//按键13,输出波形13 
        case 0xd7:PA_POWER_ON();wave14();PA_POWER_OFF();TX_LED();break;//按键14,输出波形14 
        case 0xb7:PA_POWER_ON();wave15();PA_POWER_OFF();TX_LED();break;//按键15,输出波形15 
        case 0x77:PA_POWER_ON();wave16();PA_POWER_OFF();TX_LED();break;//按键16,输出波形16 
        default:; 
        } 
}                 
         
         
         
 
void main() 
{        init();//上电初始化 
        key_scan(); 
} 
 
详情见附件: 
 
 
 
 
 
 
 
 
 |