标题:
求一份BS18B20在LM016L上显示的程序
[打印本页]
作者:
新年里的老人
时间:
2020-4-23 21:43
标题:
求一份BS18B20在LM016L上显示的程序
求一份BS18B20在LM016L上显示的程序
作者:
知庸啦啦啦
时间:
2020-6-13 15:38
#include "lcd.h"
/*******************************************************************************
* 函 数 名 : Lcd1602_Delay1ms
* 函数功能 : 延时函数,延时1ms
该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
//void Lcd1602_Delay1ms(unsigned int c) //误差 0us
//{
// unsigned char a,b;
// for (; c>0; c--)
// {
// for (b=199;b>0;b--)
// {
// for(a=1;a>0;a--);
// }
// }
//
//}
/* 忙等待 */
void LcdWaitReady()
{
unsigned char sta;
LCD1602_DATAPINS = 0xFF;
LCD1602_RS = 0;
LCD1602_RW = 1;
do{
LCD1602_E = 1;
sta = LCD1602_DATAPINS;
LCD1602_E = 0;
}while(sta & 0x80);
// bit7为1,表示液晶正在忙,禁止读写操作,当为0时才可进行读写操作。
}
/* 设置液晶显示位置,RAM起始地址,(x,y)为起始坐标*/
void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if(y == 0)
addr = 0x00 + x;
else
addr = 0x40 + x;
LcdWriteCom(addr|0x80);
}
/* 液晶显示字符串,x,y表示起始坐标,str表示输入内容 */
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
{
LcdSetCursor(x, y); // 设置起始地址
while(*str != '\0')
{
LcdWriteData(*str++);
}
}
/* 液晶显示字符串,x,y表示起始坐标,chr表示输入字符 */
void LcdShowChar(unsigned char x, unsigned char y, unsigned char chr)
{
LcdSetCursor(x, y); // 设置起始地址
LcdWriteData(chr);
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
*******************************************************************************/
#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
void LcdWriteCom(unsigned char com) //写入命令
{
LcdWaitReady(); //LCD忙等待
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
LCD1602_E = 1; //写入时序
LCD1602_E = 0;
}
#else
void LcdWriteCom(unsigned char com) //写入命令
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 0; //选择写入命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
// Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdWriteData(unsigned char dat) //写入数据
{
LcdWaitReady(); //LCD忙等待
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
LCD1602_E = 1; //写入时序
LCD1602_E = 0;
}
#else
void LcdWriteData(unsigned char dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 数 名 : LcdInit()
* 函数功能 : 初始化LCD屏
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
// LcdWriteCom(0x80); //设置数据指针起点
}
#else
void LcdInit() //LCD初始化子程序
{
LcdWriteCom(0x32); //将8位总线转为4位总线
LcdWriteCom(0x28); //在四位线下的初始化
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针起点
}
#endif
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1