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

📄 lcd.c

📁 用C写的51遥控测码程序,结果在LCM1602上显示
💻 C
字号:
//2行X16个字符位LCD驱动程序
//P0接LCD MODULE D0~D7,

#include "reg51.h"
#include "common.h"
#include "lcd.h"
#include "remote.h"

#define LCDMaxChar 11

void  send_cmd(uchar);
void  send_data(uchar);
void  check_ready(void);
void  lcd_disp_test_code(void);
void  cpy_test_code_str(uchar *st1, uchar *st2);


uchar gLCDstr[LCDMaxChar];
uchar code bcd2asc[] = {'0','1','2','3','4','5','6','7','8','9',
	                      'A', 'B', 'C', 'D', 'E', 'F', //0-F
											 };


/*函数名称:LCD Module 地址发送*/
void send_cmd(uchar lcd_cmd)
{
    uchar i;
    rs_lcd = 0;
    rw_lcd = 0;
    P0 = lcd_cmd;
    en_lcd=1;
    for(i=0;i<2;i++);
    en_lcd=0;
}

/*函数名称:LCD Module 数据发送*/
void send_data(uchar lcd_data)
{
    uchar  i;

    rs_lcd = 1;
    rw_lcd = 0;
    P0 = lcd_data;
    en_lcd=1;
    for(i=0;i<2;i++);
    en_lcd=0;
}

/*函数名称:读LCD Module 忙状态*/
uchar read_status()
{
    uchar port_status=0;
    rs_lcd = 0;
    rw_lcd = 1;
    port_status = P0;
    return (port_status&0x80);
}

/*函数名称:判断LCD Module 是否忙状态,若是,延时*/
void check_ready(void)
{
    uchar  i;
    i=read_status();
    if(i) for(i=0;i<50;i++);
}

void lcd_task(void)
{
  uchar i,address,a0=128;
	for(i=0;i<32;i++)
  {
  	check_ready();
    if(a0<0x90)
    	address = 0x80;
    else
    	address = 0xC0;
    send_cmd(address+i%16);
    check_ready();
    send_data(gLCDstr[i]);
    a0=a0+1;
 	}
}


void cpy_test_code_str(uchar *st1, uchar *st2)  
{
	uchar i;
	for(i=0;i<11;i++)
		st2[i]=st1[i];
}

void lcd_disp_test_code(void)
{
	uchar temp_code;
	uchar test_code_string[11];
	temp_code = (uchar)(ir_system_code >> 12); 
	test_code_string[0]=bcd2asc[temp_code];
	temp_code = (uchar)(ir_system_code >>8 ) & 0x0f;
	test_code_string[1]=bcd2asc[temp_code];
	temp_code = (uchar)(ir_system_code >> 4) & 0x0f;
	test_code_string[2]=bcd2asc[temp_code];
	temp_code = (uchar)ir_system_code&0x0f;
	test_code_string[3]=bcd2asc[temp_code];
	test_code_string[4]=' ';
	test_code_string[5]=' ';
	test_code_string[6]='0';
	test_code_string[7]='x';
	temp_code = (ir_data_code>>4)&0x0f;
	test_code_string[8]=bcd2asc[temp_code];
	temp_code = ir_data_code&0x0f;
	test_code_string[9]=bcd2asc[temp_code];
	test_code_string[10]=' ';
	cpy_test_code_str(test_code_string,gLCDstr);
}


/*函数名称:LCD Module 初始化*/
void lcd_init(void)
{
    uchar i;
    for(i=0;i<100;i++);
    en_lcd=1;
    send_cmd(0x38);		//function set,8bit,2-line mode,5X7 dots
    check_ready();
  	send_cmd(0x38);
    check_ready();
		send_cmd(0x38);
    check_ready();
    send_cmd(0x38);
    check_ready();

    send_cmd(0x0c);		//display off
    check_ready();

    send_cmd(0x01);		// clear display
    check_ready();

    send_cmd(0x06); 	//enter mode set
    check_ready();
}












⌨️ 快捷键说明

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