Altium Designer画的STC12C2052AD单片机主控的无线单路可编程遥控带数码管延时模块电路原理图和PCB图如下:(51hei附件中可下载工程文件)
【简要说明】 通过遥控控制继电器定时吸合或者定时断开。(总之遥控与编程结合控制的开发板)
资料正在更新中. 一、板子尺寸:长54mmX宽72mmX高18mm
二、主要器件:单片机、数码管、继电器
三、工作电压:宽电压供电(直流6V至24V均可以) 四、板子功耗:小于300mA
单片机源程序如下:
- /********************************************************************
- 汇诚科技
- 实现功能:测试程序
- 使用芯片:STC12C2052AD
- 晶振:11.0592MHZ
- 波特率:9600
- 编译环境:Keil
- 作者:zhangxinchunleo
- 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
- /********************************************************************
- ********************************************************************/
- /********************************************************************
- 程序说明:
- 1、P1.7口输入模拟量数据。
- 2、将数据与设定程序做比较控制继电器吸合。
- 注意:通道口必须有模拟量输入数据才有效。
- ********************************************************************/
- #include<STC12C2052AD.h> //库文件
- #include<intrins.h>
- #define uchar unsigned char //宏定义字符型变量
- #define uint unsigned int //宏定义整型变量
- /*声明 SFR 相关 与 的 IAP*/
- sfr IAP_DATA = 0xE2;
- sfr IAP_ADDRH = 0xE3;
- sfr IAP_ADDRL = 0xE4;
- sfr IAP_CMD = 0xE5;
- sfr IAP_TRIG = 0xE6;
- sfr IAP_CONTR = 0xE7;
- #define ADC_POWER 0x80 //ADC 电源控制位
- #define ADC_FLAG 0x10 //ADC 转换结束标志位
- #define ADC_START 0x08 //ADC 开始转换控制位
- #define ADC_SPEEDLL 0x00 //210 个时钟周期转换一次
- #define ADC_SPEEDL 0x20 //420 个时钟周期转换一次
- #define ADC_SPEEDH 0x40 //630 个时钟周期转换一次
- #define ADC_SPEEDHH 0x60 //840 个时钟周期转换一次
- /********************************************************************
- IO口定义
- ********************************************************************/
- bit write=0;
- uchar playdate;
- uint XS;
- sbit P10=P1^0;//数码管段
- sbit P11=P1^1;//数码管段
- sbit P12=P1^2;//数码管段
- sbit P13=P1^3;//数码管段
- sbit P14=P1^4;//数码管段
- sbit P15=P1^5;//数码管段
- sbit P16=P1^6;//数码管段
- sbit P17=P1^7;//AD信号输入
- sbit P30=P3^0;//按键输入
- sbit P31=P3^1;//按键输入
- sbit P32=P3^2;//数码管位
- sbit P33=P3^3;//数码管位
- sbit P34=P3^4;//数码管位
- sbit P35=P3^5;//数码管位
- sbit P37=P3^7; //继电器输出
- /********************************************************************
- 定义 ISP/IAP/EEPROM 命令
- *********************************************************************/
- #define CMD_IDLE 0
- #define CMD_READ 1
- #define CMD_PROGRAM 2
- #define CMD_ERASE 3
- #define ENABLE_IAP 0x83//SYSCLK<12MH
- #define IAP_ADDRESS 0x0000 //存储地址
- /********************************************************************
- 禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态
- *********************************************************************/
- void IapIdle()
- {
- IAP_CONTR = 0; //
- IAP_CMD = 0; //
- IAP_TRIG = 0; //
- IAP_ADDRH = 0x80; //
- IAP_ADDRL = 0; //
- }
- /********************************************************************
- 读数据
- *********************************************************************/
- uchar IapReadByte(uint addr)
- {
- uchar dat;
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_READ;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x46;
- IAP_TRIG = 0xb9;
- _nop_();
- dat = IAP_DATA;
- IapIdle();
- return dat;
- }
- /********************************************************************
- 写数据
- *********************************************************************/
- void IapProgramByte(uint addr, uchar dat)
- {
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_PROGRAM;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_DATA = dat;
- IAP_TRIG = 0x46;
- IAP_TRIG = 0xb9;
- _nop_();
- IapIdle();
- }
- /********************************************************************
- 擦除数据
- *********************************************************************/
- void IapEraseSector(uint addr)
- {
- IAP_CONTR = ENABLE_IAP;
- IAP_CMD = CMD_ERASE;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_TRIG = 0x46;
- IAP_TRIG = 0xb9;
- _nop_();
- IapIdle();
- }
- /********************************************************************
- 初始定义
- *********************************************************************/
- code uchar seg7code[10]={ 0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0}; //显示段码 数码管字跟
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay1(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay()//延时程序 0.1秒
- {
- uchar m,n,s;
- for(m=10;m>0;m--)
- for(n=20;n>0;n--)
- for(s=248;s>0;s--);
- }
- /********************************************************************
- 显示函数
- *********************************************************************/
- void Led(uint date) //显示函数
- {
- /*****************数据转换*****************************/
- uint z,x,c,v;
- z=date/1000; //求千位
- x=date%1000/100; //求百位
- c=date%100/10; //求十位
- v=date%10; //求个位
- P32=0;P33=0;P34=0;P35=0;
- P1=seg7code[x];
- P32=1;P33=0;P34=0;P35=0;
- delay1(80);
- P32=0;P33=0;P34=0;P35=0;
- P1=seg7code[c];
- P32=0;P33=1;P34=0;P35=0;
- delay1(80);
- P32=0;P33=0;P34=0;P35=0;
- P1=seg7code[v];
- P32=0;P33=0;P34=0;P35=1;
- delay1(80);
- P32=0;P33=0;P34=0;P35=0;
- //P1=seg7code[v];
- //P32=0;P33=0;P34=1;P35=0;
- //delay1(80);
- //P32=0;P33=0;P34=0;P35=0;
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- /*
- void Init_Com(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd;
- TL1 = 0xFd;
- TR1 = 1;
- }
-
- /********************************************************************
- AD转换初始化程序
- *********************************************************************/
- void InitADC()
- {
- P1 = P1M0 = P1M1 = 0xff; //设置P1口为开漏模式,使用AD功能
- ADC_DATA = 0; //AD数据寄存器清空
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打开AD电源,转换周期210
- delay(); //延时
- }
- /********************************************************************
- AD转换控制程序
- *********************************************************************/
- uchar GetADCResult(uchar px) //转换输出的数据 (PX为通道口)
- {
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//开始转换
- _nop_(); //延时一个机器周期
- _nop_(); //延时一个机器周期
- _nop_(); //延时一个机器周期
- _nop_(); //延时一个机器周期
- while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
- ADC_CONTR &= ~ADC_FLAG; //关闭AD转换
- return ADC_DATA; //返回数据
- }
- /********************************************************************
- 串口数据发送
- *********************************************************************/
- /*void SendData(uchar dat)
- {
- SBUF = dat; //发送数据
- while (!TI); //等待数据
- TI = 0; //清零标志位
- }
- /********************************************************************
- 编辑数据函数
- *********************************************************************/
- /*void show(uchar ch)
- {
- SendData(ch); //发送显示通道
- SendData(GetADCResult(ch)); //发送对应通道的数据
- }
- /********************************************************************
- 按键函数
- *********************************************************************/
- void key()
- {
- if((P30==0)&&(P31==0))
- {
- while(1)
- {
- Led(playdate);
- if((P30==0)&&(playdate<255)){delay1(80);playdate++;delay1(80);write=1;while(!P30);delay1(80);delay1(80);}
- if((P31==0)&&(playdate>0)){delay1(80);playdate--;delay1(80);write=1;while(!P31);delay1(80);delay1(80);}
- if(playdate<=0){playdate=0;delay1(80);}
- if(playdate>=255){playdate=255;delay1(80);}
- if(write==1)
- {
- write=0;
- IapEraseSector(1); //擦除扇区
- IapProgramByte(1,playdate);//写入数据
- }
- }
- }
- }
- /********************************************************************
- 主函数
- *********************************************************************/
- void main()
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码 所有资料51hei提供下载:
GYJ-0069_无线单路可编程遥控带数码管延时模块DXP.rar
(478.74 KB, 下载次数: 56)
GYJ-0069_无线单路可编程遥控带数码管延时模块原理图及PCB图.pdf
(379.47 KB, 下载次数: 45)
GYJ-0069_模拟量输入数字量显示可编程模块产品使用手册.doc
(2.22 MB, 下载次数: 38)
测试程序(成功).rar
(39.09 KB, 下载次数: 44)
|