您的位置 首页 编程

串行1602的四位数据线程序-avr单片机

1602的四位数据线程序,节省了IO。单片机用的是Atmega16,编译环境ICC631A,1602驱动头文件。1602Driverh*********************LCD模块1

1602的四位数据线程序,节约了IO。单片机用的是Atmega16,编译环境ICC6.31A,1602驱动头文件。

1602Driver.h
/*********************LCD模块1602底层驱动库***********************
* LCD模块与单片机的硬件衔接:
* /端口称号 /端口符号 /MCU端口 / LCD引脚号/
*
* RS数据/指令挑选线
* RS PD3 4
* R/W读写挑选线
* R/W GND 5
* EN写使能线
* EN PD2 6
* 三态双向数据总线
* D0-D3 NC 7-10
* D4 PD4 11
* D5 PD5 12
* D6 PD6 13
* D7 PD7 14
*
* 其他端口衔接:
* 电源负 VSS 1
* 电源正+4.5–+5.5V VDD 2
* 对比度调理 VL GND 3
* 背光负 BLK NC 15
* 背光正 BLA NC 16
* 阐明:选用节约端口的4线线衔接方法,行将8位的数据分两次传输;同
* 时将R/W接地RW(只用W不需要R,所以能够省一根线)
* 日期:2006/02/03

*****************************************************************/

/*****************界说MCU与LCD的接口******************/
#define LCD_EN_PORT PORTC //写使能。高有用,下降沿时确定数据
#define LCD_RS_PORT PORTC //指令/数据挑选
#define LCD_DATA_PORT PORTC //数据总线

#define LCD_EN 0x04 //PORTD2 out
#define LCD_RS 0x08 //PORTD3 out
#define LCD_DATA 0xf0 //PORTD4/5/6/7 out

#define Data_Write LCD_RS_PORT |= LCD_RS //写数据形式
#define Command_Write LCD_RS_PORT &= ~LCD_RS //写指令形式

#define Write_En LCD_EN_PORT |= LCD_EN //写使能
#define Write_Lock LCD_EN_PORT &= ~LCD_EN //确定数据

//#define Graph_Right_Run LCD_Write_Char(0x02,0) //画面右移

const char CHR[16] = {0,1,2,3,4,5,6,7,8
,9,a,b,c,d,e,f};
unsigned char LCD_Buff[] = {0,0,0,0,0,0,0,0};

/*******************N us延时函数**********************/
void Delay_nus(unsigned int j)
{
unsigned int i=”0″;
for(i=j;i>0;i–)
{
asm(“nop”);
}
}

/********************N ms延时函数*********************/
void Delay_nms(unsigned int n)
{
unsigned int m = 0;
unsigned int k = 0;
for (m=n;m>0;m–)
{
for (k=1140;k>0;k–)
{
Delay_nus(1);
}
}
}

/******读写使能(高电平有用,下降沿确定数据 )********/
void Write_Enable(void)
{
Write_En;
Delay_nus(1);
Write_Lock;
}

/*———————————————————————
* LCD_Write_Char :英文单字符显现函数
*
* 向LCD发送数据/指令。 Command=”1″ 发送显现数据
* Command=0 发送指令数据
*
* 输入参数 :Command 数据/指令寄存器挑选
* Data 显现内容
*
———————————————————————–*/
void LCD_Write_Char(char Command,char Data)
{
unsigned Command_Temp,Data_Temp;
Command_Temp = Command;
Data_Temp = Data;
Delay_nms(1); //延时1ms,以避开”写繁忙”时期

if (Command == 0) //数据输入形式
{
Data_Write;
LCD_DATA_PORT &= 0x0f; //数据口清零
LCD_DATA_PORT |= Data_Temp&0xf0; //先送高4位
}
else //指令输入形式
{
Command_Write;
LCD_DATA_PORT &= 0x0f;
LCD_DATA_PORT |= Command_Temp&0xf0;
}
Write_Enable();

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/318168.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部