找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2455|回复: 0
打印 上一主题 下一主题
收起左侧

无线遥控脉冲发生器 频率可调 多档位程序 带历史程序包

[复制链接]
跳转到指定楼层
楼主
#include "stc.h"
#include <intrins.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
#define NOP()                    _nop_()
#define EEPROM_START_ADDRESS     0x2000

/********************************************************************
                            初始定义
*********************************************************************/
uint sec=0; //定义计数值
uint sec1=0; //定义计数值
uint tcnt; //脉冲计数
uint tcnt1; //脉冲计数
uchar timet=0;
uint t1;
bit write;
uchar sudu;
uchar shuru;
uchar dingshi=1;
uint shi=0;
uchar xiaoshi=0;
uchar baojing=0;
uchar biaozhi=0;
/********************************************************************
                            I/O定义
*********************************************************************/

sbit P35=P3^5;         //脉冲
sbit P36=P3^6;         //继电器
sbit P37=P3^7;         //蜂鸣器
/********************************************************************
                            延时100MS函数
*********************************************************************/

void Delay100ms(uint t)               
{
        uint i, j;
        _nop_();
        i = 100;
        j = t;
       
         while (--j);
         while (--i);
}

/********************************************************************
                            蜂鸣器函数
*********************************************************************/
void fmq()
{
P37=0; Delay100ms(20000);P37=1;
}

/****************************************************
* 函数名称: DelayNus
* 输    入: t 延时时间
* 输    出: 无
* 功能描述: 微秒级延时
*****************************************************/
void DelayNus(uint t)
{
        uint d=0;

        d=t;

        do
        {
                NOP();
        }while(--d >0);       
}
/****************************************************
* 函数名称: DelayNms
* 输    入: t 延时时间
* 输    出: 无
* 功能描述: 毫秒延时
*****************************************************/
void DelayNms(uint t)
{
         do
         {
                 DelayNus(1000);

         }while(--t >0);
}
/****************************************************
* 函数名称: EEPROMEnable
* 输    入: 无
* 输    出: 无
* 功能描述: EEPROM使能
*****************************************************/
void EEPROMEnable(void)
{
        ISP_CONTR=0x81;//使能并设置好等待时间
}
/****************************************************
* 函数名称: EEPROMDisable
* 输    入: 无
* 输    出: 无
* 功能描述: EEPROM禁用
*****************************************************/
void EEPROMDisable(void)
{
    ISP_CONTR=0x00;  //禁止EEPROM
    ISP_CMD=0x00;    //无ISP操作
    ISP_TRIG=0x00;   //清零
    ISP_ADDRH=0x00;  //清零
    ISP_ADDRL=0x00;  //清零
}
/****************************************************
* 函数名称: EEPROMSetAddress
* 输    入: addr 16位地址
* 输    出: 无
* 功能描述: EEPROM 设置读写地址(相对地址)
*****************************************************/
void EEPROMSetAddress(uint addr)
{
    addr+=EEPROM_START_ADDRESS; //初始化地址为0x2000
    ISP_ADDRH=(uchar)(addr>>8); //设置读写地址高字节
    ISP_ADDRL=(uchar) addr;      //设置读写地址低字节
}
/****************************************************
* 函数名称: EEPROMStart
* 输    入: 无
* 输    出: 无
* 功能描述: EEPROM 启动
*****************************************************/
void EEPROMStart(void)
{
    ISP_TRIG=0x46; //首先写入0x46
    ISP_TRIG=0xB9; //然后写入0xB9
}
/****************************************************
* 函数名称: EEPROMReadByte
* 输    入: addr 16位 地址
* 输    出: 单个字节
* 功能描述: EEPROM 读取单个字节
*****************************************************/
uchar EEPROMReadByte(uint addr)
{

    ISP_DATA=0x00;              //清空ISP_DATA
    ISP_CMD=0x01;               //读模式

    EEPROMEnable();             //EEPROM使能
    EEPROMSetAddress(addr);   //设置EEPROM地址
    EEPROMStart();              //EEPROM启动

        DelayNus(10);              //读取一个字节要10us

    EEPROMDisable();           //禁止EEPROM
       
    return (ISP_DATA);        //返回读取到的数据
}
/****************************************************
* 函数名称: EEPROMWriteByte
* 输    入: addr 16位 地址
byte 单个字节
* 输    出: 无
* 功能描述: EEPROM 写入单个字节
*****************************************************/
void EEPROMWriteByte(uint addr,uchar byte)
{
    EEPROMEnable();           //EERPOM使能

    ISP_CMD=0x02;             //写模式

    EEPROMSetAddress(addr); //设置EEPROM地址

    ISP_DATA=byte;            //写入数据

    EEPROMStart();            //EEPROM启动

        DelayNus(60);            //写一个字节需要60us

    EEPROMDisable();         //禁止EEPROM
}
/****************************************************
* 函数名称: EEPROMSectorErase
* 输    入: addr 16位 地址
* 输    出: 无
* 功能描述: EEPROM 扇区擦除
*****************************************************/
void EEPROMSectorErase(uint addr)
{
    ISP_CMD=0x03;            //扇区擦除模式

    EEPROMEnable();          //EEPROM使能
    EEPROMSetAddress(addr);//设置EEPROM地址
    EEPROMStart();           //EEPROM启动

    DelayNms(10);             //擦除一个扇区要10ms

    EEPROMDisable();         //禁止EEPROM

}
/********************************************************************
                            按键判断函数
*********************************************************************/
void KEY()

{
shuru=P1;
switch(shuru)
  {
  case 0XF8:  fmq();P36=0;TR0=0;P35=0;Delay100ms(50000);break;//D
  case 0XF2:  fmq();sudu++;write=1;if(sudu>=41)sudu=41;Delay100ms(20000);break;//B
  case 0XF4:  fmq();sudu--;write=1;if(sudu<=1)sudu=1;Delay100ms(20000);break;//C   
  case 0XF1:  fmq();P36=1;TR0=1;P35=1;Delay100ms(50000);break;//A
  default:break;       
  }
switch(sudu)
{
case 1: t1=1;break;//2K
case 2: t1=2;break;//2K
case 3: t1=3;break;//2K
case 4: t1=4;break;//1.6k
case 5: t1=5;break;//1.33k
case 6: t1=6;break;//1.14k
case 7: t1=7;break;//1k
case 8: t1=8;break;// 880
case 9: t1=9;break;// 800
case 10: t1=10;break;// 660
case 11: t1=11;break;// 660
case 12: t1=12;break;// 660
case 13: t1=13;break;// 580
case 14: t1=14;break;// 660
case 15: t1=15;break;//        500
case 16: t1=16;break;// 660
case 17: t1=17;break;//        450
case 18: t1=18;break;// 660
case 19: t1=19;break;//        400
case 20: t1=20;break;// 660
case 21: t1=21;break;//        360
case 22: t1=22;break;//        350
case 23: t1=23;break;// 660
case 24: t1=24;break;// 660
case 25: t1=25;break;//        300
case 26: t1=26;break;//        300
case 27: t1=30;break;//        260
case 28: t1=33;break;//        240
case 29: t1=37;break;//        220
case 30: t1=41;break;//        200
case 31: t1=50;break;//        160
case 32: t1=60;break;//        135
case 33: t1=65;break;//        125
case 34: t1=75;break;//        110
case 35: t1=80;break;//        100
case 36: t1=95;break;//        84
case 37: t1=120;break;//60
case 38: t1=150;break;//50
case 39: t1=300;break;//30
case 40: t1=1000;break;//8
case 41: t1=10000;break;//1
default:break;
}
}

/********************************************************************
                            定时中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 //定时中断服务函数
{

         tcnt1++;
         if(tcnt1>=t1)
           {
             tcnt1=0;
         P35=!P35;
            }

}

/********************************************************************
                            主函数
*********************************************************************/
void main()
{
    uchar Q;
        TMOD=0x02; //定时器工作在方式2
        TH0=0x06; //对TH0 TL0 赋值
        TL0=0x06;
        TR0=0; //关定时
        ET0=1; //开定时器
        EA=1;  //开总中断
        P1=0XFF;
        P35=0;//脉冲输出脚
        P36=0;//继电器输出控制关
        Q=EEPROMReadByte(0);     //从EERPOM的相对0地址读取数据
        sudu=Q;
        while(1)
        {
    KEY();
        if(write==1)
    {
        EEPROMSectorErase(0);    //从EEPROM的相对0地址扇区擦除
    EEPROMWriteByte(0,sudu);//从EEPROM的相对0地址写入0x88
        write=0;
        }
    }
}               

ALIM0086.JPG (63.75 KB, 下载次数: 75)

ALIM0086.JPG

ALIM0095.JPG (78.17 KB, 下载次数: 68)

ALIM0095.JPG

改装后接线图.JPG (74.61 KB, 下载次数: 80)

改装后接线图.JPG

仪表和汽车原接线图.JPG (25.89 KB, 下载次数: 64)

仪表和汽车原接线图.JPG

原理图及PCB图.rar

173.92 KB, 下载次数: 23, 下载积分: 黑币 -5

程序包.rar

873.03 KB, 下载次数: 21, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表