找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13176|回復(fù): 2
收起左側(cè)

單片機(jī)模擬量輸入數(shù)字量顯示電路圖 上位機(jī)與源程序(實(shí)現(xiàn)各種觸發(fā)控制與報(bào)警功能)

[復(fù)制鏈接]
ID:280979 發(fā)表于 2018-2-8 00:38 | 顯示全部樓層 |閱讀模式
核心是一個(gè)51單片機(jī),這個(gè)模擬量輸入數(shù)字量顯示可編程模塊電路原理圖及PCB圖:
0.png 0.png

AD接收UART發(fā)送模塊AD轉(zhuǎn)換數(shù)值顯示的vb上位機(jī)源碼(51hei附件中可下載)
0.png

單片機(jī)下位機(jī)的配套源程序:
0.png

【簡(jiǎn)要說(shuō)明】
一、板子尺寸:長(zhǎng)72mmX54mmX18mm
二、主要器件:?jiǎn)纹瑱C(jī)、數(shù)碼管、繼電器
三、工作電壓:DC5V~40V
四、板子功耗:小于200mA
五、特點(diǎn):
         1、具有繼電器輸出信號(hào)指示功能。
         2、供電即可工作無(wú)需外部觸發(fā)。
         3、具有電源指示燈,四位數(shù)碼管顯示功能。
         4、如果您會(huì)單片機(jī),可以根據(jù)自己需要,任意編程,我們可提供參考程序和相關(guān)資料。
         5、兩個(gè)按鍵任意調(diào)節(jié)設(shè)置參數(shù)。
         6、0~5V模擬量輸入
         7、可以和72MM卡槽板配合安裝在DIN導(dǎo)軌上。
         8、繼電器觸點(diǎn)干接點(diǎn)輸出,可以控制交流或者直流250V以內(nèi)任何負(fù)載。     
     
9、端子采用螺旋壓接端子           

         10、工作溫度-40度至 +70度
         11、工作濕度 10%  ~ 80%RH
         12、四周有4個(gè)固定安裝孔
         13、具有電磁抗干擾能力
         14、板子穩(wěn)定工作可靠

此控制電路的應(yīng)用舉例與接線圖分享:
應(yīng)用舉例.JPG 應(yīng)用舉2例.JPG 接線圖.JPG 復(fù)件 標(biāo)示圖1.JPG 標(biāo)示圖1.JPG 標(biāo)示圖.JPG
數(shù)碼管程序延時(shí)程序 - 廁所沖水延時(shí)25秒可調(diào)
1.繼電器使用5V   
2.輸入引腳使用下載口排針的VCC GND 和AIN 三個(gè)引腳
3.R11電阻不焊接   
4.數(shù)碼管使用四位一體共陰數(shù)碼管

單片機(jī)源程序如下:
  1. /********************************************************************
  2.                             匯誠(chéng)科技
  3. 實(shí)現(xiàn)功能:測(cè)試程序
  4. 使用芯片:STC12C2052AD
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 編譯環(huán)境:Keil
  8. 【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!     
  9. /********************************************************************
  10. ********************************************************************/
  11. /********************************************************************
  12. 程序說(shuō)明:
  13. 1、P1.7口輸入模擬量數(shù)據(jù)。
  14. 2、將數(shù)據(jù)與設(shè)定程序做比較控制繼電器吸合。
  15. 注意:通道口必須有模擬量輸入數(shù)據(jù)才有效。
  16. ********************************************************************/
  17. //#include<reg52.h>
  18. #include<STC12C2052AD.h>                 //庫(kù)文件
  19. #include<intrins.h>
  20. #define uchar unsigned char //宏定義字符型變量
  21. #define uint  unsigned int        //宏定義整型變量

  22. /*聲明 SFR 相關(guān) 與 的 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. /********************************************************************
  30.                              IO口定義
  31. ********************************************************************/

  32. bit  write=0;
  33. uchar playdate;
  34. unsigned char T0RH=0,T0RL=0;
  35. unsigned char ms=0;

  36. sbit P10=P1^0;//數(shù)碼管段
  37. sbit P11=P1^1;//數(shù)碼管段
  38. sbit P12=P1^2;//數(shù)碼管段
  39. sbit P13=P1^3;//數(shù)碼管段
  40. sbit P14=P1^4;//數(shù)碼管段
  41. sbit P15=P1^5;//數(shù)碼管段
  42. sbit P16=P1^6;//數(shù)碼管段
  43. sbit P17=P1^7;//AD信號(hào)輸入

  44. sbit P30=P3^0;//按鍵輸入
  45. sbit P31=P3^1;//按鍵輸入
  46. sbit P32=P3^2;//數(shù)碼管位
  47. sbit P33=P3^3;//數(shù)碼管位
  48. sbit P34=P3^4;//數(shù)碼管位
  49. sbit P35=P3^5;//數(shù)碼管位
  50. sbit P37=P3^7; //繼電器輸出
  51. /********************************************************************
  52.                             定義 ISP/IAP/EEPROM 命令
  53. *********************************************************************/
  54. #define CMD_IDLE 0
  55. #define CMD_READ 1
  56. #define CMD_PROGRAM 2
  57. #define CMD_ERASE 3

  58. #define ENABLE_IAP 0x83//SYSCLK<12MH
  59. #define IAP_ADDRESS 0x0000        //存儲(chǔ)地址


  60. /********************************************************************
  61. 禁用 ISP/IAP/EEPROM functionmake 單片機(jī) 在 一 安全 狀態(tài)
  62. *********************************************************************/
  63. void IapIdle()
  64. {
  65.     IAP_CONTR = 0;           //
  66.         IAP_CMD = 0;           //
  67.         IAP_TRIG = 0;           //
  68.         IAP_ADDRH = 0x80;  //
  69.         IAP_ADDRL = 0;           //
  70. }

  71. /********************************************************************
  72.                              讀數(shù)據(jù)
  73. *********************************************************************/

  74. uchar IapReadByte(uint addr)
  75. {
  76.    uchar dat;
  77.    IAP_CONTR = ENABLE_IAP;
  78.    IAP_CMD = CMD_READ;
  79.    IAP_ADDRL = addr;
  80.    IAP_ADDRH = addr >> 8;
  81.    IAP_TRIG = 0x46;
  82.    IAP_TRIG = 0xb9;
  83.    _nop_();
  84.    dat = IAP_DATA;
  85.    IapIdle();
  86.    return dat;
  87. }
  88. /********************************************************************
  89.                                寫數(shù)據(jù)
  90. *********************************************************************/

  91. void IapProgramByte(uint addr, uchar dat)
  92. {
  93.    IAP_CONTR = ENABLE_IAP;
  94.    IAP_CMD = CMD_PROGRAM;
  95.    IAP_ADDRL = addr;
  96.    IAP_ADDRH = addr >> 8;
  97.    IAP_DATA = dat;
  98.    IAP_TRIG = 0x46;
  99.    IAP_TRIG = 0xb9;
  100.    _nop_();
  101.    IapIdle();
  102. }
  103. /********************************************************************
  104.                                擦除數(shù)據(jù)
  105. *********************************************************************/

  106. void IapEraseSector(uint addr)
  107. {
  108.    IAP_CONTR = ENABLE_IAP;
  109.    IAP_CMD = CMD_ERASE;
  110.    IAP_ADDRL = addr;
  111.    IAP_ADDRH = addr >> 8;
  112.    IAP_TRIG = 0x46;
  113.    IAP_TRIG = 0xb9;
  114.    _nop_();
  115.    IapIdle();
  116. }

  117. /********************************************************************
  118.                             初始定義
  119. *********************************************************************/
  120. code uchar seg7code[10]={ 0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0}; //顯示段碼 數(shù)碼管字跟

  121. /********************************************************************
  122.                             延時(shí)函數(shù)
  123. *********************************************************************/
  124. void delay1(uchar t)
  125. {
  126.   uchar i,j;
  127.    for(i=0;i<t;i++)
  128.    {
  129.             for(j=13;j>0;j--);
  130.          { ;
  131.          }
  132.    }
  133. }
  134. /********************************************************************
  135.                             顯示函數(shù)
  136. *********************************************************************/        
  137. void Led(uchar date) //顯示函數(shù)
  138. {
  139. uint z,x,c,v;
  140.   z=date/1000;                         //求千位
  141.   x=date%1000/100;                 //求百位
  142.   c=date%100/10;                 //求十位
  143.   v=date%10;                         //求個(gè)位

  144.           P3M0=0X00;
  145.       P3M1=0XFF;
  146.       P32=0;P33=0;P34=0;P35=0;
  147.           P1=seg7code[x];
  148.           P32=1;P33=0;P34=0;P35=0;
  149.           delay1(80);
  150.           P32=0;P33=0;P34=0;P35=0;  
  151.       P1=seg7code[c];
  152.           P32=0;P33=1;P34=0;P35=0;
  153.           delay1(80);
  154.           P32=0;P33=0;P34=0;P35=0;  
  155.              P1=seg7code[v];
  156.           P32=0;P33=0;P34=0;P35=1;
  157.           delay1(80);
  158.           P32=0;P33=0;P34=0;P35=0;  
  159.       //P1=seg7code[v];
  160.           //P32=0;P33=0;P34=1;P35=0;
  161.           //delay1(80);
  162.           //P32=0;P33=0;P34=0;P35=0;
  163. }
  164.                   
  165. void key()
  166. {
  167.    if(P30==0)
  168.    {
  169.        delay1(80);
  170.            if(P30==0)
  171.            {
  172.                playdate++;
  173.                    if(playdate>50)
  174.                       playdate=50;
  175.                    while(!P30);
  176.                         IapEraseSector(1);  //擦除扇區(qū)
  177.                         IapProgramByte(1,playdate);//寫入數(shù)?
  178.            }
  179.    }
  180.    if(P31==0)
  181.    {
  182.        delay1(80);
  183.            if(P31==0)
  184.            {
  185.                playdate--;
  186.                    if(playdate<1)
  187.                       playdate=1;
  188.                                 while(!P31);
  189.                                 IapEraseSector(1);  //擦除扇區(qū)
  190.                                 IapProgramByte(1,playdate);//寫入?
  191.            }
  192.    }                  

  193. }
  194. //定時(shí)器0初始化
  195. void t0_init(unsigned char ms0)           //ms0最大71
  196. {
  197.         /***********************************************
  198.         一個(gè)機(jī)器周期=12*時(shí)鐘周期。
  199.         11059200為時(shí)鐘周期,一共為11059200/12=921600,就是每秒為921600Hz,
  200.     八位定時(shí)器 最大計(jì)時(shí)     0.2777778ms
  201.         十六位定時(shí)器最大計(jì)時(shí)          71.111111ms
  202.         11.0592MHz除12為921600Hz,就是一秒921600次機(jī)器周期,10ms=9216次機(jī)器周期。
  203.   65536-9216=56320(dc00)
  204.   TH0=0xdc,TL0=0x00
  205.         ***********************************************/
  206.          long tmp;  //臨時(shí)變量
  207.      tmp = 11059200 / 12;
  208.          tmp = (tmp * ms0) / 1000;
  209.          tmp = 65536 - tmp;
  210.          tmp = tmp + 3;
  211.          T0RH = (unsigned char)(tmp>>8);
  212.          T0RL = (unsigned char)tmp;                                          
  213.      TMOD &=0XF0;
  214.          TMOD |=0X01;  //方式一  一共四種方式   GATE0 C/T0  M0_1  M0_0         C/T0選擇時(shí)鐘計(jì)數(shù)還是外部計(jì)數(shù)  方式0是十三位定時(shí)器 ,方式1是十六位定時(shí)器,方式2是八位自動(dòng) 方式4是兩個(gè)八位
  215.          TH0=T0RH;
  216.          TL0=T0RL;
  217.          ET0=1;   //使能T0中斷
  218.          EA=1;
  219. //         TR0=1;
  220. }
  221. /********************************************************************
  222.                                主函數(shù)
  223. *********************************************************************/
  224. void main()
  225. {   unsigned char flag=1,flag2=0;;
  226.         playdate = IapReadByte(0x01);                //讀取0x01中的數(shù)據(jù)  并附給ca
  227.         t0_init(10);
  228.         while(1)
  229.         {
  230.                 if((P17==1)&&(flag==0))           //如果松開(kāi)手了       1
  231.                         {
  232.                             delay1(200);
  233.                                 if((P17==1)&&(flag==0))
  234.                             {   
  235.                                         TR0=1;
  236.                                         P37=0;
  237.                                         flag=1;
  238.                                         flag2=0;
  239.                            }
  240.                         }
  241.                     if((P17==0)&&(flag2==0))                                   //   2
  242.                         {
  243.                             delay1(200);
  244.                                 if((P17==0)&&flag2==0)
  245.                                 {
  246.                                     flag=0;
  247.                                         flag2=1;
  248.                                 }
  249.                         }

  250.                         key();
  251.                         Led(playdate);//調(diào)用顯示函數(shù)顯示數(shù)據(jù)display_date        
  252.         }                 
  253. }
  254. void t0(void) interrupt 1 using 0 //定時(shí)中斷服務(wù)函數(shù)
  255. {
  256.           TH0=T0RH;
  257.         TL0=T0RL;
  258.         ms++;
  259.         if(ms==100)  //ms=100是1秒
  260.         {
  261.             ms=0;
  262.                 if(playdate>0)
  263.                 {
  264.                    playdate--;
  265.                    if(playdate==0)
  266.                    {   P37=1;
  267.                        TR0=0;
  268.                            playdate = IapReadByte(0x01);                //讀取0x01中的數(shù)據(jù)  并附給ca
  269.                    }
  270.                 }
  271.             else
  272.                 {   P37=1;
  273.                     TR0=0;
  274.                     playdate = IapReadByte(0x01);                //讀取0x01中的數(shù)據(jù)  并附給ca
  275. ……………………

  276. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

還附帶如下完整源碼:
59板配合3461as數(shù)碼管進(jìn)行觸發(fā)加操作
59板配合3461as數(shù)碼管進(jìn)行 溫度 控制
DS18B20溫度報(bào)警模塊
EEPROM測(cè)試程序(成功)
廁所沖水系統(tǒng)延時(shí)程序
客戶訂做
延時(shí)程序59分99秒
延時(shí)程序60分00秒
數(shù)碼管程序延時(shí)程序
模擬量轉(zhuǎn)換顯示程序
測(cè)試程序(成功)
測(cè)試程序(成功)0~5000可調(diào)
測(cè)試程序(成功)20150317完整
數(shù)碼管程序延時(shí)程序.rar
DSC_0175.JPG DSC_0174.JPG

0.png

全部資料51hei下載地址:
模擬量輸入數(shù)字量顯示.rar (3.32 MB, 下載次數(shù): 93)



回復(fù)

使用道具 舉報(bào)

ID:397804 發(fā)表于 2018-9-14 10:32 | 顯示全部樓層
謝謝,十分又用
回復(fù)

使用道具 舉報(bào)

ID:411225 發(fā)表于 2018-10-17 17:00 | 顯示全部樓層
謝謝,十分又用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表