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

📄 mc041210.c

📁 C语言开发使LCD显示汉字程序,采用自带汉字库的LCD模块.
💻 C
📖 第 1 页 / 共 2 页
字号:
 SEI(); 	 //re-enable interrupts
 //all peripherals are now initialized
}


/**************************************************
功能:disp_cmd,原函数
描述:向lcd 驱动器写入命令并等待命令被执行
调用:disp_init()
参数:命令
返回:无
*************************************************/
void disp_cmd(unsigned char cmd)
{
	DISPDATA=0xF0&cmd; 	   //锁住命令HLS
	LCD_RS_CLR;		   //选择命令寄存器LCD.RS=0
//	WAIT;
//	WAIT;
 	LCD_E_SET;		   //LCD.ENABLE
//	WAIT;
 	LCD_E_CLR;		   //LCD.DISABLE
	cmd=cmd<<4;
	DISPDATA=cmd; 	   //锁住命令LSB
//	WAIT;
 	LCD_RS_CLR;		   //选择命令寄存器LCD.RS=0
//	WAIT;
 	LCD_E_SET;		   //LCD.ENABLE
//	WAIT;
 	LCD_E_CLR;		   //LCD.DISABLE
// 	LCD_RS_SET;		   //选择命令寄存器LCD.RS=1
//	delay_ms(1);
}

/***************************************************
功能:disp_write,原函数
描述:写入一个字节数据
调用:screen_update(void)
参数:要写入的字节
返回:无
****************************************************/
void disp_write(unsigned char value)
{
	DISPDATA=0xF0&value;		 //HBS
	LCD_RS_SET;			 //LCD.RS=1
//	WAIT;
//	WAIT;
	LCD_E_SET;			 //LCD.ENABLE
//	WAIT;
	LCD_E_CLR;			 //LCD.DISABLE
	value=value<<4;
	DISPDATA=value;		 //LBS
//	WAIT;
	LCD_RS_SET;			 //LCD.RS=1
//	WAIT;
	LCD_E_SET;			 //LCD.ENABLE
//	WAIT;
	LCD_E_CLR;			 //LCD.DISABLE
//	delay_ms(1);
}


/********************************************************************
功能:line_update
描述:刷新LCD行(1、2两行)
调用:screen_update
参数:无。
返回:无
*********************************************************************/
void line_update(void)
{
	unsigned char i;  						//定义字符指针
//	if(line>max_line) line=min_line;		//行号自增调整至min_line
	for(i=0;i<8;i++)						//字符刷新循环
	{
		disp_write(hsb[screen[line][segment*8+i]]);	//写入高位字节
		disp_write(lsb[screen[line][segment*8+i]]);	//写入低位字节
	}
}

/********************************************************************
功能:screen_update
描述:刷新屏幕(四行)
调用:main()、T0服务子程
参数:无。以当前行为操作条件。disp_updata=1
返回:无
*********************************************************************/
void screen_update(void)
{
//	line=cur_line;
	segment=0;
	disp_cmd(DISP_HOME);					//光标回HOME
	line_update();
//	if(line==0 && top_menu==1) sel_mode=0;	//避开TOP/SUB菜单提示行
	disp_cmd(DISP_POS|DISP_LINE2);			//换行0x80+0x40指向DDRAM的40H//换行判决
//	line++;
	segment++;
	line_update();
	disp_cmd(DISP_POS|DISP_LINE3);			//指向LCD-3行
//	line++;
	segment++;
	line_update();
	disp_cmd(DISP_POS|DISP_LINE4);			//指向LCD-4行
//	line++;
	segment++;
	line_update();
	disp_update=0;							//复位屏幕显示刷新标志
	disp_cmd(DISP_POS|DISP_LINE3-1);		//换行0x80+0x40指向DDRAM的40H//换行判决
}


/*****************************************************************************
名称:主函数
功能:主控
描述:程序入口函数,初始化2051,开中断,进入空闲模式每次中断之后查询标志位是否刷新显示
调用:无
参数:无
返回:无
*****************************************************************************/
void main(void)
{
 	 unsigned char i;
//	OSCCAL=osccal;
 	init_devices();
//	delay_ms(800);
	disp_cmd(DISP_FUNC); 						//设置显示格式
	disp_cmd(DISP_ENTRY); 						//每输入一个字符,显示地址加1
	disp_cmd(DISP_CURSOR); 						//打开显示,关闭光标
	disp_cmd(DISP_CLEAR); 						//清除显示
//	screen_update();
//	for(i=0;i<16;i++) disp_write(beingo[i]);	//写入低位字节
//	get_temp();
	while(1)
	{
	 if(disp_update==1) screen_update();
//	 screen_update();
	 PORTB|=0x03;
	}
}

/*
**  File:       LCD4BITS.C
**
**  Purpose:    LCD Routines for 4 bit I/O (D4->D7+E+RS)
**              D4-D7 is connected on PORTA4-7
**              E is connected on PORTC3
**              RS is connected on PORTC2
**
**  Chip:		ATMega32
**
**  Version:    1.0.0, 23:rd of May 2003
**
**  Author:     Lars Wictorsson
**              LAWICEL / SWEDEN
**              http://www.lawicel.com   lars@lawicel.com
**
**  Copyright:  The copyright to the computer program(s) herein is the
**              property of LAWICEL HB, Sweden. The program(s) may be used
**              and/or copied only with the written permission of LAWICEL HB
**              in accordance with the terms and conditions stipulated in
**              the agreement/contract under which the program(s) have been
**              supplied.
**
**	Remarks:	This program is tested with ICCAVR version 6.27A.
**
**  History:    2003-05-23  1.0.0   Created (LWI)
*

#include <iom32v.h>
#include <macros.h>

void waitMS(unsigned long);

#define WASTE               waste_lcd()

#define LCD_E_SET           PORTD |= 0x40
#define LCD_E_CLR           PORTD &= ~0x40
#define LCD_RS_SET          PORTD |= 0x80
#define LCD_RS_CLR          PORTD &= ~0x80

#define DELAY               for (del = 0; del < 16; del++)

long del;

void waste_lcd(void)
{
}

void LCD4_WR4bits(unsigned char c)
{
    c &= 0x0F;
    c = c << 4;
    LCD_E_SET;
    WASTE;
    PORTA &= 0x0F;
    PORTA |= c;
    WASTE;
    LCD_E_CLR;
    WASTE;
}

void LCD4_Init(void)
{
    waitMS(15);                     // Wait on power up 15mS
    LCD_RS_CLR;
    DELAY;
    
    LCD4_WR4bits( 0x03);            // Function Set 8bit
    waitMS(5);

    LCD4_WR4bits( 0x03);            // Function Set 8bit
    waitMS(5);

    LCD4_WR4bits( 0x03);            // Function Set 8bit
    waitMS(5);

    LCD4_WR4bits( 0x02);            // Function Set 4bit
    waitMS(5);

    LCD4_WR4bits( 0x02);            // Function Set
    LCD4_WR4bits( 0x08);
    DELAY;

    LCD4_WR4bits( 0x00);            // Display ON/OFF
    LCD4_WR4bits( 0x0C);            // Display ON, Curson OFF, Blink OFF
    DELAY;
    
    LCD4_WR4bits( 0x00);            // Entry mode
    LCD4_WR4bits( 0x06);
    DELAY;

    LCD_RS_SET;
    waitMS(5);
}

void LCD4_Clear(void)
{
    LCD_RS_CLR;
    DELAY;
    LCD4_WR4bits( 0x00);    // Clear Display
    LCD4_WR4bits( 0x01);
    DELAY;
    LCD_RS_SET;
    waitMS(5);
}

void LCD4_Home(void)
{
    LCD_RS_CLR;
    DELAY;
    LCD4_WR4bits( 0x00);
    LCD4_WR4bits( 0x02);
    DELAY;
    LCD_RS_SET;
    waitMS(5);
}

void LCD4_Home2(void)
{
    LCD_RS_CLR;
    DELAY;
    LCD4_WR4bits( 0x0C);    // Clear Display
    LCD4_WR4bits( 0x00);
    DELAY;
    LCD_RS_SET;
    waitMS(5);
}

void LCD4_PutC(unsigned char data)
{
    LCD4_WR4bits( data >> 4);
    DELAY;
    LCD4_WR4bits( data);
    DELAY;
}

void LCD4_PutC_Const(const unsigned char data)
{
    LCD4_WR4bits( data >> 4);
    DELAY;
    LCD4_WR4bits( data);
    DELAY;
}

void LCD4_PutS(unsigned char *data)
{
    unsigned char c = 0;

    while (data[c] != 0) {
        LCD4_WR4bits( data[c] >> 4);
        LCD4_WR4bits( data[c++]);
		DELAY;
    }
}



⌨️ 快捷键说明

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