📄 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 + -