⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd1602.c

📁 利用单片制作信号发生器
💻 C
字号:

#include <reg51.h>
#include "hardware.h"
#include "LCD1602.h"




void mdelay(unsigned int);

//char code line1[] = "024680 6 8 0 2 4";
//char code line2[] = "hjllprtvvvvxxxxx";
//char code rect_line1[16];//format : F# DR:2/3#XXXXHZ
//char code rect_line2[] = "duty ratio 5H 6L";
//char code sin_line1[16] = "Z 0.5-5.0v0000HZ";
//char code sin_line2[16] = "5 crest 6 trough";

void LCD_write_cmd(unsigned char cmd)
{
	LCD_data_port = cmd;
	LCD_RS = 0;
	LCD_RW = 0;
	LCD_E = 1;
	mdelay(1);
	LCD_E = 0;
}

void LCD_write_data(unsigned char row, unsigned char cow, const char Data) reentrant
{
	unsigned char addr = 0;
	row = row & 0x1;
	cow = cow & 0xf;
	if (row) 
		addr = (0x80 | cow) + 0x40;
    else addr = 0x80 | cow;
	LCD_write_cmd(addr);
	
	LCD_data_port = Data;
	LCD_RS = 1;
	LCD_RW = 0;
	LCD_E = 1;
	mdelay(1);
	LCD_E = 0;
}

void mdelay(unsigned int msec)
{
	int i = 0;
	while (msec--) 
		for (i = 0; i <= 500; i++);
}

void init_LCD1602()
{
	mdelay(20);
	LCD_write_cmd(0x38);//8 bites trans, 2 lines, 5*7, 
	LCD_write_cmd(0x8);//close display
	LCD_write_cmd(0x6);//cursor right shift, AC inc,  no ALL_SHIFT
	LCD_write_cmd(0x2);//cursor and ac addr reset
	LCD_write_cmd(0x1);//清屏
   	LCD_write_cmd(0xc);//open display,  no cursor ,  no cursor flash
}


void printstr(unsigned char start, unsigned char end, const char *str)
{
	unsigned char count = end -start +1;
	unsigned char index = 0;
	do {
		LCD_write_cmd(0x80 | start);
	//	#pragma asm
	//		MOV	P2, str[index];
	//	#pragma asmend
		if (start > 0x40)
			LCD_write_data(1, start + index - 0x40, str[index]);
		else LCD_write_data(0, start + index , str[index]);
		index++;
	} while (index < count);
}
	
				
/*void LCD_check_busy()
{
	//不知道怎么实现,E 的时序图
}	
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -