新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機+315M無線射頻模塊接受程序

        51單片機+315M無線射頻模塊接受程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        用的就是那種最普通的 最便宜的 大約幾塊錢 的315兆的無線模塊接受發射,不帶解碼的,433m的程序也是一樣的不用修改


        本文引用地址:http://www.104case.com/article/201611/323697.htm


        壓縮包中的內容:


        上位機以及完整程序在文件夾中,大家可自己下載
        地址是:http://www.51hei.com/bbs/dpj-19033-1.html

        下面是接受端的源代碼:
        #include
        #include "string.h"

        //液晶塊
        #define LCM_RW P3_6 //定義引腳
        #define LCM_RS P3_5
        #define LCM_E P3_7
        #define LCM_Data P1
        #define Busy 0x80 //用于檢測LCM狀態字中的Busy標識
        typedef int byte;
        typedef unsigned int word;

        void Read_Temp(void);
        void mychar(char,char);

        void WriteDataLCM(unsigned char WDLCM);
        void WriteCommandLCM(unsigned char WCLCM,BuysC);
        unsigned char ReadDataLCM(void);
        unsigned char ReadStatusLCM(void);
        void LCMInit(void);
        void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
        void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
        void Delay5Ms(void);
        void Delay400Ms(void);

        void delay(word useconds)
        {
        for(;useconds>0;useconds--);
        }

        void mychar(char xx,char yy)
        {

        DisplayOneChar(0,0,0x54);
        DisplayOneChar(1,0,0x65);
        DisplayOneChar(2,0,0x6D);
        DisplayOneChar(3,0,0x70);
        DisplayOneChar(4,0,0x65);
        DisplayOneChar(5,0,0x72);
        DisplayOneChar(6,0,0x61);
        DisplayOneChar(7,0,0x74);
        DisplayOneChar(8,0,0x75);
        DisplayOneChar(9,0,0x72);
        DisplayOneChar(10,0,0x65);
        DisplayOneChar(11,0,0x3A);
        ///////////////////////自定義字符
        WriteCommandLCM(0x48, 0); //第一行
        WriteDataLCM(0x06);
        WriteCommandLCM(0x49, 0); //第2行
        WriteDataLCM(0x09);
        WriteCommandLCM(0x4a, 0); //第3
        WriteDataLCM(0x09);
        WriteCommandLCM(0x4b, 0); //第4
        WriteDataLCM(0x06);
        WriteCommandLCM(0x4c, 0); //第5
        WriteDataLCM(0x00);
        WriteCommandLCM(0x4d, 0); //第6
        WriteDataLCM(0x00);
        WriteCommandLCM(0x4e, 0); //第7
        WriteDataLCM(0x00);
        WriteCommandLCM(0x4f, 0); //第8
        WriteDataLCM(0x00);
        DisplayOneChar(xx,yy,0x01);
        DisplayOneChar(xx+1,yy,0x43);
        }
        //寫數據
        void WriteDataLCM(unsigned char WDLCM)
        {
        ReadStatusLCM(); //檢測忙
        LCM_Data = WDLCM;
        LCM_RS = 1;
        LCM_RW = 0;
        LCM_E = 0; //若晶振速度太高可以在這后加小的延時
        LCM_E = 0; //延時
        LCM_E = 1;
        }

        //寫指令
        void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測
        {
        if (BuysC) ReadStatusLCM(); //根據需要檢測忙
        LCM_Data = WCLCM;
        LCM_RS = 0;
        LCM_RW = 0;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        }

        //讀狀態
        unsigned char ReadStatusLCM(void)
        {
        LCM_Data = 0xFF;
        LCM_RS = 0;
        LCM_RW = 1;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        while (LCM_Data & Busy); //檢測忙信號
        return(LCM_Data);
        }

        void LCMInit(void) //LCM初始化
        {
        LCM_Data = 0;
        WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
        Delay5Ms();
        WriteCommandLCM(0x38,0);
        Delay5Ms();
        WriteCommandLCM(0x38,0);
        Delay5Ms();

        WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
        WriteCommandLCM(0x08,1); //關閉顯示
        WriteCommandLCM(0x01,1); //顯示清屏
        WriteCommandLCM(0x06,1); // 顯示光標移動設置
        WriteCommandLCM(0x0C,1); // 顯示開及光標設置
        }

        //按指定位置顯示一個字符
        void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
        {
        Y &= 0x1;
        X &= 0xF; //限制X不能大于15,Y不能大于1
        if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
        X |= 0x80; //算出指令碼
        WriteCommandLCM(X, 0); //這里不檢測忙信號,發送地址碼
        WriteDataLCM(DData);
        }

        //按指定位置顯示一串字符 ***原來的遇到空格0x20就不顯示***
        void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
        {
        unsigned char ListLength,j;
        ListLength = strlen(DData);
        Y &= 0x1;
        X &= 0xF; //限制X不能大于15,Y不能大于1
        if (X <= 0xF) //X坐標應小于0xF
        {
        for(j=0;j {
        DisplayOneChar(X, Y, DData[j]); //顯示單個字符
        X++;
        }
        }
        }


        //5ms延時
        void Delay5Ms(void)
        {
        unsigned int TempCyc = 5552;
        while(TempCyc--);
        }

        //400ms延時
        void Delay400Ms(void)
        {
        unsigned char TempCycA = 5;
        unsigned int TempCycB;
        while(TempCycA--)
        {
        TempCycB=7269;
        while(TempCycB--);
        };
        }


        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阜平县| 泗水县| 吉隆县| 襄汾县| 屏东县| 新泰市| 织金县| 务川| 宜春市| 祁阳县| 米泉市| 嘉义市| 黄骅市| 舟曲县| 乌什县| 柞水县| 盐亭县| 邯郸市| 安平县| 故城县| 陇南市| 贡觉县| 攀枝花市| 祁门县| 育儿| 汝阳县| 平谷区| 平邑县| 乌恰县| 闽清县| 林周县| 门头沟区| 兴宁市| 革吉县| 柳林县| 新蔡县| 益阳市| 永平县| 金阳县| 聂拉木县| 盐津县|