久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > pic單片機兩個IO口四線驅動LCD1602

pic單片機兩個IO口四線驅動LCD1602

作者: 時間:2016-11-30 來源:網絡 收藏
經過多天調式,優化程序。只用兩個IO端口驅動74LS164擴展成并口驅動LCD1602(四線模式),這是個完整簡單的例子,可實現字符串左移200次,右移200次,不停的循環。現上傳與大家共享成果!//引入頭文件*********************************************************

#include
#include
#include "delay.h"
#include "delay.c"

本文引用地址:http://cqxgywz.com/article/201611/323785.htm

//熔絲配置***********************************************************
__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++; //下個字符
}
}


上一頁 1 2 下一頁

評論


技術專區

關閉