单片机/MCUwilliam hill官网
直播中

yingtao246

9年用户 37经验值
擅长:861044
私信 关注
[问答]

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

本帖最后由 yingtao246 于 2015-5-2 11:17 编辑

程序单个都对,但是在主程序中组合在一起,按键程序就失效了……请问各位大神……程序如何修改?

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

***it key0=P3^3;
***it key1=P3^4;
***it key2=P3^5;
***it 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);
  }  
}


以下是adc0809的程序
#include"adc0809.h"
#include"delay.h"
#include"lcd1602.h"
#include
#define uint unsigned int
#define uchar unsigned char
***it P27 = P2^7;
***it EOC = P2^3;
***it ST = P3^0;
***it 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);
     
DelayMs(20);
  LCD_Write_Data(table);
   DelayMs(20);
   LCD_Write_Data(table[g]);
   DelayMs(20);

  }
     }
}


已退回1积分

回帖(6)

yingtao246

2015-5-2 11:16:39
引用: xianyoudian 发表于 2015-5-2 10:44
库文件是否加载?

加载了,按键无法启用
举报

武力戡乱

2015-5-3 23:51:20
做中断里啊,亲!程序越来越大,可不是反应慢了吗!
举报

a410670107

2015-5-4 20:37:11
按键扫描用中断……
举报

yingtao246

2015-5-4 20:48:20
引用: a410670107 发表于 2015-5-4 20:37
按键扫描用中断……

不用中断可以么,我在主程序里用了case语句……然后能动了
举报

a410670107

2015-5-4 21:07:49
引用: yingtao246 发表于 2015-5-4 20:48
不用中断可以么,我在主程序里用了case语句……然后能动了

呃……好吧  中断更优
举报

archai

2015-5-19 09:58:53
看熱鬧ing................................
举报

更多回帖

×
20
完善资料,
赚取积分