標(biāo)題:
51單片機(jī)液晶模塊代碼(12864 1602 5110)
[打印本頁]
作者:
pdh
時(shí)間:
2016-1-11 11:28
標(biāo)題:
51單片機(jī)液晶模塊代碼(12864 1602 5110)
包含12864 1602 5110
00000.png
(25.61 KB, 下載次數(shù): 118)
下載附件
2016-1-11 18:58 上傳
完整代碼(包含頭文件)下載:
液晶.rar
(4.73 KB, 下載次數(shù): 42)
2016-1-11 11:28 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
以下是文件內(nèi)容預(yù)覽:
12864:
#include"yejing.h"
#define uint unsigned int
#define uchar unsigned char
//液晶
sbit CS=P3^4;
sbit SID=P3^5;
sbit SCLK=P3^6;
uchar yi[]={"歡迎使用"};
uchar er[]={"紅外報(bào)警系統(tǒng)"};
uchar san[]={"發(fā)現(xiàn)物體闖入"};
uchar si[]={"已處于警戒中"};
void delay_1ms(uint x)
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<100;i++);
}
/*************************/
/******************寫指令*****************/
void send_command(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xf8;//第一個(gè)字節(jié)確定寫指令
CS=1;
SCLK=0;
/*第一個(gè)字節(jié)設(shè)定為寫指令*/
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
/*寫第二個(gè)字節(jié)和第三個(gè)字節(jié)確定指令功能*/
/******* 寫第二個(gè)字節(jié)********/
i_data=command_data;
i_data&=0xf0; //高4位保留,低四位清零
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
/********寫第三個(gè)字節(jié)********/
i_data=command_data;
i_data<<=4; //把低四位取代高四位
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
delay_1ms(10);
}
/*************************/
/******************寫數(shù)據(jù)*****************/
void send_data(uchar command_data)
{
uchar i;
uchar i_data;
i_data=0xfa;//第一個(gè)字節(jié)確定寫數(shù)據(jù)
CS=1;
/*第一個(gè)字節(jié)設(shè)定為寫數(shù)據(jù)*/
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
/******* 寫第二個(gè)字節(jié)********/
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
/******* 寫第三個(gè)字節(jié)********/
i_data=command_data;
i_data<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
delay_1ms(10);
}
/********初始化液晶************/
void lcd_init()
{
delay_1ms(100);
send_command(0x30);
send_command(0x02);
send_command(0x06);
send_command(0x0c);
send_command(0x01);
send_command(0x80);
}
/*******顯示第一行*******/
void display_1()
{
uchar i;
send_command(0x82);//發(fā)送指令顯示第一行
for(i=0;i<8;i++)
{
send_data(yi[i]);
}
}
/*******顯示測(cè)第二行*******/
void display_2()
{
uchar i;
send_command(0x91);//發(fā)送指令顯示第二行
for(i=0;i<12;i++)
{
send_data(er[i]);
}
}
/*******顯示第三行*******/
void display_3()
{
uchar i;
send_command(0x89);//發(fā)送指令顯示第三行
for(i=0;i<12;i++)
{
send_data(san[i]);
}
}
/*******顯示第三行*******/
void display_4()
{
uchar i;
send_command(0x89);//發(fā)送指令顯示第三行
for(i=0;i<12;i++)
{
send_data(si[i]);
}
}
復(fù)制代碼
5110:
/******************************
文檔說明:NOKIA5110顯示模塊驅(qū)動(dòng)
修改日期:9月8日
版本: v1
********************************/
#include "LCD5110.h"
#include "suzu.h"
/************************************************
函數(shù)名: void LCD_init(void)
功能: NKIA5110初始化配置
輸入?yún)?shù): 無
輸出參數(shù): 無
修改日期: 9月8日
特殊說明: 不同模塊所需調(diào)的是28行代碼,大概范圍150-255
************************************************/
void LCD_init(void)
{
unsigned char i;
SRST=0;
for(i=0;i<150;i++);
SRST=1;
LCD_write_byte(0x21,0);
LCD_write_byte(195,0); //偏置電壓設(shè)置
LCD_write_byte(0x20,0);
LCD_clear();
LCD_write_byte(0x0c,0);
SCE=0;
}
/************************************************
函數(shù)名: void LCD_write_byte(unsigned char dat,unsigned char command)
功能: 向NKIA5110寫字節(jié)數(shù)據(jù)
輸入?yún)?shù): unsigned char dat,unsigned char command
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_write_byte(unsigned char dat,unsigned char command)
{
unsigned char i;
SCE=0;
if(command==0)
SDC=0;
else
SDC=1;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN=1;
else
SDIN=0;
SCLK=0;
dat=dat<<1;
SCLK=1;
}
SCE=1;
}
/************************************************
函數(shù)名: void LCD_set_XY(unsigned char X,unsigned char Y)
功能: 設(shè)置NKIA5110顯示XY坐標(biāo)位置
輸入?yún)?shù): unsigned char X,unsigned char Y
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_set_XY(unsigned char X,unsigned char Y)
{
LCD_write_byte(0x40|Y,0);//列
LCD_write_byte(0x80|X,0);//行
}
/************************************************
函數(shù)名: void LCD_clear(void)
功能: NKIA5110 清屏
輸入?yún)?shù): 無
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_clear(void)
{
unsigned char t;
unsigned char k;
LCD_set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD_write_byte(0x00,1);
}
}
}
/************************************************
函數(shù)名: void LCD_write_char(unsigned char x,unsigned y,unsigned char c)
功能: NKIA5110 顯示字符
輸入?yún)?shù): unsigned char x,unsigned y,unsigned char c
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_write_char(unsigned char x,unsigned y,unsigned char c)
{
unsigned char i;
c-=32;
LCD_set_XY(x,y);
for(i=0;i<6;i++)
{
LCD_write_byte(font6x8[c][i],1);
if(i==5)
{
y++;
LCD_set_XY(x,y);
}
}
}
/************************************************
函數(shù)名: void LCD_write_Num(unsigned char X,unsigned char Y,unsigned int num)
功能: NKIA5110 顯示數(shù)字
輸入?yún)?shù): X為一個(gè)位置為6,Y為行取值為0~5,num為要顯示的數(shù)字
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_write_Num(unsigned char X,unsigned char Y,unsigned int num)
{
unsigned char str[8],i=0,len=0;
unsigned int temp;
temp = num;
while(temp)
{
temp /=10;
len++;
}
if(!num)
{
len++;
str[0]=0x30;
}
str[len] = 0;
while(num)
{
str[len-i-1] = num%10 + 0x30;
num /=10;
i++;
}
LCD_write_string(X,Y,(char *)str);
}
/************************************************
函數(shù)名: void LCD_write_Num(unsigned char X,unsigned char Y,unsigned int num)
功能: NKIA5110 顯示字符串
輸入?yún)?shù): X為一個(gè)位置為6,Y為行取值為0~5,*s為要顯示的字符串
輸出參數(shù): 無
修改日期: 9月8日
************************************************/
void LCD_write_string(unsigned char X,unsigned char Y,char *s)
{
while(*s)
{
LCD_write_char(X,Y,*s);
s++;
X+=6;
}
}
///************************************************
// 函數(shù)名: void disp16_16(unsigned char x,unsigned char y,unsigned char address)
// 功能: NKIA5110 顯示16*16的字符
// 輸入?yún)?shù): unsigned char x,unsigned y,unsigned char c
// 輸出參數(shù): 無
// 修改日期: 9月8日
// ************************************************/
//void disp16_16(unsigned char x,unsigned char y,unsigned char address)
//{
// unsigned char c;
// LCD_set_XY(x*8, y);
// for(c=0;c<16;c++)
// {
// LCD_write_byte(han[address*32+c],1);
// }
// LCD_set_XY(x*8, y+1);
// for(c=16;c<32;c++)
// {
// LCD_write_byte(han[address*32+c],1);
// }
//}
// /************************************************
// 函數(shù)名: void LCD_write_chinese_string(unsigned char X, unsigned char Y,
// unsigned char ch_with,unsigned char num,
// unsigned char line,unsigned char row)
// 功能: NKIA5110 顯示中文字符
// 輸入?yún)?shù): unsigned char X, unsigned char Y,
// unsigned char ch_with,unsigned char num,
// unsigned char line,unsigned char row
// 輸出參數(shù): 無
// 修改日期: 9月8日
// ************************************************/
//void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row) //x,y為坐標(biāo),ch_with為漢字寬度,num為數(shù)組中第幾個(gè)漢字,line為行,row為列
//{
// unsigned char i,n;
// LCD_set_XY(X,Y); //
// for (i=0;i<num;)
// {
// for (n=0; n<ch_with*2; n++) //
// {
// if (n==ch_with) //
// {
// if (i==0) LCD_set_XY(X,Y+1);
// else
// LCD_set_XY((X+(ch_with+row)*i),Y+1);
// }
// LCD_write_byte(write_chinese[line+i][n],1);
// }
// i++;
// LCD_set_XY((X+(ch_with+row)*i),Y);
// }
//}
復(fù)制代碼
1602:
#include"yejing.h"
/*液晶*/
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
sbit RS = P2^4; //定義端口
sbit RW = P2^5;
sbit EN = P2^6;
/*------------------------------------------------
uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
長(zhǎng)度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時(shí)1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函數(shù)
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
寫入命令函數(shù)
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy());//忙則等待
DelayMs(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort=com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
寫入數(shù)據(jù)函數(shù)
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
DelayMs(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
清屏函數(shù)
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
寫入字符串函數(shù)
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_Write_Data( *s);
s ++;
}
}
/*------------------------------------------------
寫入字符函數(shù)
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函數(shù)
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*顯示模式設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*顯示關(guān)閉*/
LCD_Write_Com(0x01); /*顯示清屏*/
LCD_Write_Com(0x06); /*顯示光標(biāo)移動(dòng)設(shè)置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/
}
復(fù)制代碼
作者:
whengfu
時(shí)間:
2016-1-11 11:39
好東西,菜鳥的福音,收藏了
作者:
愛的步伐XY
時(shí)間:
2016-1-11 15:23
不錯(cuò),下載看看
作者:
xql1997
時(shí)間:
2016-7-19 22:10
很好很好 感謝樓主
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1