聯(lián)系人:劉小姐,李小姐,王小姐
Tel:010-62000662,62051209
Fax:010-82036512
Mobile:13701081790
Email:bjqingda@126.com
Web:www.tsingtek.com
QQ:453189731
微信:13701081790
地址:北京市海淀區(qū)花園東路32號花園公寓A402室8051單片機控制字符I2C液晶屏應用實例
8051單片機控制字符I2C液晶屏應用實例
摘要:本文介紹了通用型8051單片機控制清達光電字符型I2C液晶模塊HC1624-I2C,同時介紹了HC1624的主要參數(shù)以及特點。
更多的信息您可以QQ 453189731 13701081790聯(lián)系。
1,8051單片機控制字符I2C液晶屏應用實例——8051單片機控制HC1624-I2C液晶模塊硬件以及軟件應用
示例程序
#include<reg51.h>
#include<string.h>
#include<stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define IIC
sbit SDA=P1^6;//connect to DB6
sbit SCL=P1^7;//connect to DB7
#define clear 0x01 /* Clear Display */
#define home 0x02 /* Return Home */
#define enmode 0x06 /* Enter Mode Set */
#define off 0x08 /* Display on/off Set */
#define on 0x0e /* Display on/off Set */
#define shift 0x14 /* Cursor or Display Shift */
#define reset 0x30 /* reset */
#define function 0x38 /* Function Set */
#define cgram 0x40 /*Set CGRAM Address */
#define ddram1 0x80 /* Set DDRAM Line1 Address */
#define ddram2 0xC0 /* Set DDRAM Line2 Address */
#define time 1000 /* 1000延時 1.03895500 s */
uchar code string1[]={"Jia Xian Ke Ji"}; uchar code string2[]={"www.tsingtek.com"};
uchar code string3[]={"Tel:13701081790"};
uchar code string4[]={"abcdefghijklmnopqrstuvwxyz"}; uchar code string5[]={"Thank You !"}; uchar code string6[]={'2','0','1','2',0x06,'1','0',0x07,'\0'};
/********* 自定義字符庫 *********/ uchar code CGF[8][8]={ 0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00, /* 隔行 00H */ 0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f, /* 01H */ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, /* 隔列 02H */ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, /* 03H */ 0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a, /* 隔點 04H */ 0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15, /* 05H */ 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, /* "年" 06H */ 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00, /* "月" 07H */ };
/********* 時間延時函數(shù) *********/
void delay(uint t) /* 1.02500 ms */
{ uint i,j; for(i=t;i>0;i--) for(j=125;j>0;j--); }
#ifdef IIC //============================================
void start()
{ SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=0; }
//============================================
void stop() { SDA=0; _nop_(); SCL=1; _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); }
//============================================
void sendbyte(uint temp)
{ int i,j; for(i=0;i<8;i++)
{ SCL=0; if(temp&0x80) SDA=1; else SDA=0; _nop_(); _nop_(); SCL=1; _nop_(); _nop_(); SCL=0; temp=temp<<1; }
_nop_(); _nop_(); SCL=1; _nop_(); _nop_(); SCL=0; _nop_(); _nop_(); } //============================================
void write_com(uint para)
{ start(); sendbyte(0x78); //slave address sendbyte(0x00); //command sendbyte(para); stop(); }
//============================================
void write_data(uint para)
{ start(); sendbyte(0x78); //RW1033 slave address
sendbyte(0x40); //data sendbyte(para);
stop(); }
#endif
/****** 建立自定義字符函數(shù)*******/
void CGFUNTION(uchar array[8][8])
{ uchar i,j; write_com(cgram); /* 寫“指令”CGRAM地址 */
for(i=0;i<8;i++) for(j=0;j<8;j++) write_data(array[i][j]); /* 寫“數(shù)據(jù)” */ }
/********* 字符全屏顯示函數(shù) *********/
void char_fill_disp(uchar dat)
{ uchar i,j,temp=0;
for(i=0;i<2;i++)
for(j=0;j<16;j++)
{ if(i==1) temp=j|ddram2; /* DDRAM**行地址 */
else temp=j|ddram1; /* DDRAM**行地址 */
write_com(temp); /* 寫“指令” */
write_data(dat); /* 寫“數(shù)據(jù)” */ } }
/********* 字符串顯示函數(shù) *********/
/*********** 可選行顯示 **********/
void string_disp(uchar x, uchar y, uchar *str)
{ uchar i,j,temp=0;
for(i=x,j=y;j<16&&*s!='\0';j++) /* 字符串結束標志 */
{ if(i==0) temp=j|ddram1; /* DDRAM**行地址 */
else temp=j|ddram2; /* DDRAM**行地址 */
write_com(temp);
write_data(*s++); } }
/********* 設置參數(shù)函數(shù) *********/
void set(void)
{ delay(15); /* 延時 15.20800 ms */
write_com(0x38); //Function set N=1(2line),F=0(5*8 dot)
delay(5);
write_com(0x0C); //display on
delay(5);
write_com(0x01); //clear display
delay(10);
write_com(0x06); //entry set
delay(5); }
/********* 主函數(shù) *********/
void main() /* 子程序里有延時1s */
{ set(); /* 設置參數(shù) */
write_com(clear); /* 清屏 */
while(1) { char_fill_disp(0xff); /* 全屏 */
write_com(clear); /* 清屏 */
string_disp(0,1,string1); /* **行顯示字符串string1 */
string_disp(1,0,string2); /* **行顯示字符串string2 */
write_com(clear); /* 清屏 */
char_fill_disp(0x31); /* 顯示“1” */
CGFUNTION(CGF); /* 建立自定義字符 */
write_com(clear); /* 清屏 */
char_fill_disp(0x00); /* 顯示“隔行” */
char_fill_disp(0x02); /* 顯示“隔列” */
char_fill_disp(0x04); /* 顯示“隔點” */
char_fill_disp(0xff); /* 全屏 */
write_com(clear); /* 清屏 */
string_disp(0,0,string3); /* **行顯示字符串string3 */
string_disp(1,0,string4); /* **行顯示字符串string4 */
write_com(clear); /* 清屏 */
string_disp(0,2,string5); /* **行顯示字符串string5:*/
string_disp(1,8,string6); /* **行顯示字符串string6: 2012年10月*/ delay(time); } }
2. 8051單片機控制字符I2C液晶屏應用實例——HC1624-I2C介紹
1)8051單片機控制字符I2C液晶屏應用實例——I2C液晶時序介紹:
I2C是一種時序,液晶模塊時序是指對LCD顯示模塊進行讀寫時電路的時序要求和狀態(tài)。
主要分為以下幾種時序:8080并口,6800并口,SPI串口,I2C串口,UART串口,RS232串口,USB等幾種類型。
清達光電I2C液晶模塊HC1624時序圖如下:
2)8051單片機控制字符I2C液晶屏應用實例——HC1624-I2C液晶模塊主要參數(shù):
HC1624為清達光電生產(chǎn)的16*2字符液晶模塊(資料參考http://www.chinalcdmodule.com/character-lcm-hc1624.html)
模塊外形圖
接口定義:
編號 符號 電平 功能
1 VSS 0V 接地 2 VDD +5.0V 邏輯電壓
3 V0 - LCD驅(qū)動電壓 4~6 NC - 空腳
7~8 VSS 0V 邏輯地 9~11 NC - 空腳
12 VSS 0V 邏輯地 13 SDA H/L I2C接口數(shù)據(jù)輸入
14 SCL H/L I2C接口時鐘輸入
15 LEDA +3.3V 16 LEDK 0V LED背光源輸入電壓
3)8051單片機控制字符I2C液晶屏應用實例——HC1624-I2C液晶模塊控制器介紹
西文字庫表