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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GYJ-0298 0~10V電壓傳感器可編程報警控制模塊 0~10V電壓變送器原理圖+C程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
功能描述:
此電路板的作用是,模塊供電后,數碼管顯示設定數值,板子有兩個獨立按鍵,客戶可根據需求自定義編程其功能。
可實現的功能:單片機可以自己編程、定時控制、0~10V電壓輸入控制、按鍵控制數碼管顯示。
【簡要說明】
一、 尺寸:長78mmX寬47mmX高24mm
二、 主要芯片:STC單片機
三、 工作電壓:直流6~36V 需要5V的需要特別說明
四、特點:
    可編程控制,提供原理圖,例程及相關資料,提供程序源代碼,提供相關資料!客戶可以通過按鍵設置對繼電器進行開關控制,也可以通過編程自由控制!
1、電源指示燈,繼電器吸合指示燈。
2、板子功耗小于1W
3、額定切換電流10A以內,切換電壓250V以內
4、最大切換功率300W
5、繼電器壽命1000000次以上。
6、電器絕緣電阻100M
7、觸電耐壓1000V
8、繼電器最大吸合時間15mS 毫秒
9、繼電器最大釋放時間5mS  毫秒
10、工作溫度-40度至 +70度
11、工作濕度 40%  ~ 80%RH
適用場合:遠程通信控制,可編程控制,輸入輸出控制,儀器儀表監控。


單片機源程序如下:
  1. #include<STC15W408AS.h>                 //庫文件
  2. #include<intrins.h>
  3. #define uchar unsigned char//宏定義無符號字符型
  4. #define uint unsigned int  //宏定義無符號整型
  5. #define ADC_POWER   0x80            //ADC 電源控制位
  6. #define ADC_FLAG    0x10            //ADC 轉換結束標志位
  7. #define ADC_START   0x08            //ADC 開始轉換控制位
  8. #define ADC_SPEEDLL 0x00            //210 個時鐘周期轉換一次
  9. #define ADC_SPEEDL  0x20            //420 個時鐘周期轉換一次
  10. #define ADC_SPEEDH  0x40            //630 個時鐘周期轉換一次
  11. #define ADC_SPEEDHH 0x60            //840 個時鐘周期轉換一次

  12. typedef unsigned char  INT8U;
  13. typedef unsigned int   INT16U;
  14. #define ENABLE_ISP 0x82 //系統工作時鐘<20MHz 時,對IAP_CONTR 寄存器設置此值
  15. #define WD1        0x5a        //使用STC11xx系列單片機時,先寫入0x5a,然寫入0xa5
  16. #define WD2        0xa5
  17. char IAPAddr=0;
  18. /********************************************************************
  19.                             初始定義
  20. *********************************************************************/
  21. code uchar seg7code[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //顯示段碼 數碼管字跟
  22. /********************************************************************
  23.                             I/O定義
  24. *********************************************************************/
  25. bit z=0,ba=0,k=0,zs=0;
  26. uchar y=0,smg2=0,s1=0,s2=0;
  27. uint s=0,bai=0,shi=0,ge=0,js=0,dat=0,dat1=0;
  28. sbit aj1=P5^4;
  29. sbit aj2=P5^5;
  30. sbit out=P3^4;
  31. sbit L1=P3^5;//數碼管位控制
  32. sbit L2=P3^6;//數碼管位控制
  33. sbit L3=P3^7;//數碼管位控制
  34. sbit dp=P3^3;//小數點
  35. bit kt=0,kt_1=0;
  36. uchar trg=0,trg_1=0,cont=0,cont_1=0;
  37. uchar ReadData=0,ReadData_1=0;
  38. /********************************************************************
  39.                             E2P函數
  40. *********************************************************************/
  41. union union_temp16
  42. {
  43.     INT16U un_temp16;
  44.     INT8U  un_temp8[2];
  45. }my_unTemp16;

  46. INT8U Byte_Read(INT16U add);              //讀一字節,調用前需打開IAP 功能
  47. void Byte_Program(INT16U add, INT8U ch);  //字節編程,調用前需打開IAP 功能
  48. void Sector_Erase(INT16U add);            //擦除扇區
  49. void IAP_Disable();                       //關閉IAP 功能
  50. /********************************************************************
  51.                          AD轉換初始化程序
  52. *********************************************************************/
  53. void InitADC()
  54. {
  55.    P1ASF = 0x80;          //設置P1.7口AD轉換,必須加
  56.    P1M0=0X80;
  57.    P1M1=0X80;        //設置P1.7口為開漏模式,使用AD功能
  58.     ADC_RES = 0;                   //AD數據寄存器清空
  59.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打開AD電源,轉換周期210
  60.     _nop_();                        //延時一個機器周期
  61.     _nop_();
  62.         _nop_();                        //延時一個機器周期
  63. }
  64. /********************************************************************
  65.                          AD轉換控制程序
  66. *********************************************************************/
  67. uchar ADCRead(uchar px)          //轉換輸出的數據 (PX為通道口)
  68. {
  69.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//開始轉換
  70.     _nop_();                        //延時一個機器周期
  71.     _nop_();                                                //延時一個機器周期
  72.     _nop_();                                                //延時一個機器周期
  73.     _nop_();                                                //延時一個機器周期
  74.     while (!(ADC_CONTR & ADC_FLAG));//等待轉換結束
  75.     ADC_CONTR &= ~ADC_FLAG;         //關閉AD轉換
  76.     return ADC_RES;                //返回數據
  77. }
  78. /*******************************************************************
  79. *                        讀取按鍵狀態
  80. ********************************************************************/
  81. void KeyRead()//讀取按鍵IO口函數
  82. {
  83.      ReadData = aj1^0xff;  // 讀取按鍵狀態取反后賦值給ReadData
  84.      trg = ReadData & (ReadData ^ cont);  //trg短按,每按下按鍵trg=1;抬手后為trg=0,長按為trg=0
  85.      cont = ReadData;   //cont長按,長按cont=1,抬手后cont=0

  86.          ReadData_1 = aj2^0xff;  // 讀取按鍵狀態取反后賦值給ReadData
  87.      trg_1 = ReadData_1 & (ReadData_1 ^ cont_1);  //trg短按,每按下按鍵trg=1;抬手后為trg=0,長按為trg=0
  88.     cont_1 = ReadData_1;   //cont長按,長按cont=1,抬手后cont=0
  89. }
  90. /*******************************************************************
  91. *                        按鍵
  92. ********************************************************************/
  93. void key_1()
  94. {         
  95.   if(trg & 0x01) //短按
  96.   {      
  97.      kt_1=0;
  98.          kt=1; //這是短按標志位,kt=1說明短按了
  99.   }
  100.   if((aj1!=0)&&(kt==1))//判斷
  101.         {
  102.          z=1; // 選位標志位
  103.          y++; //選位
  104.          out=1;
  105.          if(y==4)
  106.           {
  107.            z=0;
  108.            k=1;
  109.            y=0;
  110. //           s=s1+s2+s3;
  111.           }
  112.          kt=0;
  113.     }           // 短按

  114. }

  115. void key_2()
  116. {         
  117.   if(trg_1 & 0x01) //短按
  118.   {      
  119.      kt=0;
  120.          kt_1=1; //這是短按標志位,kt=1說明短按了
  121.   }
  122.   if((aj2!=0)&&(kt_1==1))//判斷
  123.         {
  124.          if(y==1)
  125.           {
  126.            s1++;
  127.            if(s1>9)
  128.             {
  129.                  s1=0;
  130.                 }
  131.           }
  132.          if(y==2)
  133.           {
  134.            s2+=10;
  135.            if(s2>90)
  136.             {
  137.                  s2=0;
  138.                 }
  139.           }
  140.          s=s1+s2;
  141.          kt_1=0;
  142.     }           // 短按
  143. }

  144. /*******************************************************************
  145. *                        定時器配置
  146. ********************************************************************/
  147. void ConfigTimer0(){
  148.         TMOD=0x01;//將定時器0,1都設置為模式1
  149.     TH0=0XFC;//1ms
  150.     TL0=0X66;
  151.         TR0=1;//開啟定時器0
  152.         ET0=1;//開定時器0的中斷
  153.         EA=1;//開總中斷
  154. }

  155. /*******************************************************************
  156. *                         顯示
  157. ********************************************************************/
  158. void led(uint date)
  159. {
  160. bai=date/100;
  161. shi=date%100/10;
  162. ge=date%10;
  163. }
  164. /*******************************************************************
  165. *                         t0定時器
  166. ********************************************************************/
  167. void timer0() interrupt 1
  168. {
  169.     TH0=0XFC;//1ms
  170.     TL0=0X66;
  171.         js++;
  172.         if(js==200){ba=1;js=0;}
  173.          
  174.            if(z==0){
  175.           smg2++;
  176.           }
  177.            else{
  178.              smg2=y;//讓逐個顯示位
  179.            }

  180.              switch(smg2){                 //數碼管掃描
  181.         /**************數碼管-開始*****************/
  182.           case 1:  P1=seg7code[ge];L3=1;L2=1;L1=0;dp=0;break;//從P2進P0出
  183.           case 2:  P1=seg7code[shi];L3=1;L2=0;L1=1;if(zs==0){dp=0;}else{dp=1;}break;
  184.           case 3:  P1=seg7code[bai]; L3=0;L2=1;L1=1;dp=0;break;      
  185.         /**************數碼管-結束*****************/      
  186.           default: smg2=0; L3=1;L2=1;L1=1; break;
  187.          }
  188. }
  189. /********************************************************************
  190.                             主函數
  191. *********************************************************************/
  192. void main()
  193. {
  194.   ConfigTimer0();        //定時器初始化
  195.     InitADC();           //AD初始化
  196.     P1M0 = 0xff;   //設置強推挽和開漏模式
  197.     P1M1 = 0x80;
  198.         P3M0 = 0x08;   //小數點使用
  199.         P3M1 = 0x00;
  200.         if(Byte_Read(0X0001)==0xff){s1=0;s2=0;}//首次讀取,如果讀到0xFF說明沒有存過數據,直接付給00值
  201.         else
  202.         {
  203.          s1=Byte_Read(0X0001);
  204.          s2=Byte_Read(0X0002);
  205.         }
  206.         s2=s2*10;
  207.         s=s2+s1;
  208.    while(1)
  209.     {
  210. //          if(ba==1){dat=((ADCRead(7)*1000)/249);ba=0;}
  211.           if(ba==1){dat=((ADCRead(7)*51)/255);dat1=dat*2;ba=0;} //51是單片機的工作電壓,單片機的工作電壓是多少這個就是多少
  212. //          if(ba==1){dat=ADCRead(7);dat1=dat*100/249;ba=0;}
  213.           if((y==0)&&(z==0)){zs=1;led(dat1);} //zs標志位控制小數點
  214.           if(y==1){zs=0;led(s1);}
  215.           if(y==2){zs=0;led(s2);}
  216.           if(y==3){zs=1;z=0;led(s);}
  217.           if(dat1>s){out=0;}else{out=1;}
  218.           KeyRead(); //按鍵掃描
  219.           key_1();
  220.           key_2();
  221.           if(k==1)
  222.           {
  223.              Sector_Erase(0);
  224.                  Byte_Program(0x0001,s1);  //寫入扇區
  225.                  Byte_Program(0x0002,(s2/10));  //寫入扇區
  226.                  k=0;
  227.           }
  228.         }

  229. }
  230. //讀一字節,調用前需打開IAP 功能,入口:DPTR = 字節地址,返回:A = 讀出字節
  231. INT8U Byte_Read(INT16U add)
  232. {
  233.     IAP_DATA = 0x00;
  234.     IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設置Flash 操作等待時間
  235.     IAP_CMD = 0x01;                 //IAP/ISP/EEPROM 字節讀命令

  236.     my_unTemp16.un_temp16 = add;
  237.     IAP_ADDRH = my_unTemp16.un_temp8[0];    //設置目標單元地址的高8 位地址
  238.     IAP_ADDRL = my_unTemp16.un_temp8[1];    //設置目標單元地址的低8 位地址

  239.     //EA = 0;
  240.     IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
  241.     IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
  242.     _nop_();
  243.     //EA = 1;
  244.     IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
  245.                     //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
  246.     return (IAP_DATA);
  247. }
  248. /*********************************************************************************************/
  249. //字節編程,調用前需打開IAP 功能,入口:DPTR = 字節地址, A= 須編程字節的數據
  250. void Byte_Program(INT16U add, INT8U ch)
  251. {
  252.     IAP_CONTR = ENABLE_ISP;         //打開 IAP 功能, 設置Flash 操作等待時間
  253.     IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字節編程命令

  254.     my_unTemp16.un_temp16 = add;
  255.     IAP_ADDRH = my_unTemp16.un_temp8[0];    //設置目標單元地址的高8 位地址
  256.     IAP_ADDRL = my_unTemp16.un_temp8[1];    //設置目標單元地址的低8 位地址

  257.     IAP_DATA = ch;                  //要編程的數據先送進IAP_DATA 寄存器
  258.     //EA = 0;
  259.     IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
  260.     IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
  261.     _nop_();
  262.     //EA = 1;
  263.     IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
  264.                     //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
  265. }
  266. /*********************************************************************************************
  267. //擦除扇區, 入口:DPTR = 扇區地址 */
  268. void Sector_Erase(INT16U add)
  269. {
  270.     IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設置Flash 操作等待時間
  271.     IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇區擦除命令

  272.     my_unTemp16.un_temp16 = add;
  273.     IAP_ADDRH = my_unTemp16.un_temp8[0];    //設置目標單元地址的高8 位地址
  274.     IAP_ADDRL = my_unTemp16.un_temp8[1];    //設置目標單元地址的低8 位地址

  275.     //EA = 0;
  276.     IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發寄存器,每次都需如此
  277.     IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發起動
  278.     _nop_();
  279.     //EA = 1;
  280.     IAP_Disable();  //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
  281.                     //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
  282. }
  283. /*********************************************************************************************/
  284. void IAP_Disable()
  285. {
  286.     //關閉IAP 功能, 清相關的特殊功能寄存器,使CPU 處于安全狀態,
  287.     //一次連續的IAP 操作完成之后建議關閉IAP 功能,不需要每次都關
  288.     IAP_CONTR = 0;      //關閉IAP 功能
  289.     IAP_CMD   = 0;      //清命令寄存器,使命令寄存器無命令,此句可不用
  290.     IAP_TRIG  = 0;      //清命令觸發寄存器,使命令觸發寄存器無觸發,此句可不用
  291.     IAP_ADDRH = 0;
  292.     IAP_ADDRL = 0;
  293. }
復制代碼

image004.jpg (21 KB, 下載次數: 75)

image004.jpg

image006.jpg (21.69 KB, 下載次數: 77)

image006.jpg

image010.jpg (38.38 KB, 下載次數: 84)

image010.jpg

image014.jpg (30.55 KB, 下載次數: 77)

image014.jpg

GYJ-0298_0~10V電壓報警模塊開關量干節點輸出測試程序.rar

52.1 KB, 下載次數: 24, 下載積分: 黑幣 -5

GYJ-0298_0~10V電壓報警模塊開關量干節點輸出工程原理圖及PCB圖.pdf

402.8 KB, 下載次數: 22, 下載積分: 黑幣 -5

GYJ-0298_0~10V電壓報警模塊開關量干節點輸出使用手冊.pdf

1.52 MB, 下載次數: 20, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女久久久久久久久久久 | 精品久久久久久久 | 日本一道本视频 | 在线一级片 | 亚洲欧美视频 | 综合久久综合久久 | 国产91在线 | 欧美 | 精品久久久久久一区二区 | 亚洲精品www久久久 www.蜜桃av | 国产香蕉视频在线播放 | 91免费观看国产 | 四虎成人免费视频 | 天堂va在线 | 天天影视网天天综合色在线播放 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 黄片毛片免费观看 | 成人黄色电影免费 | 色综合天天综合网国产成人网 | 免费午夜视频在线观看 | 91免费视频 | 欧美亚洲成人网 | 国产999精品久久久久久 | 中国大陆高清aⅴ毛片 | 最新中文字幕在线 | 精品久久久久久久久久久久久久 | 羞羞网站在线免费观看 | 日日摸日日碰夜夜爽2015电影 | 成人在线免费看 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 亚洲黄色高清视频 | 国产黄色网| 国产成人99久久亚洲综合精品 | 81精品国产乱码久久久久久 | 国产精品视频在线观看 | 日韩午夜电影在线观看 | 久久久久国产 | a网站在线观看 | 国产综合久久 | 本道综合精品 | 欧美久久精品一级c片 | www.日本在线播放 |