切换到宽版
  • 5450阅读
  • 6回复

单片机模拟PT2262发码的C程序 [复制链接]

上一主题 下一主题
离线fxhfxh
 

发帖
101
M币
26
专家
2
粉丝
9
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2012-08-07
因为需要,搞了一个单片机模拟2262发码的小程序,实际使用还行,贴上来,供需要的朋友品头评足多提建设性意见,以便进一步改进和完善。

/*****************PIC12F629单片机程序*****************************/
/**************************************************************/
/*****File  Function : 模拟2262发码                           *****/
/*****MCU            : PIC12F629  内部4M晶振             *****/
/*****Compile Date   :  2012/08/03                        *****/
/*****Edition Info   :  V0.0                              *****/
//*************************************************************/
/*************************************************************/
#include <pic.h>
#define uchar unsigned char
#define uint unsigned int

void delay5ms(void);
void delay200us(void);
void delayms(uint count);
void delay0d5s(void);

void PortInit(void);
//-----------------------------------------------------------------------------------------------
void p2262_0(void);
void p2262_1(void);
void p2262_f(void);
void fs_2262(uint add,uchar dat);

#define       p2262   GPIO4   //3脚,接5.6K到433发射模块,同时接4.7K电阻到发光2极管正极,发光管负极到地20120805
//#define     led     GPIO5     //2脚 4.7k,负极到地

#define                _asm{"nop"}        NOP()
#define                _asm{"clrwdt"}        CLRWDT()
#define                _asm{"sleep"}        SLEEP()
//__CONFIG(HS&PROTECT&WDTEIS);    //采用内部RC振荡器,看门狗关闭
//=============================================================
//=============================================================
void PortInit(void)
{
        TRISIO=0b00000000;   //设置GP4,GP5为输出
//        CMCON=0b00000000;
        WPU =0b11111111;         //使能口上拉电阻
        OPTION_REG=0b00001111;    //后3位调整睡眠时间
}
//=============================================================
//=============================================================
void main(void){        
        uint k,j;        
        uchar i;

        PortInit();
        p2262=0;
        while(1){
//  for(i=0;i<2;i++)delay0d5s();
//         CLRWDT();
//  delay0d5s();
//        led=0;      //发光管亮        
          //for(k=0;k<16;k++){
        fs_2262(0xaaaa,15);    //  
          //for(j=0;j<35535;j++)
          //;
      //}
//        led=1;        //发光管熄灭
   SLEEP();
   NOP();
        }
}
//============================================================
void delayms(uint count){
uint i;
for(i=count;i>0;i--){
NOP();
CLRWDT();                                                          //315只用这一句
NOP();NOP();NOP();NOP();NOP();NOP();  //315也可用这一句,433也可用此句
NOP();NOP();NOP();NOP();NOP();NOP();  //433要用此句
NOP();NOP();NOP();NOP();NOP();NOP();  //433要用此句
NOP();NOP();NOP();NOP();NOP();NOP();  //433要用此句
NOP();NOP();NOP();NOP();NOP();NOP();  //433必须用此句
}}

void delay5ms(void){
        uchar i;
        for(i=24;i>0;i--){
         delay200us();
        }}

void delay200us(void){
        uchar i;
        for(i=50;i>0;i--)
        NOP();        
    }

void delay0d5s(void){
        uint i;
        for(i=1500;i>0;i--){
         delay200us();
        }}
//==================================================
/*************************************************************/
/*################################################*/
//------------------------------------------------------------------------------
void p2262_0(void){
        p2262=1;
        delayms(10);
        p2262=0;
        delayms(30);
        p2262=1;
        delayms(10);
        p2262=0;
        delayms(30);
}
//-------------------------------------------------------------
void p2262_1(void){
        p2262=1;
        delayms(30);
        p2262=0;
        delayms(10);
        p2262=1;
        delayms(30);
        p2262=0;
        delayms(10);
}
//-------------------------------------------------------------
void p2262_f(void){                
        p2262=1;
        delayms(10);
        p2262=0;
        delayms(30);
        p2262=1;
        delayms(30);
        p2262=0;
        delayms(10);
}
//-------------------------------------------------------------
void fs_2262(uint add,uchar dat){    //2262编码发射,00代表0,01代表1,10代表f
        uchar i,j;        
        uint temp;            
    
        for(i=0;i<8;i++){     //发射相同的8组码 //发射相同的4组码?//发射相同的2组码  ?????
          
                for(j=0;j<8;j++){        //先发射8位地址
                temp=add;
                temp>>=((7-j)*2);       //将待发射的两位移到最低位
                temp &=3;

                if(temp==0)      p2262_0();
                else if (temp==1)p2262_1();
                else if (temp==2)p2262_f();
                }

                for(j=0;j<4;j++){        //再发4位数据
                temp=dat;
                temp>>=(3-j);
                temp &=1;
                if(temp==0)p2262_0();
                else if(temp==1)p2262_1();
                }        

//        led=0;      //发光管亮
        p2262=1;    //发射结束码
        delayms(10);

        p2262=0;
        delayms(310);
        }
//        led=0;      //发光管亮        
}
//###########################################################*/
本帖最近打赏记录:共4条打赏 ,M币+20 ,专家+1
离线11211

发帖
2055
M币
1919
专家
23
粉丝
100
只看该作者 1楼 发表于: 2012-08-07
请登录后查看
离线love香

发帖
2565
M币
4940
专家
9
粉丝
27677
只看该作者 2楼 发表于: 2012-08-09
请登录后查看
离线fxhfxh

发帖
101
M币
26
专家
2
粉丝
9
只看该作者 3楼 发表于: 2012-08-09
回 2楼(love香) 的帖子
请登录后查看
离线maidoo

发帖
621
M币
6805
专家
19
粉丝
84
只看该作者 4楼 发表于: 2012-08-11
回 3楼(fxhfxh) 的帖子
请登录后查看
离线fxhfxh

发帖
101
M币
26
专家
2
粉丝
9
只看该作者 5楼 发表于: 2012-08-11
回 4楼(maidoo) 的帖子
请登录后查看
离线tabbyzwei
发帖
24
M币
956
专家
1
粉丝
5
只看该作者 6楼 发表于: 2013-03-08
请登录后查看
快速回复
限80 字节
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
 
上一个 下一个