找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2895|回复: 2
打印 上一主题 下一主题
收起左侧

单片机智能燃气表proteus仿真与源程序

[复制链接]
跳转到指定楼层
楼主
智能气表程序仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<at89x52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #include"1602.h"
  6. uchar temp_1[]={"Shengyu:        "};        //显示第一行       
  7. uchar temp_2[]={"         000.0M3"};        //显示第2行               
  8.                                                                                                                                                                          
  9. sbit k1=P1^0;//按键定义
  10. sbit shuchu1=P3^7; //输出脚定义
  11. sbit BZ=P3^0;//蜂鸣器
  12. sbit led=P2^6;
  13. sbit P17=P1^7;
  14. uint zong;
  15. uchar m;
  16. uint M1;
  17. bit flag;
  18. uchar TEMP=11;
  19. void key()// 按键检测
  20. {
  21.   if(k1==0)//设置预置数加
  22.   {
  23.    delay(5);
  24.    if(k1==0)
  25.    {
  26.     zong+=10;
  27.     if(zong>=1000)
  28.     zong=1000;
  29.     while(k1==0);
  30.    }
  31.   }
  32. }


  33. void beep()// 报警检测
  34. {

  35. if(zong==0)        //没流量了报警
  36. {
  37.         m++;
  38.         if(m>=15)
  39.         {
  40.         m=0;
  41.         BZ=!BZ;
  42.         led=!led;
  43.         }
  44. }
  45. else
  46. {
  47. BZ=1;
  48. led=1;
  49. }
  50. }


  51. main()
  52. {

  53. EX0=1;//开外部中断0
  54. PX0=1;// 外部中断0高优先级
  55. IT0=1;//触发模式0= 电平 1=边沿触发
  56.         TMOD = 0x11;
  57. ET1=1;

  58.         TH1 = (65535-50000)/256;
  59.         TL1 = (65535-50000)%256;
  60.         EA=1;                                                                               

  61. LCD_Initial();    //液晶初始化
  62. while(1)
  63. {
  64.    key();// 按键检测
  65.    temp_2[9]=zong/1000+0x30;//转换成液晶字符下同
  66.    temp_2[10]=zong/100%10+0x30;
  67.    temp_2[11]=zong/10%10+0x30;
  68.                  temp_2[13]=zong%10+0x30;

  69.                         if(flag)        //正确数据总流量-0.1
  70.                         {
  71.                         flag=0;
  72.                         if(zong>0)
  73.                  zong-=1;
  74.                         }


  75.                                 if(zong>0)        //总气量>0 输出继电器
  76.                                 shuchu1=0;
  77.                                 else
  78.                                 shuchu1=1;        //小于0 关闭继电器


  79.                  beep();// 报警检测
  80.    GotoXY(0,0);//显示起始位置   Y=0,第一行,Y=1 第二行//显示第一行
  81.    Print(temp_1);// 内容
  82.    GotoXY(0,1);//显示起始位置   Y=0,第一行,Y=1 第二行//显示第一行
  83.    Print(temp_2);// 内容

  84. }

  85. }
  86.        


  87. void my_INT0(void) interrupt 0//外部中断0有信号                                就进入中断
  88. {
  89.         M1++;                //进来的脉冲进行计数
  90.         TR1=1;                //同时启动定时器
  91. }

  92. void timer1() interrupt 3        //定时器1中断
  93. {
  94.         TH1 = (65535-50000)/256;
  95.         TL1 = (65535-50000)%256;        //50MS中断到
  96.        
  97. if(M1==10)//看收到是否10个脉冲 是就正确
  98.         flag=1;        //正确标识
  99.         M1=0;
  100.         TR1=0;
  101. ……………………

  102. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
智能气表.zip (154.27 KB, 下载次数: 47)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:530516 发表于 2020-1-2 13:39 | 只看该作者
你这个的功能为啥看起来不怎么合适,下载之后发现很多不合适
回复

使用道具 举报

板凳
ID:679425 发表于 2020-1-2 16:16 | 只看该作者
应该会有启发感觉不错的例子
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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