找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3137|回复: 4
收起左侧

单片机瓦斯监测的设计protues仿真及源码

[复制链接]
ID:137190 发表于 2016-9-27 20:47 | 显示全部楼层 |阅读模式
瓦斯监测的传感器接在adc0809的输入端,模数转换之后,再给单片机来处理 下面是仿真原理图:欢迎大家改进并增强功能.
0.png

源程序:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char        //定义数据类型
  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显示数组
  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. /**************系统延时常量***************/
  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命令函数***************/
  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数据函数***************/
  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. /**************系统初始化***************/
  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显示函数***************/
  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. }
复制代码



瓦斯监测的设计protues仿真.zip

23.2 KB, 下载次数: 79, 下载积分: 黑币 -5

回复

使用道具 举报

ID:199244 发表于 2017-5-10 19:35 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:199244 发表于 2017-5-10 19:36 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:202606 发表于 2017-5-30 12:11 | 显示全部楼层
这个仿真原理图不完整啊,楼主
回复

使用道具 举报

ID:314868 发表于 2018-4-23 21:35 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表