?? lcd.c
字號:
#include "config.h"
/*********************************
**定義坐標
**********************************/
#define LCD_X1 0x80 //X坐標第一行
#define LCD_X2 0x88 //X坐標第二行
#define LCD_Y 0x80 //Y坐標
/*********************************
**定義傳送格式
**********************************/
#define LCD_READ 1 //讀
#define LCD_WRITE 0 //寫
#define LCD_DATA 1 //傳數據
#define LCD_COMM 0 //傳命令
/*********************************
**定義接線口
**********************************/
#define LCD_CS PORTE.0 //使能
#define LCD_STD PORTE.1 //串行數據
#define LCD_SCLK PORTE.2 //串行時鐘
#define LCD_PSB PORTE.5 //高為并行模式,低為串行模式
#define LCD_RST PORTE.7 //復位
#define Float_Dpl_Total 6
//#define Clear_Screen(); Post_Com(0x01);
/***********************
* 函數名稱: LcdWrite
** 功能描述: 對LCD寫命令或者數據
** 輸 入: uint8 read_write:選擇read或者write
uint8 data_comm:選擇data或者comm
** uint8 content:內容
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
void LcdWrite(char data_comm,char content)
{
char a,i,j,k;
delay_us(10);
a=content;
LCD_SCLK=0;
LCD_CS=1;
LCD_STD=1;
for(i=0;i<5;i++)//5個連續的“1”
{
LCD_SCLK=1;
LCD_SCLK=0;
}
//傳輸方向,讀或寫
/*if(0)
LCD_STD=LCD_READ;
else
LCD_STD=LCD_WRITE;*/
LCD_STD=LCD_WRITE;
LCD_SCLK=1;
LCD_SCLK=0;
if(data_comm)//命令或數據
LCD_STD=LCD_DATA;
else
LCD_STD=LCD_COMM;
LCD_SCLK=1;
LCD_SCLK=0;
LCD_STD=0;//第八位為“0”
LCD_SCLK=1;
LCD_SCLK=0;
for(j=0;j<2;j++)
{
for(k=0;k<4;k++)
{
a=a<<1;
LCD_STD=SREG.0;//依位寫入content
LCD_SCLK=1;
LCD_SCLK=0;
}
LCD_STD=0;
for(k=0;k<4;k++)
{
LCD_SCLK=1;
LCD_SCLK=0;
}
}
}
/***********************
* 函數名稱: LcdInit
** 功能描述: 初始化LCD
** 輸 入: 無
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
**04:光標左移,DDRAM為讀
**05:光標左移,DDRAM為寫
**06:光標右移,DDRAM為讀
**07:光標右移,DDRAM為寫
**08:整體顯示OFF,光標顯示OFF,光標位置不反白閃爍
**0C:整體顯示ON ,光標顯示OFF,光標位置不反白閃爍
**0D:整體顯示ON ,光標顯示OFF,光標位置反白閃爍
**0E:整體顯示ON ,光標顯示ON,光標位置不反白閃爍
**0F:整體顯示ON ,光標顯示ON,光標位置反白閃爍
** 注意:
********************/
void LcdInit (void)
{
LCD_RST=1;
LCD_PSB=0;
LcdWrite (LCD_COMM,0x30); //30---基本指令動作
LcdWrite (LCD_COMM,0x01); //清屏,地址指針指向00H
delay_us(100);
LcdWrite (LCD_COMM,0x06); //光標的移動方向
LcdWrite (LCD_COMM,0x0f); //開顯示,關游標
}
/***********************
* 函數名稱: LcdClear
** 功能描述: 清屏
** 輸 入: 無
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
void LcdClear(void)
{
LcdWrite(LCD_COMM,0x30);//八位控制接口 基本指令
LcdWrite(LCD_COMM,0x01);//清除顯示 將DDRAM填滿“20H”(空格),把DDRAM地址計數器調整為“00H”
delay_us(250); //重新進入點設定將I/D設為“1”,光標右移AC加1
}
/***********************
* 函數名稱: LcdSetCursor
** 功能描述: 設置光標
** 輸 入: 無
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
/*void LcdSetCursor(char x,char y)
{
LcdWrite(LCD_COMM,)
} */
/***********************
* 函數名稱: LcdDisplayChn
** 功能描述: 顯示漢字或者字符
** 輸 入: 無
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
void LcdDisplayChn(flash unsigned int *chn)//程序區存放指針變量
{
char i,j;
LcdWrite(LCD_COMM,0x30);//基本指令
LcdWrite(LCD_COMM,0x80);//設定DDRAM地址80H——9FH
/********************
LcdWrite(LCD_DATA,0x55); //調試用
********************/
for(i=0;i<4;i++)//4行
{
for(j=0;j<16;j++)//16列
LcdWrite(LCD_DATA,chn[j*16+i]);//逐字寫入
}
}
/***********************
* 函數名稱: LcdDisplayString
** 功能描述: 顯示字符串
** 輸 入: 無
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
void LcdDisplayString(flash unsigned char *da)
{
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0f);
for(;*da!='\0';da++)
{
LcdWrite(LCD_DATA,*da);
delay_ms(250);
delay_ms(250);
}
}
void LcdDisplayFloat(float da)
{
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0f);
LcdWrite(LCD_DATA,da);
delay_ms(250);
delay_ms(250);
}
/***********************
* 函數名稱: LcdDisplayNumber
** 功能描述: 顯示數字
** 輸 入: float fNum數字
char i整數位數
char j小數位數
** 輸出 : 無
** 全局變量: 無
** 調用模塊:
** 說明:
** 注意:
********************/
void LcdDisplayNumber(float fNum,char i,char,j)
{
char n=0;
float b=1;
if(i!=1)
{
n=i;
n--;
while(n)
{
b=10*b;
n--;
}
}
for(n=0;n<(j+i);n++)
{
float a=0;
a=(fNum/b);
if(a!=0)
fNum=fNum-a*b;
LcdWrite(LCD_COMM,0x30);
LcdWrite(LCD_COMM,0x0c);
LcdWrite(LCD_DATA,a+0x30);
if(1==b&j!=0)
{
wr_lcd(comm,0x30);
wr_lcd(comm,0x0c);
wr_lcd(dat,0x23);
}
b=b/10;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -