叶樱 2019-07-09 15:25 采纳率: 0%
浏览 2162

为什么LCD只亮不显示?

图片说明

代码如下
#include "system.h"
#include

#define key4 (P1IN&BIT0)
#define key3 (P1IN&BIT1)
#define key2 (P1IN&BIT2)
#define key1 (P1IN&BIT3)

#define OPEN_Buzzer (P1OUT|=BIT4)
#define CLOSE_Buzzer (P1OUT&=~BIT4)

unsigned int setU=35; //上限
unsigned int setD=25; //下限
unsigned char SetFlag = 0;//设置标志

unsigned int tem; //暂存温度值
float NowTemp=0; //实际测试纸
unsigned char ReadTempFlag=0;//读取温度标志

char dis0[16];//显示暂存
char dis1[16];//显示暂存

unsigned char DisLcd=0; //显示更新

void disPlayLcd(void);
void CheckKey(void);//按键采集处理函数

void main( void )
{
IO_init();
// Uart0_init(9600);
TimerA(); //初始化定时器
TimerB();
// Init_WDT();
_EINT();

P1DIR |= (BIT4); //初始化输出
P1DIR &= ~(BIT0|BIT1|BIT2|BIT3);//初始化输入

OPEN_Buzzer; //开启蜂鸣器

LcdReset(); //LCD1602初始化
delay_ms(100);

CLOSE_Buzzer;//关断蜂鸣器

while(1)
{
CheckKey();//读取按键 并进行修改
if(ReadTempFlag==1)//读取温度标志
{
ReadTempFlag=0;
tem=ReadTemp(); //读取温度
}
if(DisLcd==1) //更新显示
{
DisLcd=0;
NowTemp=(float)tem*0.0625;//计算温度 根据手册来
sprintf(dis0,"NowTemp: %4.1f ",NowTemp);//更新显示
DispStr(0,0,(unsigned char *)dis0);//打印显示
Disp1Char(13,0,0xdf);//显示符号
Disp1Char(14,0,'C');

  disPlayLcd();// 显示设置第二行数据

  if((NowTemp<setD)||(NowTemp>setU))//对比上下限
  {
    OPEN_Buzzer;    //开启蜂鸣器
  }
  else
  {
    CLOSE_Buzzer;//关断蜂鸣器
  }

// LPM2; //进入低功耗 定时器中断中退出中断
}
}
}

void disPlayLcd(void)
{
if(SetFlag == 0)//按键设置标志
{
sprintf(dis1," %02d- %02d ",(int)setD,(int)setU); //更新显示标志
}
else if(SetFlag == 1)//按键设置标志0
{
sprintf(dis1,"s%02d- %02d ",(int)setD,(int)setU);//更新显示标志
}

else if(SetFlag == 2)//按键设置标志
{
sprintf(dis1," %02d-s%02d ",(int)setD,(int)setU);//更新显示标志
}
DispStr(3,1,(uchar *)dis1);//显示
}

void CheckKey(void)//按键采集处理函数
{
static unsigned char rekey =0;
if((key1==0)||(key2==0)||(key3==0)||(key4==0)) //检测到按键按下
{
delay_ms(10); //小抖动
if(rekey==0)
{
if(key1==0) //检测是否按下
{
rekey=1;
SetFlag++;//设置标志
if(SetFlag >= 3) SetFlag = 0;
}
else if(key2==0)//设置值键
{
rekey=1;
if(SetFlag==1) //处于设置1
{
if(setD > 0 )//数据-1
{setD=setD-1;}
}
else if(SetFlag==2)//处于设置2
{
if(setU > 0)//数据-1
{setU=setU-1;}
}

}
else if(key3==0)//设置值键
{
rekey=1;
if(SetFlag==1) //处于设置1
{
if(setD < 99 )//数据+1
{setD=setD+1;}
}
else if(SetFlag==2)//处于设置2
{
if(setU < 99 )//数据+1
{setU=setU+1;}
}

}
else if(key4==0)//设置值键
{
rekey=1;
SetFlag = 0;//取消设置
}
}
}
else
{
rekey=0; //防止重复检测到按键
}
}

  • 写回答

2条回答

  • 「已注销」 2019-07-10 15:11
    关注

    没得时钟信号源,单片机可以运行吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料