您的位置 首页 技术

pic单片机两个IO口四线驱动LCD1602

经过多天调式,优化程序。只用两个IO端口驱动74LS164扩展成并口驱动LCD1602(四线模式),这是个完整简单的例子,可实现字符串左移200次,

通过多天调式,优化程序。只用两个IO端口驱动74LS164扩展成并口驱动LCD1602(四线形式),这是个完好简略的比如,可完成字符串左移200次,右移200次,不断的循环。现上传与我们同享效果!//引进头文件*********************************************************

#include #include #include “delay.h”
#include “delay.c”

//熔丝装备***********************************************************
__CONFIG(PROTECT & CPD & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);

//端口界说***********************************************************
#define Port GPIO //端口址址
#define Tris TRISIO //方向设置

//脚位界说***********************************************************
#define Dat GPIO4 //数据引脚
#define Clk GPIO5 //时钟引脚

//显现字符***********************************************************
unsigned char TopChar[] = {“www.pic16.com “}; //
unsigned char BotChar[] = {“ivws “}; //

//*******************************************************************
//函数称号:PortInit();
//输入参数:无
//输出参数:无
//功用描绘:端口设置
//制作日期:2008.12.08
//********************************************************************
void PortInit(void)
{
Port = 0x00; //端口设置
Tris = 0x00;
}

//*******************************************************************
//函数称号:ConInit();
//输入参数:无
//输出参数:无
//功用描绘:定时器设置
//制作日期:2008.12.08
//*******************************************************************
void ConInit(void)
{
OPTION = 0x00; //答应上拉
CMCON = 0x07; //关比较器
}

//*******************************************************************
//函数称号: TxLs164(data);
//输入参数:串行数据
//输出参数:无
//功用描绘:串行发送数据
//制作日期:2008.12.08
//*******************************************************************
void TxLs164(unsigned chardata)
{
unsigned char i;

i = 6; //送出六位

do
{
Dat = 0; //数据清零
Clk = 1; //时钟置位
Clk = 0; //时钟清零
}
while (–i); //循环发送

i = 6; //送出六位

do
{
Dat = 0; //先高后低

if (data & 0x20) Dat = 1;

Clk = 1; //时钟置位
data<<= 1; //数据左移
Clk = 0; //时钟清零
}
while (–i); //循环发送
}

//*******************************************************************
//函数称号: WriteData(data, rs);
//输入参数:待写数据, 0 = 指令,1 = 数据
//输出参数:无
//功用描绘:数据写入LCD
//制作日期:2008.12.08
//*******************************************************************
void WriteData(unsigned char data, unsigned char rs)
{
unsigned char temp;

temp =data>> 4; //取高四位
temp |= 1 << 5; //运用置位

if (rs & 0x01) temp |= 1 << 4; //数据挑选

TxLs164(temp); //写高四位
Dat = 1; //使能下沿
Dat = 0;
DelayUs(50); //延时等候

temp =data& 0x0f; //取低四位
temp |= 1 << 5; //运用置位

if (rs & 0x01) temp |= 1 << 4; //数据挑选

TxLs164(temp); //写高四位
Dat = 1; //使能下沿
Dat = 0;
DelayUs(50); //延时等候
}

//*******************************************************************
//函数称号:AddrSite(x, y);
//输入参数:坐标参数
//输出参数:无
//功用描绘:设置显现地址
//制作日期:2008.12.08
//*******************************************************************
void AddrSite(unsigned char x, unsigned char y)
{
x &= 0x3f; //截取地址

if (y == 0)
{
WriteData((0x80 | x), 0); //首行地址
}

else
{
WriteData((0xc0 | x), 0); //次行地址
}
}

//*******************************************************************
//函数称号:PrintChar(*s);
//输入参数:缓冲区首址
//输出参数:无
//功用描绘:字符串输出显现
//制作日期:2008.12.08
//*******************************************************************
void PrintChar(unsigned char *s)
{
while(*s)
{
WriteData(*s, 1); //字符数据
s++; //下个字符
}
}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部