找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3241|回复: 4
打印 上一主题 下一主题
收起左侧

为什么我单片机驱动lcd1602只亮不显示?

[复制链接]
跳转到指定楼层
楼主

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

/*LCD1602显示模块*/
/*用于PROTUES仿真
#define LCD1602_DATAPINS P2
sbit LCD1602_RS=P3^0;
sbit LCD1602_RW=P3^1;            
sbit LCD1602_E=P3^2;      */


#define LCD1602_DATAPINS P0
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;            
sbit LCD1602_E=P2^7;

/*按键调节模块*/
sbit k1=P1^1;//功能键
sbit k2=P1^2;//加
sbit k3=P1^3;//减
void keyscan();
void key1_switch();
void key2_add();
void key3_minus();

uchar k_num;
void LCD1602_SetTemp(uchar add,uchar dat);
uchar high=90,low=10,set_t=30,set_d=2;//这里的数据类型可能有问题!!

/*其他模块接口*/
sbit DSPORT=P3^7; //温度传感器单总线端
sbit SPEAKER=P1^5;//蜂鸣器
sbit RELAY=P1^4;//继电器
sbit COOLER=P1^7;//降温装置

/*LCD1602相关函数*/
void Delay1us(uint a);
void LCD1602_WriteCom(uchar com);//LCD1602写入8位命令子函数
void LCD1602_WriteData(uchar dat);  
void LCD1602_Init();//LCD1602初始化子程序        
void LCD1602_ShowTemp(int temp);

/*DS18B20温度传感器相关函数*/
void  Delay15us(uchar aa);
uchar Ds18b20Init();
void  Ds18b20WriteByte(uchar dat);
uchar Ds18b20ReadByte();
void  Ds18b20SwitchTemp();
int   Ds18b20ReadTemp();

float temp_max=125.00,temp_min=-55.00;
uchar ii=0,jj=0,kk=0;
uchar words_h[2]={"H="};
uchar words_l[2]={"L="};
uchar words_s[4]={"Set="};
void Sound();
void Temp_control(int temp);
uchar count=0;//用来解决主程序执行太快,按键光标来不及显示的问题

void Temp_control(int temp)
{
unsigned int kk=400;
uchar set_h,set_l;
set_h=set_t+set_d;
set_l=set_t-set_d;

  if (temp<=set_h&&temp>=set_l) //设定温度范围之内
  {
     RELAY = 0; //继电器断开
    COOLER=0;//风扇关闭
  }
  else
  {
   TR0=0;

   while (kk--)
   {  
   Sound();
   }
   RELAY = 1; //继电器打开,外电路(常开触电)闭合加热
   if (temp>=set_h)//温度过高
   {
    RELAY = 0; //继电器断开
     COOLER=1;//打开
   }
   TR0=1;
  }
}

/*其他模块相关函数*/
void Sound()//蜂鸣器
{   
SPEAKER=1;
Delay15us(40);
SPEAKER=0;
Delay15us(40);
}

void Delay1us(uint a)
{
uint b,c;
for(c=a;c>0;c--)
  for(b=110;b>0;b--);
}

void LCD1602_WriteCom(uchar com)   //写入命令
{
LCD1602_E=0;
LCD1602_RS=0;//0就写指令
LCD1602_RW=0; //0就是写
LCD1602_DATAPINS=com;
Delay

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:465981 发表于 2020-10-28 13:02 | 只看该作者
看了一下代码,你把/*LCD1602显示模块*/ /*用于PROTUES仿真 #define LCD1602_DATAPINS P2 sbit LCD1602_RS=P3^0; sbit LCD1602_RW=P3^1;             sbit LCD1602_E=P3^2;      */这段你都注释掉了,但是仿真还是按照这段代码连线,这样怎么能显示?
回复

使用道具 举报

板凳
ID:188811 发表于 2020-10-28 14:24 | 只看该作者
亮说明背光没问题,不显示还是驱动没写好
回复

使用道具 举报

地板
ID:835700 发表于 2020-10-28 15:10 | 只看该作者
把/*LCD1602显示模块*/ /*用于PROTUES仿真 #define LCD1602_DATAPINS P2 sbit LCD1602_RS=P3^0; sbit LCD1602_RW=P3^1;             sbit LCD1602_E=P3^2;      */这段你都注释掉了,但是仿真还是按照这段代码连线,这样怎么能显示?
回复

使用道具 举报

5#
ID:584814 发表于 2020-10-29 08:58 | 只看该作者
看程序象是普中一类的试验板程序接口,可直接用厂家给的试验程序调试。
然后将仿真的接线按试验板调整再调试,重点在时序上。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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