找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机独立按键加lcd1602+adc0809显示问题

[复制链接]
ID:78521 发表于 2015-5-1 21:51 | 显示全部楼层 |阅读模式
程序单个都对,但是在主程序中组合在一起,按键程序就失效了……请问各位大神……程序如何修改?

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>
#include"adc0809.h"
#include"lcd1602.h"
#include"delay.h"
/* key0用于选择显示的内容,当前温度或者报警温度  */
/* 同时也用于选择对高温操作还是对低温操作        */
/* key0==1时,key1对高温加,key2对高温减         */
/* key0==2时,key1对低温加,key2对低温减         */

sbit key0=P3^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit led=P2^0;
unsigned char flag=0,i=0;
void keyscan()
{
key0=1;
key1=1;
key2=1;
if(!key0)   
{
      
    DelayMs(10);
    if(!key0)
    {
     while(!key0);
    if (i<2)
    {
     flag++;
        i++;
     flag=flag%3;   //flag= 0~
    }
    else
    {
     adc_display();
     flag=0;
     i=0;
    }
    }
}
if(flag==1)
{
   if(!key1)
   {
     DelayMs(10);
     if(!key1)
     {
      while(!key1);
     { LCD_Write_String(0,0,"we");  }
     }
   }
}
if(flag==1)
{
   if(!key2)
   {
     DelayMs(10);
     if(!key2)
     {
      while(!key2);
     { LCD_Write_String(0,0,"er");  }
     }
   }
}

if(flag==2)
{
   if(!key1)
   {
     DelayMs(10);
     if(!key1)
     {
      while(!key1);
     { LCD_Write_String(1,2,"qw");  }
     }
   }
}
if(flag==2)
{
   if(!key2)
   {
     DelayMs(10);
     if(!key2)
     {
      while(!key2);
     { LCD_Write_String(1,2,"rt");  }
     }
   }
}
}
   

void main()
{
LCD_Init();
LCD_Clear();
while(1)
{
      adc_display();
   keyscan();
   DelayMs(10);
   }  
}
回复

使用道具 举报

ID:78521 发表于 2015-5-1 22:09 | 显示全部楼层
以下是adc0809的程序
#include"adc0809.h"
#include"delay.h"
#include"lcd1602.h"

#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit P27 = P2^7;       
sbit EOC = P2^3;
sbit ST = P3^0;
sbit OE = P3^1;

uchar getdata = 0;       
uchar code table[]="0123456789";//定义显示的数组
uchar q,b,s,g;

void adc0809(void)
{
        float temp=0.0;
        ST=0;//ADC0809初始化
        ST=1;
        _nop_();
        _nop_();
        ST=0;
        while(EOC==0)//等待转换完成
        {
                OE=1;
                getdata=P0;//p2选择为ADC的数据口
                OE=0;
        }

        //temp=(float) getdata*5.0/256;//数据处理
        //temp=temp/100.0;
        temp=getdata;
        q=(int)temp/1000;
        b=(int)temp%1000/100;
        s=(int)temp%1000%100/10;
        g=(int)temp%10;
}

void adc_display(void)
{
        LCD_Init();
        OE=0;
        while (1)
        {  
                  LCD_Write_String(0,0,"current value:");
                  adc0809();
                      LCD_Write_Com(0x80+0x40);//1602显示处理好的数据
                {       
                        LCD_Write_Data(table[q]);
                    DelayMs(20);
                        LCD_Write_Data(table[b]);
                    DelayMs(20);
                        LCD_Write_Data(table[s]);
                        DelayMs(20);
                        LCD_Write_Data(table[g]);
                        DelayMs(20);
                }
     }
}
回复

使用道具 举报

ID:80407 发表于 2015-6-8 06:13 来自手机 | 显示全部楼层
楼主,你好!我现在也遇到了这个问题你是怎么解决的啊?
回复

使用道具 举报

ID:58502 发表于 2015-6-8 12:51 | 显示全部楼层
把lcd1602.h内容也放出来看看
回复

使用道具 举报

ID:82659 发表于 2015-6-10 21:47 | 显示全部楼层
楼主好牛啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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