lcd1602代码

**//单片机stc89c58Rd+

//main.c文件**

#include"config.h"
#include"delay.h"
#include"lcd1602.h"
//uint8 Table[8]={0x00,0x13,0x04,0x08,0x08,0x04,0x03,0x00};//自定义温度负符号

void main()
{
	Lcd1602_Init();	
	Write_Com(0x80);
	Write_Data('D');
//	Dip_Str("welA");
	while(1);
}

//delay.c

#include"config.h"
#include"delay.h"
void Delay5ms()		//@11.0592MHz
{
	unsigned char i, j;
	i = 9;
	j = 244;
	do
	{
		while (--j);
	} while (--i);
}

void Delay15ms()		//@11.0592MHz
{
	unsigned char i, j;

	i = 27;
	j = 226;
	do
	{
		while (--j);
	} while (--i);
}

//delay.h

#ifndef __DELAY_H__
#define __DELAY_H__
void Delay15ms();
void Delay5ms();
#endif

//lcd1602.c

#include"config.h"
#include"lcd1602.h"
#include"delay.h"
//#include"config.h"
extern uint8 Table[8];
void Lcd1602_Init()
{
	Delay15ms();
	Write_Com(0x38);
	Delay5ms();
	Write_Com(0x38);
		Delay5ms();
	Write_Com(0x38);
	//显示设置
	Write_Com(0x38);
	Write_Com(0x08);//显示关闭
	Write_Com(0x01);//显示清屏
	//显示光标移动设置
	Write_Com(0x06);
	Write_Com(0x0c);//显示开及光标设置
}
//写指令函数
void Write_Com(uint8 comm)
{
	while(Busy_Check() == 1);//如果忙就等待
	RS = 0;
	RW = 0;
	E = 0;
	P0 = comm;
	_nop_();
	E = 1;
	_nop_();
	E = 0;
	_nop_();
	_nop_();
}
//写数据函数
void Write_Data(uint8 Data)
{
	while(Busy_Check() == 1);//如果忙就等待
	RS = 1;
	RW = 0;
	E = 0;
	P0 = Data;//syntax error near'data',换成Data不报错,data是关键字,data数据空间
	_nop_();
	E = 1;
	_nop_();
	E = 0;
	_nop_();
	_nop_();
}
//时序延时要求不严,可以不加延时。
/*void Write_Data(int data)
{
	while(Busy_Check() == 1);//如果忙就等待
	RS = 0;
	RW = 0;
	E = 0;
	P0 = data;
	E = 1;
	E = 0;
}*/
bit Busy_Check()
{
	bit result;
	P0 = 0xff;//读数据前,将P0口拉高。
	RS = 0;
	RW = 1;
	E = 0;
	E = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	
	result = (bit)(P0&0x80);//1:bit没用括号报错。2:lcd的D0-D7中,D7=1为忙碌,0为空闲.
	E = 0;
	return result;	
}

//忙检测也可以这样写。
/*

void Lcd1602_Busy_Check(void){
	uint8 tmp;
	lcdPort = 0xff;//读数据前,将P0口拉高.

	do{
		RS = 0;
		RW = 1;
		EN = 0;
		EN = 1;
		_nop_();
		_nop_();//??CP
		tmp = lcdPort;
		_nop_();//??PQ
		EN = 0;
		_nop_();
	}while(tmp&0x80);	
}
*/
//写字符串函数
void Dip_Str(uint8 *Str)
{
	while(*Str !='\0')
	{
		Write_Data(*Str++);
	}	
}

//字定义字符
void Ziding(void)
{
	uint8 i;
	for(i=0;i<8;i++)
	{
		Write_Com(0x40+i);
		Write_Data(Table[i]);
	}
	Write_Com(0x80);
	Write_Data(0x00);
}

//lcd1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__
//写指令函数
void Write_Com(uint8 comm);
//写数据函数
//void Write_Data(int data);
void Write_Data(uint8 Data);
bit Busy_Check();
void Lcd1602_Init();
void Dip_Str(uint8 *Str);
void Ziding(void);
#endif

//config.h

#ifndef __CONFIG_H__
#define __CONFIG_H__
//包含头文件
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>

//类型定义
#define uint8 unsigned char 
//typedef unsigned char uint8;
//lcd1602引脚配置
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
#endif

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值