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

QQ登錄

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

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

單片機(jī)煙霧可燃?xì)怏w甲烷天然氣檢測(cè)程序

[復(fù)制鏈接]
ID:228811 發(fā)表于 2017-8-22 16:14 | 顯示全部樓層 |閱讀模式
51單片機(jī)做的煙霧可燃?xì)怏w甲烷天然氣檢測(cè)程序


單片機(jī)源程序如下:
  1. /*
  2. 用打火機(jī),液晶顯示的第二行是閾值,大于該值,報(bào)警。
  3. 閾值不宜大于400
  4. */
  5. #include<reg52.h>
  6. #include<intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. #define IO_1602 P0 //IO 口
  10. sbit RS_1602=P2^5;
  11. sbit RW_1602=P2^6;
  12. sbit E_1602=P2^7;
  13. sbit CS=P1^0;
  14. sbit CLK=P1^1;
  15. sbit DIO=P1^2;
  16. sbit beed=P1^7;
  17. sbit key0=P3^0;
  18. sbit key1=P3^1;
  19. void delay_ms(unsigned int t)//11.0592MHz 1ms
  20. {
  21.         uchar x,y;
  22.         for(t;t>0;t--)
  23.         {
  24.                 for(x=0;x<114;x++)
  25.                 for(y=0;y<1;y++);
  26.         }
  27. }
  28. void Wr1602Cmd(unsigned char dat)
  29. {//寫(xiě)命令函數(shù)
  30.         E_1602=0;
  31.         IO_1602=dat;
  32.         RS_1602=0;
  33.         RW_1602=0;
  34.         E_1602=1;
  35.         delay_ms(1);
  36.         E_1602=0;
  37.         delay_ms(1);
  38. }
  39. void Wr1602Dat(unsigned char dat)
  40. {//寫(xiě)數(shù)據(jù)函數(shù)
  41.         E_1602=0;
  42.         IO_1602=dat;
  43.         RS_1602=1;
  44.         RW_1602=0;
  45.         E_1602=1;
  46.         delay_ms(1);
  47.         E_1602=0;
  48.         delay_ms(1);
  49. }
  50. void Init1602(void)
  51. {
  52.         delay_ms(20);
  53.         Wr1602Cmd(0x38);
  54.         delay_ms(5);
  55.         Wr1602Cmd(0x38);
  56.         delay_ms(5);
  57.         Wr1602Cmd(0x06);
  58.         Wr1602Cmd(0x0c);//
  59.         Wr1602Cmd(0x01);//清屏
  60.         Wr1602Cmd(0x80);//設(shè)置地址
  61. }
  62. uchar RdAdc0832(bit Hx)
  63. {
  64.         uchar value0,value1,i;
  65.         CS=1;CLK=0;DIO=1;
  66.         CS=0;
  67.         DIO=1;_nop_();_nop_();_nop_();_nop_(); //寫(xiě) ST 位
  68.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  69.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  70.         DIO=1;_nop_();_nop_();_nop_();_nop_();//寫(xiě) SGL 位
  71.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  72.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  73.         DIO=Hx;_nop_();_nop_();_nop_();_nop_();//寫(xiě)通道號(hào)
  74.         //位
  75.         CLK=1;_nop_();_nop_();_nop_();_nop_();
  76.         CLK=0;_nop_();_nop_();_nop_();_nop_();
  77.         DIO=1;
  78.         for(i=0;i<8;i++)
  79.         {
  80.                 CLK=1;_nop_();_nop_();_nop_();_nop_();
  81.                 CLK=0;_nop_();_nop_();_nop_();_nop_();
  82.                 value0<<=1;
  83.                 if(DIO==1) value0|=0x01;
  84.                 else value0&=0xfe;
  85.         }
  86.         for(i=0;i<8;i++)
  87.         {
  88.                 value1>>=1;
  89.                 if(DIO==1) value1|=0x80;
  90.                 else value1&=0x7f;
  91.                 CLK=1;_nop_();_nop_();_nop_();_nop_();
  92.                 CLK=0;_nop_();_nop_();_nop_();_nop_();
  93.         }
  94.         CS=1;
  95.         if(value0!=value1) P1&=0X7F;
  96.         else P1|=0X80;
  97.         return value0;
  98. }
  99. void main()
  100. {
  101.         unsigned long i,a,b,c,d,temp=200,x,y,z;

  102.         Init1602();
  103.         while(1)
  104.         {
  105.                 Wr1602Cmd(0x80);
  106.                 i=RdAdc0832(0);
  107.                 i=(i*5000/255);
  108.                 a=i/1000;
  109.                 b=i%1000/100;
  110.                 c=i%1000%100%10;
  111.                 Wr1602Dat('V');
  112.                 Wr1602Dat('O');
  113.                 Wr1602Dat('L');
  114.                 Wr1602Dat('=');
  115.                 Wr1602Dat('0'+a);
  116.                 Wr1602Dat('.');
  117.                 Wr1602Dat('0'+b);
  118.                 Wr1602Dat('0'+c);
  119.                 Wr1602Dat('0'+i%1000%100%10);
  120.                 Wr1602Dat('V');
  121.                 d=a*100+b*10+c;
  122.                 Wr1602Cmd(0xC0);
  123.                 Wr1602Dat('S');                                        //閾值 threshold
  124.                 Wr1602Dat('e');
  125.                 Wr1602Dat('t');
  126.                 Wr1602Dat(' ');
  127.                 Wr1602Dat('V');
  128.                 Wr1602Dat('a');
  129.                 Wr1602Dat('l');
  130.                 Wr1602Dat('u');
  131.                 Wr1602Dat('e');
  132.                 Wr1602Dat(':');

  133.                  if(key0==0)  
  134.                 {       
  135.                          
  136.                         delay_ms(10);        //消抖
  137.                         if(key0==0)
  138.                         {       
  139.                                 while(!key0);//等待按鍵松開(kāi)。
  140.                                 temp+=20;

  141.                         }                 
  142.                 }

  143.                         if(key1==0)  
  144.                 {       
  145.                          
  146.                         delay_ms(10);        //消抖
  147.                         if(key1==0)
  148.                         {       
  149.                                 while(!key1);//等待按鍵松開(kāi)。
  150.                                 temp-=20;

  151.                         }                 
  152. ……………………

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

所有資料51hei提供下載:
煙霧可燃?xì)怏w甲烷天然氣檢測(cè)程序.zip (26.76 KB, 下載次數(shù): 82)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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