?? smc162.c
字號:
/*
* Copyright (C) 2006, 華中科技大學電氣與電子科技創新中心
* All Rights Reserved.
*
* 文件名: smc162.c
* 文件描述: 16*2字符液晶驅動主文件
*
* 當前版本: 1.0
* 作者: ZhangLi(zhangli.xing@gmail.com)
* 完成日期: 2005年12月12日
*
*/
#include "SMC162.h"
/***************************************
說明: LCD寫函數,完成LCD寫操作的物理時序
value: 寫的具體值
RS: 0 - 寫指令
1 - 寫數據
*****************************************/
void LcdWrite(unsigned char value , bit RS)
{
/* 1. 設置RS信號線 */
Lcd_RS = RS ;
/* 2. 設置RW信號線為讀 */
Lcd_RW = 0 ;
/* 3. 設置LCD片選 */
SELECT_LCD();
/* 4. 通過P0端口寫值 */
P0 = value ;
/* 5. 鎖存 */
SELECT_NONE();
}
/***************************************
說明: LCD讀函數,完成LCD讀操作的物理時序
RS: 0 - 寫指令
1 - 寫數據
return: 讀出的具體值
*****************************************/
unsigned char LcdRead(bit RS)
{
unsigned char rt ;
/* 1. 設置RS信號線 */
Lcd_RS = RS ;
/* 2. 設置RW信號線為讀 */
Lcd_RW = 1 ;
/* 3. 釋放P0口 */
P0 = 0xff ;
/* 4. 設置LCD片選 */
SELECT_LCD();
SELECT_LCD();
SELECT_LCD();
SELECT_LCD();
/* 5. 通過P0端口讀值 */
rt = P0 ;
/* 6. 鎖存 */
SELECT_NONE();
return rt ;
}
/***************************************
說明: LCD寫指令
value: 寫的具體值
attrib: 0 - 不檢測忙信號
1 - 監測忙信號
*****************************************/
void LcdWriteCmd(unsigned char value , unsigned char attrib)
{
/* 監測忙狀態 */
if(attrib)
while( LcdRead(0)&0x80 ) ;
LcdWrite(value , 0);
}
/***************************************
說明: LCD寫數據
*****************************************/
void LcdWriteData(unsigned char value)
{
/* 監測忙狀態 */
while( LcdRead(0)&0x80 ) ;
LcdWrite(value , 1);
}
/***************************************
說明: LCD讀數據
*****************************************/
unsigned char LcdReadData()
{
/* 監測忙狀態 */
while( LcdRead(0)&0x80 ) ;
return LcdRead(1);
}
/***************************************
說明: 短延時, 5ms
*****************************************/
void Delay5Ms(void)
{
unsigned int i = 5552;
while(i--);
}
/***************************************
說明: 長延時 , 400ms
*****************************************/
void Delay400Ms(void)
{
unsigned char i = 80;
while(i--)
Delay5Ms();
}
/***************************************
說明: LCD初始化函數,需要按照產品
說明書完成
*****************************************/
void LcdInit(void)
{
Delay400Ms();
/* 寫指令0x38連續3次, 不檢測忙信號*/
LcdWriteCmd(0x38 , 0 );
Delay5Ms();
LcdWriteCmd(0x38 , 0 );
Delay5Ms();
LcdWriteCmd(0x38 , 0 );
Delay5Ms();
/* 以后的讀寫操作均要判斷忙信號 */
LcdWriteCmd(0x38 , 1 );
/* 先設置關屏 */
LcdWriteCmd(0x08 , 1 );
/* 清屏 */
LcdWriteCmd(0x01 , 1 );
/* 設置光標顯示模式 */
LcdWriteCmd(0x06 , 1 );
/* 開屏并顯示光標 */
LcdWriteCmd(0x0c , 1 );
}
/***************************************
說明: 設置光標定位
*****************************************/
void LocateXY(char x , char y)
{
unsigned char temp;
temp = x & 0xf;
y &= 0x1;
if ( y )temp |= 0x40;
temp |= 0x80;
LcdWriteCmd(temp,1);
}
/***************************************
說明: 顯示字符
x: 橫坐標 y: 縱坐標
value: 顯示的字符
*****************************************/
void PutChar(char x , char y , char value)
{
LocateXY(x,y);
LcdWriteData(value);
}
/***************************************
說明: 顯示字符串
*****************************************/
void PutStr(char x , char y , char* str)
{
unsigned char i,len=0;
/* 計算字符串長度 */
while (str[len] >31)
len++;
/* 顯示字符串 */
for (i=0;i<len;i++)
{
PutChar(x++,y,str[i]);
if ( x == 16 )
{
x = 0; y ^= 1;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -