找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3922|回復: 4
收起左側

單片機瓦斯監(jiān)測的設計protues仿真及源碼

[復制鏈接]
ID:137190 發(fā)表于 2016-9-27 20:47 | 顯示全部樓層 |閱讀模式
瓦斯監(jiān)測的傳感器接在adc0809的輸入端,模數(shù)轉換之后,再給單片機來處理 下面是仿真原理圖:歡迎大家改進并增強功能.
0.png

源程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char        //定義數(shù)據(jù)類型
  4. #define uint unsigned int
  5. bit flag; //標志位
  6. /**************1602顯示字符***************/
  7. uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};        //1602顯示數(shù)組
  8. uchar code tab[]="Shenyangligong  University";  //1602顯示字符
  9. uchar code table1[]="Gas  strength0.5%";
  10. /**************1602控制端口管腳定義***************/
  11. sbit lcdrs=P3^0;   
  12. sbit lcdrw=P3^1;
  13. sbit lcden=P3^2;
  14. sbit start=P3^4;
  15. /**************AD0809控制端口定義***************/
  16. sbit eoc=P3^3;         
  17. sbit oe=P3^5;
  18. sbit CLK=P3^6;
  19. sbit P0_7=P0^7;
  20. /**************其他變量***************/
  21. uchar shi,ge,shi1,bai1,num;
  22. uint temp;
  23. uchar count;//蜂鳴器常量
  24. /**************系統(tǒng)延時常量***************/
  25. void delay(uint z)
  26. {
  27.         uint x,y;
  28.         for(x=z;x>0;x--)
  29.                 for(y=110;y>0;y--);
  30. }
  31. /**************蜂鳴器延時(500HZ)***************/
  32. void dely500(void)
  33. {
  34.         unsigned char i;
  35.         for(i=250;i>0;i--)
  36.         {
  37.                 _nop_();
  38.         }
  39. }
  40. /**************1602命令函數(shù)***************/
  41. void write_com(uchar com)
  42. {
  43.         lcdrs=0;
  44.         P1=com;
  45.         delay(1);
  46.         lcden=1;
  47.         delay(1);
  48.         lcden=0;
  49. }
  50. /**************1602數(shù)據(jù)函數(shù)***************/
  51. void write_data(uchar date)
  52. {
  53.         lcdrs=1;
  54.         P1=date;
  55.         delay(1);
  56.         lcden=1;
  57.         delay(1);
  58.         lcden=0;
  59. }
  60. /**************系統(tǒng)初始化***************/
  61. void init()          
  62. {
  63.         oe=0;
  64.         lcden=0;
  65.         lcdrw=0;
  66.         write_com(0x38);
  67.         write_com(0x0c);
  68.         write_com(0x06);
  69.         write_com(0x01);
  70.         write_com(0x80);
  71.         temp=0;
  72.         TMOD=0x01;
  73.         TH0=(65536-500)/256;
  74.         TL0=(65536-500)%256;
  75.         EA=1;
  76.         ET0=1;
  77.         TR0=1;
  78. }
  79. /**************1602顯示函數(shù)***************/
  80. void voltage(uchar ge,uchar shi,uchar bai1)
  81. {
  82.                 shi=temp/1000;
  83.                 ge=temp%1000/100;
  84.                 shi1=temp%100/10;
  85.                 bai1=temp%10;
  86.                 write_com(0x80);
  87.                 for(num=0;num<16;num++)
  88.                 {
  89.                         write_data(tab[num]);
  90.                 }
  91.                 write_com(0xc0);
  92.                 for(num=0;num<6;num++)
  93.                 {
  94.                         write_data(table1[num]);
  95.                 }
  96.                 write_com(0xc7);
  97.                 write_data(table[shi]);
  98.                 delay(1);
  99.                 write_com(0xc8);
  100.                 write_data(table[ge]);
  101.                 delay(1);
  102.                 write_com(0xc9);
  103.                 write_data('.');
  104.                 delay(1);
  105.                 write_com(0xca);
  106.                 write_data(table[shi1]);
  107.                 delay(1);
  108.                 write_com(0xcb);
  109.                 write_data(table[bai1]);
  110.                 delay(1);
  111.                 write_com(0xcc);
  112.                 for(num=0;num<2;num++)
  113.                 {
  114.                         write_data(table1[num]);
  115.                 }
  116.         /*AD控制程序*/
  117.                 start=0;
  118.                 start=1;
  119.                 start=0;
  120.                 while(!eoc);       
  121.                 oe=1;
  122.                 temp=P2;
  123.                 oe=0;
  124.                 temp=(temp*2*1*98.039216/100);//AD采樣換算
  125. /*****蜂鳴器報警程序*******/
  126. /**瓦斯爆炸濃度:5%——16%,本例中采用5%——15%**/
  127.                 if(temp>=200)
  128.                 {
  129.                         for(count=200;count>0;count--)
  130.                         {
  131.                                 P0_7=~P0_7;
  132.                                 dely500();
  133.                         }
  134.                         for(count=200;count>0;count--)
  135.                         {
  136.                                 P0_7=~P0_7;
  137.                                 dely500();
  138.                                 dely500();
  139.                         }
  140.                 }
  141. }
  142. /**************中斷***************/
  143. void timer0() interrupt 1
  144. {
  145.         TH0=(65536-500)/256;
  146.         TL0=(65536-500)%256;
  147.         CLK=~CLK;                        //CLK按位取反,代替了方波脈沖
  148. }
  149. void main()
  150. {  
  151.         init();
  152.            while(1)
  153.            {        
  154.                 voltage(ge,shi,bai1);
  155.         }
  156. }
復制代碼



瓦斯監(jiān)測的設計protues仿真.zip

23.2 KB, 下載次數(shù): 80, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:199244 發(fā)表于 2017-5-10 19:35 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:199244 發(fā)表于 2017-5-10 19:36 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:202606 發(fā)表于 2017-5-30 12:11 | 顯示全部樓層
這個仿真原理圖不完整啊,樓主
回復

使用道具 舉報

ID:314868 發(fā)表于 2018-4-23 21:35 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表