微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 瓦斯气体浓度怎么显示不出来?求哪位大神指点。

瓦斯气体浓度怎么显示不出来?求哪位大神指点。

时间:10-02 整理:3721RD 点击:
#include<REG52.h>
#include<intrins.h>
#define uchar unsigned char //定义数据类型
#define uint unsigned int
bit flag; //标志位
/**************1602显示字符***************/
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //1602显示数组
uchar code tab[]="Zheng university";  //1602显示字符
uchar code table1[]="Gas strength0.5%";
/**************1602控制端口管脚定义***************/
sbit lcdrs=P3^0;   
sbit lcdrw=P3^1;
sbit lcden=P3^2;
sbit start=P3^4;
sbit P0_7=P0^7;
/**************AD0809控制端口定义***************/
sbit eoc=P3^3;  
sbit oe=P3^5;
sbit CLK=P3^6;
/**************其他变量***************/
uchar shi,ge,shi1,bai1,num;
uint temp;
uchar count;//蜂鸣器常量
/**************系统延时函数***************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
/**************蜂鸣器延时(500HZ)***************/
void delay500(void)
{
unsigned char i;
for(i=250;i>0;i--)
{
  _nop_();
}
}
/**************1602命令函数***************/
void write_com(uchar com)
{
lcdrs=0;
P1=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/**************1602数据函数***************/
void write_data(uchar date)
{
lcdrs=1;
P1=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/**************系统初始化***************/
void init()   
{
oe=0;
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
temp=0;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}
/**************1602显示函数***************/
void voltage(uchar ge,uchar shi,uchar bai1,uchar shi1)
{
  shi=temp/1000;
  ge=temp%1000/100;
  shi1=temp%100/10;
  bai1=temp%10;
  write_com(0x80);
  for(num=0;num<16;num++)
  {
   write_data(tab[num]);
  }
  write_com(0xc0);
  for(num=0;num<6;num++)
  {
   write_data(table1[num]);
  }
  write_com(0xc7);
  write_data(table[shi]);
  delay(1);
  write_com(0xc8);
  write_data(table[ge]);
  delay(1);
  write_com(0xc9);
  write_data('.');
  delay(1);
  write_com(0xca);
  write_data(table[shi1]);
  delay(1);
  write_com(0xcb);
  write_data(table[bai1]);
  delay(1);
  write_com(0xcc);
  for(num=0;num<2;num++)
  {
   write_data(table1[num]);
  }
        /*AD控制程序*/
  start=0;
  start=1;
  start=0;
  while(!eoc);
  oe=1;
  temp=P2;
  oe=0;
  temp=(temp*2*1*98.039216/100);//AD采样换算
/*****蜂鸣器报警程序*******/
/**瓦斯爆炸浓度:5%--16%,本例中采用5%--15%**/
  if(temp>=200)
  {
   for(count=200;count>0;count--)
   {
    P0_7=~P0_7;
    delay500();
   }
   for(count=200;count>0;count--)
   {
    P0_7=~P0_7;
    delay500();
    delay500();
   }
  }
}
/**************中断***************/
void timer0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
CLK=~CLK;   //CLK按位取反,代替了方波脉冲   
}
void main()
{  
init();
    while(1)
    {  
  voltage(ge,shi,bai1,shi1);
}
}
求帮看看程序是不是有问题?该怎么改才能使1602显示瓦斯气体的浓度


有答案了么?

你是什么情况

试试改成这样
void voltage(void)
{
        uchar ge,uchar shi,uchar bai1,uchar shi1
       
      /*AD控制程序*/
  start=0;
  start=1;
  start=0;
  while(!eoc);
  oe=1;
  temp=P2;
  oe=0;
  temp=(temp*2*1*98.039216/100);//AD采样换算

  shi=temp/1000;
  ge=temp%1000/100;
  shi1=temp%100/10;
  bai1=temp%10;
  write_com(0x80);
  for(num=0;num<16;num++)
  {
   write_data(tab[num]);
  }
  write_com(0xc0);
  for(num=0;num<6;num++)
  {
   write_data(table1[num]);
  }
  write_com(0xc7);
  write_data(table[shi]);
  delay(1);
  write_com(0xc8);
  write_data(table[ge]);
  delay(1);
  write_com(0xc9);
  write_data('.');
  delay(1);
  write_com(0xca);
  write_data(table[shi1]);
  delay(1);
  write_com(0xcb);
  write_data(table[bai1]);
  delay(1);
  write_com(0xcc);
  for(num=0;num<2;num++)
  {
   write_data(table1[num]);
  }
/*****蜂鸣器报警程序*******/
/**瓦斯爆炸浓度:5%--16%,本例中采用5%--15%**/
  if(temp>=200)
  {
   for(count=200;count>0;count--)
   {
    P0_7=~P0_7;
    delay500();
   }
   for(count=200;count>0;count--)
   {
    P0_7=~P0_7;
    delay500();
    delay500();
   }
  }
}

有了,问题解决了。

哪里不对了,可以分享一下解决方案么

可不可以告诉我一下解决方案,我也有相同问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top