📄 mc041210.c
字号:
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 + -