?? hy333hy.c
字號:
/*========================================
1602lcd模塊驅動程序
==========================================
說明: 1.晶體:11.0592MHz
2.1602驅動:ks0066
******************************************/
#include <At89s51.h>
#include <string.h>
//#include <intrins.h>
sbit LCM_RS = P3^3; /*寄存器選擇*/
sbit LCM_RW = P3^4; /*讀/ 寫控制*/
sbit LCM_E = P3^5; /*讀/ 寫使能*/
//bit flag =0;
#define LCM_Data P1
//函數聲明
void Delay5ms(void);
void Delay400ms(void);
void LCM_Write_Command(unsigned char WC_LCM,bit Busy_C);
/***********************************
//函數名稱: void LCM_Initial(void)
//傳遞參數: 無
//返 回 值: 無
//函數功能: LCM初始化
//函數說明:
***********************************/
void LCM_Initial(void)
{
LCM_Data = 0;
LCM_Write_Command(0x38,0); //16*2顯示,5*7點陣,8位數據接口,不檢測忙
Delay5ms();
LCM_Write_Command(0x38,0); //規定這個過程不能檢測忙,否則無法正常工作
Delay5ms();
LCM_Write_Command(0x38,0); //三次顯示模式, 不檢測忙
Delay5ms();
LCM_Write_Command(0x38,1); //16*2顯示,5*7點陣,8位數據接口,需要檢測忙
LCM_Write_Command(0x80,1); //關閉顯示
LCM_Write_Command(0x01,1); //清顯示
LCM_Write_Command(0x06,1); //指針和光標+1,不滾屏
LCM_Write_Command(0x0c,1); //開顯示,不顯示光標
}
/***********************************
//函數名稱: unsigned char LCM_Read_Status(void)
//傳遞參數: 無
//返 回 值: unsigned char
//函數功能: 讀LCM狀態,等待LCM空閑
//函數說明: DB7=1,忙
***********************************/
void LCM_Read_Status(void)
{
LCM_Data= 0xff;
//LCM_E = 0;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 1;
while(LCM_Data & 0x80);
LCM_E = 0;
//return LCM_Data;
}
/***********************************
//函數名稱: void LCM_Write_Data(unsigned char WD_LCM)
//傳遞參數: unsigned char WD_LCM
//返 回 值: 無
//函數功能: LCM寫數據
//函數說明:
***********************************/
void LCM_Write_Data(unsigned char WD_LCM)
{
LCM_Read_Status(); //判斷LCM忙標志
//LCM_E = 0;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 1;
LCM_Data= WD_LCM;
LCM_E = 0;
}
/***********************************
//函數名稱: void LCM_Write_Command(unsigned char WC_LCM, Busy_C)
//傳遞參數: unsigned char WC_LCM, Busy_C
//返 回 值: 無
//函數功能: LCM寫命令
//函數說明: Busy_C=0是,不用檢測忙信號
***********************************/
void LCM_Write_Command(unsigned char WC_LCM,bit Busy_C)
{
if (Busy_C)
{
LCM_Read_Status();
}
//LCM_E = 0;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 1;
LCM_Data= WC_LCM;
LCM_E = 0;
}
/***********************************
//函數名稱: void disp_one_char(unsigned char x, unsigned char y,unsigned char disp_data)
//傳遞參數: unsigned char x, unsigned char y,unsigned char disp_data
//返 回 值: 無
//函數功能: 指定位置顯示一個字符
//函數說明:
***********************************/
void disp_one_char(unsigned char x,unsigned char y,unsigned disp_data)
{
//y = y&0x01; //限制2 行
//x = x&0x0f; //每行15 個字
if (y)
{
x = x + 0x40; //算RAM 地址
}
x = x + 0x80;
/*if(flag==0)
{
LCM_Write_Command(x,1);
flag = 1;
}*/
LCM_Write_Command(x,1);
LCM_Write_Data(disp_data);
}
/***********************************
//函數名稱: void disp_one_char(unsigned char x, unsigned char y,unsigned char *disp_data)
//傳遞參數: unsigned char x, unsigned char y,unsigned char *disp_data
//返 回 值: 無
//函數功能: 指定位置顯示一串字符
//函數說明:
***********************************/
void Disp_List_Char(unsigned char x,unsigned char y,unsigned char *disp_data)
{
unsigned char char_length,j;
char_length = strlen(disp_data);
y = y&0x1; //限制2 行
x = x&0x0f;
//_nop_(); //每行15 個字
//flag = 0;
for (j=0;j<char_length;j++)
{
disp_one_char(x,y,*(disp_data+j)); //顯示一個字符
x++;
}
}
/***********************************
//函數名稱: void Delay5ms(void)
//傳遞參數: 無
//返 回 值: 無
//函數功能: 延時5MS
//函數說明:
***********************************/
void Delay5ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
/***********************************
//函數名稱: void Delay400ms(void)
//傳遞參數: 無
//返 回 值: 無
//函數功能: L延時400MS
//函數說明: LCM開機延時
***********************************/
void Delay400ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
/*****d******************************
//函數名稱: void main(void)
//傳遞參數: 無
//返 回 值: 無
//函數功能: 主函數
//函數說明:
************************************/
void main(void)
{
int i = 0;
Delay400ms(); //延時至少15ms 等待電源穩定
LCM_Initial(); //LCM初始化
Disp_List_Char(4,0,"HY333HY");
Disp_List_Char(4,1,"LY333LY");
// char *disp_data; //或者char *disp_data ="HY333HY";
// disp_data ="HY333HY"; //等價程序形式用字符串代替指針
// Disp_List_Char(unsigned char x, unsigned char y, unsigned char * disp_data);
for(i=0;i<5;i++)
{
LCM_Write_Command(0x18, 1);
Delay400ms();
}
while(1)
{
for(i=0;i<9;i++)
{
LCM_Write_Command(0x1c, 1);
Delay400ms();
}
for(i=0;i<9;i++)
{
LCM_Write_Command(0x18, 1);
Delay400ms();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -