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

標題: 單片機模擬量輸入數字量顯示電路圖 上位機與源程序(實現各種觸發控制與報警功能) [打印本頁]

作者: zhangxinchun    時間: 2018-2-8 00:38
標題: 單片機模擬量輸入數字量顯示電路圖 上位機與源程序(實現各種觸發控制與報警功能)
核心是一個51單片機,這個模擬量輸入數字量顯示可編程模塊電路原理圖及PCB圖:


AD接收UART發送模塊AD轉換數值顯示的vb上位機源碼(51hei附件中可下載)


單片機下位機的配套源程序:


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

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

此控制電路的應用舉例與接線圖分享:

數碼管程序延時程序 - 廁所沖水延時25秒可調
1.繼電器使用5V   
2.輸入引腳使用下載口排針的VCC GND 和AIN 三個引腳
3.R11電阻不焊接   
4.數碼管使用四位一體共陰數碼管

單片機源程序如下:
  1. /********************************************************************
  2.                             匯誠科技
  3. 實現功能:測試程序
  4. 使用芯片:STC12C2052AD
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 編譯環境:Keil
  8. 【聲明】此程序僅用于學習與參考,引用請注明版權和作者信息!     
  9. /********************************************************************
  10. ********************************************************************/
  11. /********************************************************************
  12. 程序說明:
  13. 1、P1.7口輸入模擬量數據。
  14. 2、將數據與設定程序做比較控制繼電器吸合。
  15. 注意:通道口必須有模擬量輸入數據才有效。
  16. ********************************************************************/
  17. //#include<reg52.h>
  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. /********************************************************************
  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;//數碼管段
  37. sbit P11=P1^1;//數碼管段
  38. sbit P12=P1^2;//數碼管段
  39. sbit P13=P1^3;//數碼管段
  40. sbit P14=P1^4;//數碼管段
  41. sbit P15=P1^5;//數碼管段
  42. sbit P16=P1^6;//數碼管段
  43. sbit P17=P1^7;//AD信號輸入

  44. sbit P30=P3^0;//按鍵輸入
  45. sbit P31=P3^1;//按鍵輸入
  46. sbit P32=P3^2;//數碼管位
  47. sbit P33=P3^3;//數碼管位
  48. sbit P34=P3^4;//數碼管位
  49. sbit P35=P3^5;//數碼管位
  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        //存儲地址


  60. /********************************************************************
  61. 禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
  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.                              讀數據
  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.                                寫數據
  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.                                擦除數據
  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}; //顯示段碼 數碼管字跟

  121. /********************************************************************
  122.                             延時函數
  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.                             顯示函數
  136. *********************************************************************/        
  137. void Led(uchar date) //顯示函數
  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;                         //求個位

  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);  //擦除扇區
  177.                         IapProgramByte(1,playdate);//寫入數?
  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);  //擦除扇區
  190.                                 IapProgramByte(1,playdate);//寫入?
  191.            }
  192.    }                  

  193. }
  194. //定時器0初始化
  195. void t0_init(unsigned char ms0)           //ms0最大71
  196. {
  197.         /***********************************************
  198.         一個機器周期=12*時鐘周期。
  199.         11059200為時鐘周期,一共為11059200/12=921600,就是每秒為921600Hz,
  200.     八位定時器 最大計時     0.2777778ms
  201.         十六位定時器最大計時          71.111111ms
  202.         11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。
  203.   65536-9216=56320(dc00)
  204.   TH0=0xdc,TL0=0x00
  205.         ***********************************************/
  206.          long tmp;  //臨時變量
  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選擇時鐘計數還是外部計數  方式0是十三位定時器 ,方式1是十六位定時器,方式2是八位自動 方式4是兩個八位
  215.          TH0=T0RH;
  216.          TL0=T0RL;
  217.          ET0=1;   //使能T0中斷
  218.          EA=1;
  219. //         TR0=1;
  220. }
  221. /********************************************************************
  222.                                主函數
  223. *********************************************************************/
  224. void main()
  225. {   unsigned char flag=1,flag2=0;;
  226.         playdate = IapReadByte(0x01);                //讀取0x01中的數據  并附給ca
  227.         t0_init(10);
  228.         while(1)
  229.         {
  230.                 if((P17==1)&&(flag==0))           //如果松開手了       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);//調用顯示函數顯示數據display_date        
  252.         }                 
  253. }
  254. void t0(void) interrupt 1 using 0 //定時中斷服務函數
  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中的數據  并附給ca
  269.                    }
  270.                 }
  271.             else
  272.                 {   P37=1;
  273.                     TR0=0;
  274.                     playdate = IapReadByte(0x01);                //讀取0x01中的數據  并附給ca
  275. ……………………

  276. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

還附帶如下完整源碼:
59板配合3461as數碼管進行觸發加操作
59板配合3461as數碼管進行 溫度 控制
DS18B20溫度報警模塊
EEPROM測試程序(成功)
廁所沖水系統延時程序
客戶訂做
延時程序59分99秒
延時程序60分00秒
數碼管程序延時程序
模擬量轉換顯示程序
測試程序(成功)
測試程序(成功)0~5000可調
測試程序(成功)20150317完整
數碼管程序延時程序.rar




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




作者: caoteng    時間: 2018-9-14 10:32
謝謝,十分又用

作者: wikeylee    時間: 2018-10-17 17:00
謝謝,十分又用





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1