叶樱 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
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况