久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機模擬量轉(zhuǎn)開關(guān)量傳感器模塊原理圖與源碼等資料

[復(fù)制鏈接]
ID:280979 發(fā)表于 2018-3-18 00:49 | 顯示全部樓層 |閱讀模式
電路原理圖如下:
0.jpg
功能描述:
此工業(yè)級板的作用是,模塊供電后,數(shù)碼管顯示設(shè)定數(shù)值,板子有兩個獨立按鍵,客戶可根據(jù)需求自定義編程其功能。
可實現(xiàn)的功能:定時輸出控制、計數(shù)器技術(shù)控制、0~5V模擬量輸入控制、按鍵控制數(shù)碼管顯示、開關(guān)量輸入控制。
【簡要說明】
一、板子尺寸:長72mmX42mmX18mm
二、主要器件STC12C2052AD單片機、數(shù)碼管、繼電器
三、工作電壓:有6V24V
四、板子功耗:小于150mA
五、特點:
         1、具有繼電器輸出信號指示功能
         2供電即可工作,具有電源指示燈
         3多種工作模式
         4如果您會單片機,可以根據(jù)自己需要,任意編程,我們可提供參考程序和相關(guān)資料
         5兩個按鍵任意調(diào)節(jié)和編程功能
         6繼電器吸合時間10ms 釋放時間15ms
         7可以和72MM卡槽板配合安裝在DIN導(dǎo)軌上
         8、繼電器觸點干接點輸出,可以控制交流或者直流250V以內(nèi)任何負載。     9、端子采用螺旋壓接端子           
         10、工作溫度-40度至 +70度
         11、工作濕度 10%  ~ 80%RH
         12、四周有4個固定安裝孔
         13、具有電磁抗干擾能力
         14、板子穩(wěn)定工作可靠

DSC_0206.JPG DSC_0195.JPG DSC_0187.JPG DSC_0155.JPG DSC_0166.JPG DSC_0167.JPG

設(shè)定值控制0~100具有上下限值設(shè)定共陰數(shù)碼管 - 氣體傳感器單片機源程序如下:
  1. #include<STC12C2052AD.h>                 //庫文件
  2. #include<intrins.h>
  3. #define uchar unsigned char //宏定義字符型變量
  4. #define uint  unsigned int        //宏定義整型變量
  5. /****************************模擬量開始*********************************************/
  6. /*聲明 SFR 相關(guān) 與 的 IAP*/
  7. sfr IAP_DATA = 0xE2;
  8. sfr IAP_ADDRH = 0xE3;
  9. sfr IAP_ADDRL = 0xE4;
  10. sfr IAP_CMD = 0xE5;
  11. sfr IAP_TRIG = 0xE6;
  12. sfr IAP_CONTR = 0xE7;
  13. #define ADC_POWER   0x80            //ADC 電源控制位
  14. #define ADC_FLAG    0x10            //ADC 轉(zhuǎn)換結(jié)束標志位
  15. #define ADC_START   0x08            //ADC 開始轉(zhuǎn)換控制位
  16. #define ADC_SPEEDLL 0x00            //210 個時鐘周期轉(zhuǎn)換一次
  17. #define ADC_SPEEDL  0x20            //420 個時鐘周期轉(zhuǎn)換一次
  18. #define ADC_SPEEDH  0x40            //630 個時鐘周期轉(zhuǎn)換一次
  19. #define ADC_SPEEDHH 0x60            //840 個時鐘周期轉(zhuǎn)換一次
  20. /******************************模擬量結(jié)束*******************************************/
  21. /********************************************************************
  22.                             定義 ISP/IAP/EEPROM 命令
  23. *********************************************************************/
  24. #define CMD_IDLE 0jm
  25. #define CMD_READ 1
  26. #define CMD_PROGRAM 2
  27. #define CMD_ERASE 3
  28. #define ENABLE_IAP 0x83//SYSCLK<12MH
  29. #define IAP_ADDRESS 0x0000        //存儲地址
  30. void IapIdle();//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態(tài)
  31. uchar IapReadByte(uint addr);//讀數(shù)據(jù)
  32. void IapProgramByte(uint addr, uchar dat);//寫數(shù)據(jù)
  33. void IapEraseSector(uint addr);//擦除數(shù)據(jù)
  34. sbit P10=P1^0;//數(shù)碼管段
  35. sbit P11=P1^1;//數(shù)碼管段
  36. sbit P12=P1^2;//數(shù)碼管段
  37. sbit P13=P1^3;//數(shù)碼管段
  38. sbit P14=P1^4;//數(shù)碼管段
  39. sbit P15=P1^5;//數(shù)碼管段
  40. sbit P16=P1^6;//數(shù)碼管段
  41. sbit P32=P3^2;//數(shù)碼管位
  42. sbit P33=P3^3;//數(shù)碼管位
  43. sbit P35=P3^5;//數(shù)碼管位
  44. sbit AIN1=P1^7;//AD信號輸入
  45. sbit key1=P3^0;//按鍵輸入
  46. sbit key2=P3^1;//按鍵輸入
  47. sbit OUT=P3^7; //繼電器輸出
  48. static uchar presstime=0;//用于延時
  49. uint tcnt1=0;//用于刷新數(shù)碼管
  50. uint bainum1,shinum1,genum1;//數(shù)碼管上顯示
  51. uint bainum11=0,shinum11=0,genum11=0,shinum12=0,genum12=0;//用于傳到數(shù)碼管上顯示
  52. uint kf0=1,if0=0;//按鍵用的標志位
  53. uint kt0=0;//按鍵用的標志位
  54. uint keynum=0;//數(shù)碼管的位
  55. uint datas=0;
  56. bit flag_eeprom1=1;//掉電存儲的標志位
  57. uint inum1=0;//觸發(fā)端子用的計數(shù)
  58. uchar inum11=0,inum12=0;//掉電存儲
  59. uint ad=0,ad1=0;
  60. code uchar seg7code[13]={0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0xa0,0x6f,0x3e,0x72}; //顯示段碼 數(shù)碼管字跟
  61. extern void p31s();//將p3口的235置為1
  62. uint GetADCResult(uchar px);
  63. uint meanval1,meanval2;//平均值
  64. void InitADC();
  65. void keycan();
  66. void keyflag();//按鍵結(jié)束調(diào)用
  67. void displaynum();//將數(shù)字傳到數(shù)碼管上顯示
  68. void saveeepro();

  69. void timer0(void)interrupt 1  {//定時器0          
  70.         //500等于1秒
  71.         TL0 = 0xCD;                //重新設(shè)置定時器0時間為2ms
  72.         TH0 = 0xF8;                //重新設(shè)置定時器0的初始值
  73.         tcnt1++;//用于刷新數(shù)碼管
  74.         presstime++;
  75.         if (if0==0){
  76.                 meanval1++;
  77.                 if(meanval1==50){
  78.                         meanval2=GetADCResult(7)/2.5;
  79.                         //meanval2=meanval2-20;
  80.                         if(meanval2>=100){meanval2=99;}
  81.                         if(meanval2<=1){meanval2=0;}
  82.                         meanval1=0;
  83.                 }
  84.         }
  85.         switch(tcnt1){//數(shù)碼管部分
  86.           case 1: p31s(); P1=seg7code[bainum1];P32=0;break;
  87.           case 2: p31s(); P1=~seg7code[shinum1];if(keynum==1 || keynum==3 || keynum==0){P33=0;}break;
  88.           case 3: p31s(); P1=~seg7code[genum1]; if(keynum==2 || keynum==4 || keynum==0){P35=0;}break;
  89.           default: tcnt1=0; p31s(); break;
  90.          }
  91. }//定時器0結(jié)束
  92. void displaynum(){//將數(shù)字傳到數(shù)碼管上顯示
  93.         if (if0==0){//當if0==0時num1三個數(shù)碼管進行顯示
  94.                 AIN1=1;
  95.                 ad=meanval2;
  96. //                if((ad<inum11)||(ad>inum12)){OUT=0;}else{OUT=1;}  //inum11是上線值 inum12是下線線值
  97. //                   if(ad>inum11){OUT=0;}        //如果AD值大于上線值繼電器吸合
  98. //                  if(ad<inum12){OUT=1;}        //如果AD值小于下線值繼電器斷開
  99.                   if(ad>inum11){OUT=1;}        //如果AD值大于上線值繼電器斷開
  100.                   if(ad<inum12){OUT=0;}        //如果AD值小于下線值繼電器吸合
  101.                         genum1=ad%10;//個位
  102.                         shinum1=ad/10%10;//十位
  103.                         bainum1=10;//百
  104.         }else{
  105.                 if(keynum<3){
  106.                         bainum1=11;
  107.                         shinum1=shinum11;
  108.                         genum1=genum11;
  109.                         inum11=shinum11*10+genum11;        //將num1三個數(shù)碼管的值付給inum
  110.                 }else{
  111.                         bainum1=12;
  112.                         shinum1=shinum12;
  113.                         genum1=genum12;
  114.                         inum12=shinum12*10+genum12;        //將num1三個數(shù)碼管的值付給inum
  115.                
  116.                 }
  117.         }                         
  118. }
  119. void timer0_1init(void){//定時配置
  120.         TMOD=0x11;//將定時器0,1都設(shè)置為模式1
  121.         TL0 = 0xCD;//設(shè)置定時器0時間為2ms
  122.         TH0 = 0xF8;//設(shè)置定時器0的初始值
  123.         TR0=1;//開啟定時器0
  124.         TR1=1;//開啟定時器1
  125.         EA=1;//開總中斷
  126.         ET0=1;//開定時器0的中斷
  127. }
  128. void main(){
  129.         P1M0=0X00;//強推挽輸出
  130.         P1M1=0X7F;//強推挽輸出
  131.         AIN1=1;
  132.         InitADC(); //AD轉(zhuǎn)換初始化
  133.         timer0_1init();        //定時器配置
  134.         inum11= IapReadByte(0x01);//讀取存儲的值
  135.         inum12= IapReadByte(0x02);
  136. //        inum1=inum11*100+inum12;
  137.    shinum11=inum11/10%10;
  138.    genum11=inum11%10;
  139.    shinum12=inum12/10%10;
  140.    genum12=inum12%10;
  141.         while(1){
  142.                 keycan();
  143.         }         
  144. }
  145. void keycan(){//按鍵
  146.         if(keynum==0){//當按鍵值等于0的時候調(diào)用顯示
  147.                 displaynum();
  148.         }
  149.             if(key1==0){//當按鍵1按下
  150.                         if(kf0){//當標志位kf0=1的時候進行
  151.                                 if(presstime>50){//當時間值大于一百的時候
  152.                                         kf0=0;//標志位kf0=0
  153.                                         kt0=1;//標志位kt0=0
  154.                                         if0=1;
  155.                                         presstime=0;//時間清零,重新進行
  156.                                         keynum++;//數(shù)碼管的位
  157.                                 if(keynum==5){//當位到7則置位0
  158.                                            keynum=0;if0=0;
  159.                                          }
  160.                                 }
  161.                           }
  162.                 }else{//當按鍵松開
  163.                         keyflag();displaynum();
  164.                 }//按鍵1結(jié)束
  165.     if(key2==0){if(kf0){if(presstime>50){kf0=0;kt0=1;presstime=0;flag_eeprom1=1;//掉電存儲的標志位改為1,進行存值操作
  166.                                 switch(keynum){
  167.                                         case 0:if(if0==1){if0=0;}else{if0=1;}break;
  168.                                         case 1:shinum11++;if(shinum11>9){shinum11=0;}break;
  169.                                         case 2:genum11++;if(genum11>9){genum11=0;}break;
  170.                                         case 3:shinum12++;if(shinum12>9){shinum12=0;}break;
  171.                                         case 4:genum12++;if(genum12>9){genum12=0;}break;
  172.                                         default:break;
  173.                                 }
  174.                         }}}else{keyflag();displaynum();
  175.                                         if(bainum11==1){shinum11=0;genum11=0;}
  176.                                         if((flag_eeprom1==1))//加掉電存儲,必需加到這,不然有一些小問題
  177.                                         {   flag_eeprom1=0;
  178.                                             saveeepro();//掉電存儲
  179.                                         }
  180.                         }//松開按鍵進行顯示       
  181. }

  182. void saveeepro(){//掉電存儲
  183. inum11=shinum11*10+genum11;        //將num1三個數(shù)碼管的值付給inum
  184. inum12=shinum12*10+genum12;        //將num1三個數(shù)碼管的值付給inum
  185. // inum11=inum1/100;//把int型的值拆分到char型
  186. // inum12=inum1%100;
  187.    IapEraseSector(0);  //擦除扇區(qū)
  188.    IapProgramByte(0x01,inum11);//寫入數(shù)據(jù)
  189.    IapProgramByte(0x02,inum12);//寫入數(shù)據(jù)
  190. //   IapProgramByte(0x03,inum13);//寫入數(shù)據(jù)
  191. //   IapProgramByte(0x04,inum14);//寫入數(shù)據(jù)
  192. }

  193. void p31s(){//將p3口的235置為1
  194.         P32=1;P33=1;P35=1;
  195. }
  196. void keyflag(){//按鍵結(jié)束調(diào)用,按鍵的建議使用,這樣可以減小code,但是觸發(fā)的不建議
  197.            if(kt0){//當標志位kt0=1的時候進行
  198.                    if(presstime>50){//當時間值大于一百的時候
  199.                         kf0=1;//標志位kf0=1
  200.                         kt0=0;//標志位kt0=0
  201.                            presstime=0;//時間清零,重新進行
  202.                         }
  203.            }
  204. }
  205. // AD轉(zhuǎn)換初始化程序
  206. void InitADC(){
  207. //   P1 = P1M0 = P1M1 = 0xff;        //設(shè)置P1口為開漏模式,使用AD功能
  208.     ADC_DATA = 0;                   //AD數(shù)據(jù)寄存器清空
  209.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開AD電源,轉(zhuǎn)換周期210
  210.     _nop_();                        //延時
  211. }
  212. //AD轉(zhuǎn)換控制程序
  213. uint GetADCResult(uchar px){          //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
  214.         uint t=0;
  215.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉(zhuǎn)換
  216.         _nop_();
  217.     _nop_();
  218.     _nop_();
  219.     while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
  220.     ADC_CONTR &= ~ADC_FLAG;         //關(guān)閉AD轉(zhuǎn)換
  221.         t=(ADC_DATA<<2)|ADC_LOW2;
  222.     return ADC_DATA;                //返回數(shù)據(jù)
  223. }
  224. void IapIdle(){//禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態(tài)
  225.     IAP_CONTR = 0;           //
  226.         IAP_CMD = 0;           //
  227.         IAP_TRIG = 0;           //
  228.         IAP_ADDRH = 0x80;  //
  229.         IAP_ADDRL = 0;           //
  230. }
  231. uchar IapReadByte(uint addr){//讀數(shù)據(jù)
  232.    uchar dat;
  233.    IAP_CONTR = ENABLE_IAP;
  234.    IAP_CMD = CMD_READ;
  235.    IAP_ADDRL = addr;
  236.    IAP_ADDRH = addr >> 8;
  237.    IAP_TRIG = 0x46;
  238.    IAP_TRIG = 0xb9;
  239.    _nop_();
  240. ……………………

  241. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png 0.png

所有資料51hei提供下載:
GYJ-0083_模擬量轉(zhuǎn)開關(guān)量傳感器模塊發(fā)貨資料.rar (15.1 MB, 下載次數(shù): 32)


回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产电影一区二区在线观看 | 日韩在线观看视频一区 | 色呦呦网站 | 成年男女免费视频网站 | 成人av一区 | 手机在线观看av | 草久久 | 国产精品一区二区不卡 | 亚洲国产精品第一区二区 | 色久五月 | 成人婷婷 | 日韩欧美一区二区在线播放 | 欧美久久一级特黄毛片 | av天天看 | 亚洲国产精品成人无久久精品 | 国产精品久久久久久久久久久久 | 日本精品视频在线 | 91人人看 | 久久国内| 色婷婷精品 | 电影91久久久 | 亚洲精品一 | 久久不卡区| 日本精品久久久久久久 | www.99热.com| 98久久| 国产日韩欧美二区 | 中文字幕在线视频观看 | 伊人爽 | 成人精品高清 | 51ⅴ精品国产91久久久久久 | 国产1区2区 | 欧洲亚洲精品久久久久 | 日本三级电影在线免费观看 | 成人亚洲网 | 中文字幕在线免费视频 | 亚洲精品视频免费观看 | 国产探花在线观看视频 | 国产高清免费 | 香蕉久久av| 日韩精品一区二区三区中文字幕 |