新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 串行1602的四位数据线程序-avr单片机

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

作者: 时间:2016-11-30 来源:网络 收藏

Command_Temp=Command_Temp << 4;
Data_Temp=Data_Temp << 4;

LCD_DATA_PORT &= 0X0F; //数据口清零
if (Command==0) //再送低4位
{
LCD_DATA_PORT |= Data_Temp&0xf0;
}
else
{
LCD_DATA_PORT |= Command_Temp&0xf0;
}

Write_Enable();
}

本文引用地址:https://www.eepw.com.cn/article/201611/323784.htm


/***********LCD模块初始化**************/
void LCD_Init(void)
{
Delay_nms(5);

LCD_Write_Char(0x28,0); //4位数据线格式
Delay_nus(10);
LCD_Write_Char(0x0d,0); //显示开,光标闪烁
Delay_nus(10);
LCD_Write_Char(0x01,0); //清屏
Delay_nms(1);
LCD_Write_Char(0x06,0); //光标模式设置
}

/*-----------------------------------------------------------------------
* Locate : 设置LCD显示的起始位置
*
* 输入参数:x、y : 显示字符串的位置,X:0-1,Y:0-15
* LCD第一行显示寄存器地址:0X80-0X8F
* LCD第一行显示寄存器地址:0XC0-0XCF
-----------------------------------------------------------------------*/
void Locate( unsigned char x, unsigned char y )
{
unsigned char Address;
if (x == 0)
Address = 0x80 + y; //第一行显示的地址
else
Address = 0xc0 + y; //第二行显示的地址
LCD_Write_Char(Address,0);
}


/*-----------------------------------------------------------------------
* LCD_Write_String : 英文字符串显示函数
*
* 输入参数:*s :英文字符串指针
* X、Y :显示字符串的位置
-----------------------------------------------------------------------*/
void LCD_Write_String(unsigned char X,unsigned char Y,unsigned char *String)
{
Locate( X, Y); //先送显示起始坐标

while (*String) //再依次送显示字符
{
LCD_Write_Char( 0, *String );
String ++;
}

}


/*-----------------------------------------------------------------------
* DEC_Num_Disp :10进制数值显示函数
*
* 输入参数 :X 字符起始显示行坐标2
* Y 字符起始显示列坐标
* Num 需要显示的数值(最长8位)
* Bit 有效显示的位数
* 输出 :
-----------------------------------------------------------------------*/
void DEC_Num_Disp(unsigned char X,unsigned char Y,unsignedlongNum,char Bit)
{
unsigned char i = 0;
Locate( X, Y );
for (i=0 ; i {
LCD_Buff[i] = CHR[Num%10];
Num = Num/10;
}
for (i=0 ; i {
LCD_Write_Char(0,LCD_Buff[Bit-i-1]); //先写高位再写低位
}
}


/*-----------------------------------------------------------------------
* HEX_Num_Disp :16进制数值显示函数
*
* 输入参数 :X 字符起始显示行坐标
* Y 字符起始显示列坐标
* Num 需要显示的数值(最长8位)
* Bit 有效显示的位数
* 输出 :
-----------------------------------------------------------------------*/
void HEX_Num_Disp(unsigned char X,unsigned char Y,unsignedlongNum,char Bit)
{
char a = 0;
Locate( X, Y );
for(a=8-Bit ; a<8 ; a++)
{
LCD_Write_Char(0,CHR[(Num<< (a << 2)) >>28]);
}
}


1602测试程序LCD.c


/*********************************************
* "1602Driver.h"库测试程序
*********************************************/


#include
#include "1602Driver.h"

void Port_Init(void)
{
DDRD = 0xff;
DDRC = 0xff;
}
void main (void)
{
int counter;
OSCCAL="0XA5";
Port_Init();
LCD_Init();
LCD_Write_Char(0x01,0); //清屏

HEX_Num_Disp(0,0,13,1);
DEC_Num_Disp(0,1,4,1);
//LCD_Write_String(2,0,"T");
LCD_Write_String(1,0,"Disp");


while(1);
}


上一页 1 2 下一页

评论


技术专区

关闭