欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6780|回復: 1
打印 上一主題 下一主題
收起左側

單片機無線遙控繼電器電路原理圖PCB與源程序 帶數碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
Altium Designer畫的STC12C2052AD單片機主控的無線單路可編程遙控帶數碼管延時模塊電路原理圖和PCB圖如下:(51hei附件中可下載工程文件)


【簡要說明】
通過遙控控制繼電器定時吸合或者定時斷開。(總之遙控與編程結合控制的開發板)

資料正在更新中.
一、板子尺寸:長54mmX寬72mmX18mm
二、主要器件:單片機、數碼管、繼電器
三、工作電壓:寬電壓供電(直流6V至24V均可以)
四、板子功耗:小于300mA


單片機源程序如下:
  1. /********************************************************************
  2.                             匯誠科技
  3. 實現功能:測試程序
  4. 使用芯片:STC12C2052AD
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 編譯環境:Keil
  8. 作者:zhangxinchunleo
  9. 【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!     
  10. /********************************************************************
  11. ********************************************************************/
  12. /********************************************************************
  13. 程序說明:
  14. 1、P1.7口輸入模擬量數據。
  15. 2、將數據與設定程序做比較控制繼電器吸合。

  16. 注意:通道口必須有模擬量輸入數據才有效。

  17. ********************************************************************/

  18. #include<STC12C2052AD.h>                 //庫文件
  19. #include<intrins.h>
  20. #define uchar unsigned char //宏定義字符型變量
  21. #define uint  unsigned int        //宏定義整型變量

  22. /*聲明 SFR 相關 與 的 IAP*/
  23. sfr IAP_DATA = 0xE2;
  24. sfr IAP_ADDRH = 0xE3;
  25. sfr IAP_ADDRL = 0xE4;
  26. sfr IAP_CMD = 0xE5;
  27. sfr IAP_TRIG = 0xE6;
  28. sfr IAP_CONTR = 0xE7;


  29. #define ADC_POWER   0x80            //ADC 電源控制位
  30. #define ADC_FLAG    0x10            //ADC 轉換結束標志位
  31. #define ADC_START   0x08            //ADC 開始轉換控制位
  32. #define ADC_SPEEDLL 0x00            //210 個時鐘周期轉換一次
  33. #define ADC_SPEEDL  0x20            //420 個時鐘周期轉換一次
  34. #define ADC_SPEEDH  0x40            //630 個時鐘周期轉換一次
  35. #define ADC_SPEEDHH 0x60            //840 個時鐘周期轉換一次

  36. /********************************************************************
  37.                              IO口定義
  38. ********************************************************************/

  39. bit  write=0;
  40. uchar playdate;
  41. uint XS;
  42. sbit P10=P1^0;//數碼管段
  43. sbit P11=P1^1;//數碼管段
  44. sbit P12=P1^2;//數碼管段
  45. sbit P13=P1^3;//數碼管段
  46. sbit P14=P1^4;//數碼管段
  47. sbit P15=P1^5;//數碼管段
  48. sbit P16=P1^6;//數碼管段
  49. sbit P17=P1^7;//AD信號輸入

  50. sbit P30=P3^0;//按鍵輸入
  51. sbit P31=P3^1;//按鍵輸入
  52. sbit P32=P3^2;//數碼管位
  53. sbit P33=P3^3;//數碼管位
  54. sbit P34=P3^4;//數碼管位
  55. sbit P35=P3^5;//數碼管位
  56. sbit P37=P3^7; //繼電器輸出
  57. /********************************************************************
  58.                             定義 ISP/IAP/EEPROM 命令
  59. *********************************************************************/
  60. #define CMD_IDLE 0
  61. #define CMD_READ 1
  62. #define CMD_PROGRAM 2
  63. #define CMD_ERASE 3

  64. #define ENABLE_IAP 0x83//SYSCLK<12MH
  65. #define IAP_ADDRESS 0x0000        //存儲地址


  66. /********************************************************************
  67. 禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
  68. *********************************************************************/
  69. void IapIdle()
  70. {
  71.     IAP_CONTR = 0;           //
  72.         IAP_CMD = 0;           //
  73.         IAP_TRIG = 0;           //
  74.         IAP_ADDRH = 0x80;  //
  75.         IAP_ADDRL = 0;           //
  76. }

  77. /********************************************************************
  78.                              讀數據
  79. *********************************************************************/

  80. uchar IapReadByte(uint addr)
  81. {
  82.    uchar dat;
  83.    IAP_CONTR = ENABLE_IAP;
  84.    IAP_CMD = CMD_READ;
  85.    IAP_ADDRL = addr;
  86.    IAP_ADDRH = addr >> 8;
  87.    IAP_TRIG = 0x46;
  88.    IAP_TRIG = 0xb9;
  89.    _nop_();
  90.    dat = IAP_DATA;
  91.    IapIdle();
  92.    return dat;
  93. }
  94. /********************************************************************
  95.                                寫數據
  96. *********************************************************************/

  97. void IapProgramByte(uint addr, uchar dat)
  98. {
  99.    IAP_CONTR = ENABLE_IAP;
  100.    IAP_CMD = CMD_PROGRAM;
  101.    IAP_ADDRL = addr;
  102.    IAP_ADDRH = addr >> 8;
  103.    IAP_DATA = dat;
  104.    IAP_TRIG = 0x46;
  105.    IAP_TRIG = 0xb9;
  106.    _nop_();
  107.    IapIdle();
  108. }
  109. /********************************************************************
  110.                                擦除數據
  111. *********************************************************************/

  112. void IapEraseSector(uint addr)
  113. {
  114.    IAP_CONTR = ENABLE_IAP;
  115.    IAP_CMD = CMD_ERASE;
  116.    IAP_ADDRL = addr;
  117.    IAP_ADDRH = addr >> 8;
  118.    IAP_TRIG = 0x46;
  119.    IAP_TRIG = 0xb9;
  120.    _nop_();
  121.    IapIdle();
  122. }

  123. /********************************************************************
  124.                             初始定義
  125. *********************************************************************/
  126. code uchar seg7code[10]={ 0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0}; //顯示段碼 數碼管字跟

  127. /********************************************************************
  128.                             延時函數
  129. *********************************************************************/
  130. void delay1(uchar t)
  131. {
  132.   uchar i,j;
  133.    for(i=0;i<t;i++)
  134.    {
  135.             for(j=13;j>0;j--);
  136.          { ;
  137.          }
  138.    }
  139. }
  140. /********************************************************************
  141.                             延時函數
  142. *********************************************************************/
  143. void delay()//延時程序 0.1秒
  144. {
  145. uchar m,n,s;
  146. for(m=10;m>0;m--)
  147. for(n=20;n>0;n--)
  148. for(s=248;s>0;s--);
  149. }
  150. /********************************************************************
  151.                             顯示函數
  152. *********************************************************************/        
  153. void Led(uint date) //顯示函數
  154. {
  155. /*****************數據轉換*****************************/
  156. uint z,x,c,v;
  157.   z=date/1000;                         //求千位
  158.   x=date%1000/100;                 //求百位
  159.   c=date%100/10;                 //求十位
  160.   v=date%10;                         //求個位

  161.       P32=0;P33=0;P34=0;P35=0;
  162.           P1=seg7code[x];
  163.           P32=1;P33=0;P34=0;P35=0;
  164.           delay1(80);
  165.           P32=0;P33=0;P34=0;P35=0;  
  166.       P1=seg7code[c];
  167.           P32=0;P33=1;P34=0;P35=0;
  168.           delay1(80);
  169.           P32=0;P33=0;P34=0;P35=0;  
  170.              P1=seg7code[v];
  171.           P32=0;P33=0;P34=0;P35=1;
  172.           delay1(80);
  173.           P32=0;P33=0;P34=0;P35=0;  
  174.       //P1=seg7code[v];
  175.           //P32=0;P33=0;P34=1;P35=0;
  176.           //delay1(80);
  177.           //P32=0;P33=0;P34=0;P35=0;
  178. }

  179. /********************************************************************
  180.                功能:串口初始化,波特率9600,方式1
  181. *********************************************************************/
  182. /*
  183. void Init_Com(void)
  184. {
  185. TMOD = 0x20;
  186. PCON = 0x00;
  187. SCON = 0x50;
  188. TH1 = 0xFd;
  189. TL1 = 0xFd;
  190. TR1 = 1;
  191. }
  192.                   
  193. /********************************************************************
  194.                          AD轉換初始化程序
  195. *********************************************************************/

  196. void InitADC()
  197. {
  198.     P1 = P1M0 = P1M1 = 0xff;        //設置P1口為開漏模式,使用AD功能
  199.     ADC_DATA = 0;                   //AD數據寄存器清空
  200.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開AD電源,轉換周期210
  201.     delay();                       //延時
  202. }

  203. /********************************************************************
  204.                          AD轉換控制程序
  205. *********************************************************************/


  206. uchar GetADCResult(uchar px)          //轉換輸出的數據 (PX為通道口)
  207. {
  208.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉換
  209.     _nop_();                        //延時一個機器周期
  210.     _nop_();                                                //延時一個機器周期
  211.     _nop_();                                                //延時一個機器周期
  212.     _nop_();                                                //延時一個機器周期
  213.     while (!(ADC_CONTR & ADC_FLAG));//等待轉換結束
  214.     ADC_CONTR &= ~ADC_FLAG;         //關閉AD轉換
  215.     return ADC_DATA;                //返回數據
  216. }
  217. /********************************************************************
  218.                          串口數據發送
  219. *********************************************************************/
  220. /*void SendData(uchar dat)
  221. {
  222.         SBUF = dat;                                                //發送數據
  223.     while (!TI);                    //等待數據
  224.     TI = 0;                         //清零標志位
  225. }
  226. /********************************************************************
  227.                             編輯數據函數
  228. *********************************************************************/
  229. /*void show(uchar ch)
  230. {
  231.     SendData(ch);                   //發送顯示通道
  232.     SendData(GetADCResult(ch));     //發送對應通道的數據
  233. }
  234. /********************************************************************
  235.                                按鍵函數
  236. *********************************************************************/
  237. void key()
  238. {
  239. if((P30==0)&&(P31==0))
  240. {
  241. while(1)
  242. {
  243. Led(playdate);
  244. if((P30==0)&&(playdate<255)){delay1(80);playdate++;delay1(80);write=1;while(!P30);delay1(80);delay1(80);}
  245. if((P31==0)&&(playdate>0)){delay1(80);playdate--;delay1(80);write=1;while(!P31);delay1(80);delay1(80);}
  246. if(playdate<=0){playdate=0;delay1(80);}
  247. if(playdate>=255){playdate=255;delay1(80);}
  248. if(write==1)
  249.   {
  250.    write=0;
  251.    IapEraseSector(1);  //擦除扇區
  252.    IapProgramByte(1,playdate);//寫入數據
  253.   }        

  254. }
  255. }
  256. }
  257. /********************************************************************
  258.                                主函數
  259. *********************************************************************/
  260. void main()
  261. ……………………

  262. …………限于本文篇幅 余下代碼請從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)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:334781 發表于 2021-12-7 17:17 | 只看該作者
看了電路圖,想問一下,那個RV1壓敏電阻是不是應該并接到繼電器的常開點呢
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表