?? lcd4.c
字號:
//icflashman編寫,歡迎交流,QQ28479691
#include <pic.h>
#define uint unsigned int
#define uchar unsigned char
//-------------------------------------------
//LCD數據口定義
#define RS RB1
#define E RA5
#define LCDBUS PORTB // LCD數據口
//------------------------------------------
//LCD子函數定義
uchar BCD[7]; //十位二進制的顯示碼分別是千百十個位的顯示
void LcdInit( void ); // 初始化 LCD
void WrDat( unsigned char data ); // 寫數據到 LCD
void WrOp( unsigned char cmd ); // 寫命令到 LCD
void BLedEn(void); //打開背光
void ShowLong(uchar addr,long num);
void ShowByte(uchar addr,uchar num);
void DisText(uchar addr,const uchar *p);
//------------------------------------------
//其他子函數定義
void delayms(uint t);
void Init_System(void);
//------------------------------------------
//LCD子函數
void LcdInit( void )
{ // 初始化 LCD 顯示
PORTB = 0xC1;
TRISB = 0xC1;
TRISA = 0xDF;
WrOp(0x38);
WrOp( 0x28 ); //
WrOp( 0x0C ); // 開顯示
WrOp( 0x06 ); // 設置指針移動方式
WrOp( 0x01 ); // 清屏
}
void WrOp(uchar cmd ) // 寫命令到LCD子程序
{
LCDBUS &=0xc3; //11000011
LCDBUS |= ( ( cmd >>2 ) & 0x3C ); // 送高4位
RS = 0; // 設置為發送命令格式
E = 1; // 發送信號,下降沿觸發
NOP();
NOP();
E = 0;
LCDBUS &=0xc3 ; //
LCDBUS |= ( ( cmd <<2 ) & 0x3C ); // 送低4位
E = 1; // 發送信號,下降沿觸發
NOP();
NOP();
E = 0; //
delayms(1); //
}
void WrDat(uchar data ) // 寫數據到LCD的子程序
{
LCDBUS &= 0xc3;
LCDBUS |= ( ( data >>2 ) & 0x3C ); // 送高4位
RS = 1; // 設置為發送數據格式
E = 1; //
NOP();
NOP(); //
E = 0; // set enable low
LCDBUS &= 0xc3;
LCDBUS |= ( ( data <<2 ) & 0x3C ); // 送低4位
E = 1;
NOP();
NOP();
E = 0;
delayms(1);
}
void BLedEn(void)
{//打開背光
ADCON1=0x06;
TRISE0=0;
RE0=0;
}
void DisText(uchar addr,const uchar *p)
{//在ADDR處起顯示p指向的字符串
WrOp(addr);
while(*p !='\0')WrDat(*(p++));
}
void ShowLong(uchar addr,long num) //在addr處顯示數位num
{//將num轉化成五個BCD碼存放在全局陣列BCD[5]中
uchar i;
num%=1000000;
for(i=6;i>0;i--) //將NUM資料轉化成ASCII碼,如521會轉化爲00521
{
BCD[i-1]=(uchar)(num%10+0x30); //取出最低位
num/=10; //去掉最低位
}
i=0;
while(BCD[i] ==0x30 && i<5) BCD[i++]=' '; //NUM轉換成陣列存放,但還沒有加上小數點
BCD[6]='\0';
DisText(addr,BCD);
}
void ShowByte(uchar addr,uchar num)
{//將num轉化成五個BCD碼存放在全局數組BCD[5]中
uchar i;
for(i=3;i>0;i--) //將NUM數據轉化成ASCII碼,如521會轉化為00521
{
BCD[i-1]=(uchar)(num%10+0x30); //取出最低位
num/=10; //去掉最低位
}
i=0;
while(BCD[i] ==0x30 && i<2) BCD[i++]=' '; //NUM轉換成數組存放,但還沒有加上小數點
BCD[3]='\0';
DisText(addr,BCD);
}
//--------------------------------------------------
//其他函數
void delayms(uint t)
{//延時約t個ms,4M晶振,一個指令1us
uchar i;
for(;t>0;t--)
for(i=0;i<250;i++);
}
void Init_System(void)
{//系統初始化
BLedEn();
LcdInit();
GIE = 0;
}
const uchar tab[]={"GoldenChip Demo"};
//--------------------------------------------------
//主函數
void main( void )
{
uchar t;
Init_System();
DisText(0x80,tab);
ShowLong(0xc0,123456);
while(1)
{
ShowByte(0xCa,t++);
delayms(1000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -