聯系人:劉小姐,李小姐,王小姐
Tel:010-62000662,62051209
Fax:010-82036512
Mobile:13701081790
Email:bjqingda@126.com
Web:www.tsingtek.com
QQ:453189731
微信:13701081790
地址:北京市海淀區花園東路32號花園公寓A402室清達光電SPI液晶模塊與8051單片機應用實例
清達光電SPI液晶模塊與8051單片機應用實例
1,SPI液晶時序介紹:
SPI是一種時序,液晶模塊時序是指對LCD顯示模塊進行讀寫時電路的時序要求和狀態。
主要分為以下幾種時序:8080并口,6800并口,SPI串口,I2C串口,UART串口,RS232串口,USB等幾種類型。
清達光電SPI液晶模塊HC1624時序圖如下:
2,SPI液晶HC1624主要參數:
HC1624為清達光電生產的16*2字符液晶模塊(資料參考http://www.chinalcdmodule.com/character-lcm-hc1624.html)
尺寸規格
原理結構圖
模塊外形圖
接口定義:
編號 符號 電平 功能
1 VSS 0V 接地
2 VDD +5.0V 邏輯電壓
3 V0 - LCD驅動電壓
4 RS H/L H: 數據 L: 指令
5~11 NC - 空腳位
12 /CS L 低片選有效
13 SCLK H/L 串行時鐘輸入
14 SID H/L 串行數據輸入
15 LEDA +5.0V 16 LEDK 0V LED背光源輸入電壓
3, SPI液晶模塊HC1624控制器介紹
西文字庫表
4,SPI液晶模塊與8051單片機硬件及軟件應用實例
硬件接口圖
軟件應用實例:
#include<reg51.h>
#include<string.h>
#include<stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SID=P3^4;
sbit SCK=P3^3;
sbit CS=P3^1;
sbit RS=P3^0;
/*********************
延時子程序
********************/
void delayus(uchar m)
{
while(--m);
}
void delayms(uchar m)
{
uchar i,j;
for(i=0;i<102;i++)
for(j=0;j<m;j++)
delayus(1);
}
/****************
液晶屏寫入程序
********************************************/
void SendByte(unsigned char Dbyte)
{
unsigned char i ;
// CS = 0;
for(i=0 ;i< 8 ;i++)
{
SCK = 0 ;
delayus(1);
Dbyte=Dbyte<< 1 ; //左移一位
delayus(1);
SID = CY ; //移出的位給SID
delayus(1);
SCK = 1 ;
SCK = 0 ;
}
}
void WriteCommand( unsigned char Cbyte )
{
CS = 0;
delayus(1);
SendByte(Cbyte) ;
delayus(1);
}
void WriteData( unsigned char Dbyte)
{
CS = 0;
WriteCommand(0x3c);
SendByte(0x80) ;
SendByte(Dbyte) ;
}
/***********************
液晶屏初始化
************************/
void lcd_init()
{
RES=0;
delayus(10);
RES=1;
delayus(10);
delayms(60);
WriteCommand(0x38);//8位數,2行顯示,外部功能關
delayms(60);
WriteCommand(0x38);//8位數,2行顯示,外部功能關
delayms(60);
WriteCommand(0x38);//8位數,2行顯示,外部功能關
delayus(60);
WriteCommand(0x0e); //開顯示,光標,2行顯示
delayus(60);
WriteCommand(0x01); //**
delayus(60);
WriteCommand(0x02); //歸零
delayus(60);
WriteCommand(0x14); //光標右移
WriteCommand(0x06); //模式進入
}
void goto_lcd(uchar x,uchar y)
{
WriteCommand(0x38);
WriteCommand(0x80+x+y*0x40);
}
void write_string(uchar x,uchar y,uchar *s)
{
goto_lcd(x,y);
while(*s>0)
{WriteData(*s); s++;}
}
void ringt_lcd()
{
uchar i;
for(i=0;i<16;i++)
{WriteCommand(0x1c);delayms(4000); };
}
void left_lcd()
{
uchar i;
for(i=0;i<16;i++)
{WriteCommand(0x18);delayms(4000); };
}
int main(void)
{
uchar i;
lcd_init();
write_string(0,0,"012456789ABCDEFG");
write_string(4,1,"Tsingtek");
while(1);
}