?? lcd.c
字號:
#include "LCD.h"
//液晶傳送命令/數據函數
void wr_lcd(uchar adc, uchar bits,uchar n)
{
unsigned char i,temp;
uchar wrn;
if(n==1)
wrn=WR1;
else
wrn=WR2;
LCDOUT &= ~CS;
delay(5);
for(i=0;i<bits;i++)
{
//LCDOUT &= ~WR1; //wr1/2 上升沿寫入
LCDOUT |= wrn;
delay(5);
temp = adc&0x80;
if(temp==0x80) //判斷高位是否為1
LCDOUT |= DATA; //為1則寫入1
else
LCDOUT &= ~DATA; //為0則寫入0
delay(5);
LCDOUT &= ~wrn; //wr1/2 上升沿寫入
delay(5);
LCDOUT |= wrn;
adc=adc<<1;
delay(5);
}
}
uchar rd_lcd(uchar adc,uchar n)//讀顯示ram
{
unsigned char i,temp;
uchar wrn;
if(n==1)
wrn=WR1;
else
wrn=WR2;
LCDOUT &= ~CS;
delay(5);
wr_lcd(0xc0,3,wrn);
adc=adc<<2;
wr_lcd(adc,6,wrn);
for(i=0;i<4;i++)
{
//LCDOUT &= ~WR1; //wr1/2 上升沿寫入
LCDOUT |= wrn;
delay(5);
temp = adc&0x80;
if(temp==0x80) //判斷高位是否為1
LCDOUT |= DATA; //為1則寫入1
else
LCDOUT &= ~DATA; //為0則寫入0
delay(5);
LCDOUT &= ~wrn; //wr1/2 上升沿寫入
delay(5);
LCDOUT |= wrn;
adc=adc<<1;
delay(5);
}
return 1;
}
//*********************************************//
// 5, 液晶顯示數據函數 //
//入口參數:地址,BCD碼。0---9顯示數字;10無顯示;11o;12F,13C,14E,15P.16L,17H,18A
void WRITE_LCD(unsigned int add,unsigned char num,unsigned char point,uchar n)
{
wr_lcd(DDATA,3,n);//wr1選擇模式
add=add<<2;
wr_lcd(add,6,n);//wr1 選地址
switch (num)
{
case 0: //0:顯示數字 0 //
if(point==0)
wr_lcd(0xd7,8,n); //發送八位數字
else
wr_lcd(0xdf,8,n); //發送八位數字
break;
case 1:
if(point==0)
wr_lcd(0x06,8,n); //發送八位數字
else
wr_lcd(0x0e,8,n); //發送八位數字
break;
case 2:
if(point==0)
wr_lcd(0xe3,8,n); //發送八位數字
else
wr_lcd(0xeb,8,n); //發送八位數字
break;
case 3:
if(point==0)
wr_lcd(0xa7,8,n); //發送八位數字
else
wr_lcd(0xaf,8,n); //發送八位數字
break;
case 4:
if(point==0)
wr_lcd(0x36,8,n); //發送八位數字
else
wr_lcd(0x3e,8,n); //發送八位數字
break;
case 5:
if(point==0)
wr_lcd(0xb5,8,n); //發送八位數字
else
wr_lcd(0xbd,8,n); //發送八位數字
break;
case 6:
if(point==0)
wr_lcd(0xf5,8,n); //發送八位數字
else
wr_lcd(0xfd,8,n); //發送八位數字
break;
case 7:
if(point==0)
wr_lcd(0x07,8,n); //發送八位數字
else
wr_lcd(0x0f,8,n); //發送八位數字
break;
case 8:
if(point==0)
wr_lcd(0xf7,8,n); //發送八位數字
else
wr_lcd(0xff,8,n); //發送八位數字
break;
case 9:
if(point==0)
wr_lcd(0xb7,8,n); //發送八位數字
else
wr_lcd(0xbf,8,n); //發送八位數字
break;
case 10: //10:無顯示 //
if(point==0)
wr_lcd(0x00,8,n);
else
wr_lcd(0x08,8,n);
break;
case 11: //11:顯示字母 O //
if(point==0)
wr_lcd(0x33,8,n);
else
wr_lcd(0x3b,8,n);
break;
case 12: //12:顯示字母F //
if(point==0)
wr_lcd(0x71,8,n);
else
wr_lcd(0x79,8,n);
break;
case 13: //13:顯示字母C //
if(point==0)
wr_lcd(0xd1,8,n);
else
wr_lcd(0xd9,8,n);
break;
case 14: //14:顯示字母E //
if(point==0)
wr_lcd(0xf1,8,n);
else
wr_lcd(0xf9,8,n);
break;
case 15: //15:顯示字母P //
if(point==0)
wr_lcd(0x73,8,n);
else
wr_lcd(0x7b,8,n);
break;
case 16: //16:顯示字母L //
if(point==0)
wr_lcd(0xd0,8,n);
else
wr_lcd(0xd8,8,n);
break;
case 17: //17:顯示字母H //
if(point==0)
wr_lcd(0x76,8,n);
else
wr_lcd(0x7e,8,n);
break;
case 18: //18:顯示字母A //
if(point==0)
wr_lcd(0x77,8,n);
else
wr_lcd(0x7f,8,n);
break;
case 19: //19:顯示字母U //
if(point==0)
wr_lcd(0xd6,8,n);
else
wr_lcd(0xde,8,n);
break;
case 20: //20:顯示- //
if(point==0)
wr_lcd(0x20,8,n);
else
wr_lcd(0x28,8,n);
break;
default: //默認無顯示 //
if(point==0)
wr_lcd(0x00,8,n);
else
wr_lcd(0x08,8,n);
break;
}
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
}
//************************************************//
//*********************************************//
// 5.5, 液晶上電初始化 //
void LCD_INIT(void){
uint i;
for(i=0;i<60000;i++)
;
LCDDIR |= (CS+WR1+WR2+DATA);//cs、sclk、std腳為輸出
LCDOUT |= (CS+WR1+WR2+DATA);
//wr1初始化
wr_lcd(COMMAND,3,1);//wr1選擇模式
wr_lcd(0x29,9,1);//wr1 寫初始化命令字0010 1001:8位,命令代碼+0=9位。專用初始化命令
//LCDOUT |= CS;
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,1);//wr1選擇模式
wr_lcd(0x18,9,1);//wr1 定義RC振蕩方式:選內部振蕩器
//LCDOUT |= CS;
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,1);//wr1選擇模式
wr_lcd(0x01,9,1);//wr1 開振蕩器
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,1);//wr1選擇模式
wr_lcd(0x03,9,1);//wr1 開顯示器
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
//wr2初始化
wr_lcd(COMMAND,3,2);//wr1選擇模式 100
wr_lcd(0x29,9,2);//wr1 寫初始化命令字:8位,命令代碼+0=9位。
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,2);//wr1選擇模式
wr_lcd(0x18,9,2);//wr1 定義RC振蕩方式:選內部振蕩器
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,2);//wr1選擇模式
wr_lcd(0x01,9,2);//wr1 開振蕩器
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
delay(60);
wr_lcd(COMMAND,3,2);//wr1選擇模式
wr_lcd(0x03,9,2);//wr1 開顯示器
LCDOUT |= (CS+WR1+WR2+DATA);//置高電平以實現低功耗。
}
void delay(uint n)
{
uint i;
for(i=0;i<n;i++)
;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -