📄 1.c
字号:
RDPIN=0;
while((DATA&0x80)==0x80){
DogReset();
}
RDPIN=1;
CS2PIN=1;
}
/************************************************************************
函数名:
参数:
功能:写指令代码到片1
返回值:
************************************************************************/
void lcdwc1(uchar cmdcode){
lcdwaitidle1();
A0PIN=0;
DATA=cmdcode;
CS1PIN=0;
WRPIN=0;
_nop_();
WRPIN=1;
CS1PIN=1;
}
/************************************************************************
函数名:
参数:
功能:写指令代码到片2
返回值:
************************************************************************/
void lcdwc2(uchar cmdcode){
lcdwaitidle2();
A0PIN=0;
DATA=cmdcode;
CS2PIN=0;
WRPIN=0;
_nop_();
WRPIN=1;
CS2PIN=1;
}
/************************************************************************
函数名:
参数:
功能:写数据到片1
返回值:
************************************************************************/
void lcdwd1(uchar dispdata){
lcdwaitidle1();
A0PIN=1;
DATA=dispdata;
CS1PIN=0;
WRPIN=0;
_nop_();
WRPIN=1;
CS1PIN=1;
}
/************************************************************************
函数名:
参数:
功能:写数据到片2
返回值:
************************************************************************/
void lcdwd2(uchar dispdata){
lcdwaitidle2();
A0PIN=1;
DATA=dispdata;
CS2PIN=0;
WRPIN=0;
DATA=dispdata;
_nop_();
WRPIN=1;
CS2PIN=1;
}
/************************************************************************
函数名:
参数:
功能:读片1数据
返回值:
************************************************************************/
uchar lcdrd1(void){
uchar i;
lcdwaitidle1();
DATA=0xff;
A0PIN=1;
CS1PIN=0;
RDPIN=0;
_nop_();
i=DATA;
RDPIN=1;
CS1PIN=1;
return i;
}
/************************************************************************
函数名:
参数:
功能:读片2数据
返回值:
************************************************************************/
uchar lcdrd2(void){
uchar i;
lcdwaitidle2();
DATA=0xff;
A0PIN=1;
CS2PIN=0;
RDPIN=0;
_nop_();
i=DATA;
RDPIN=1;
CS2PIN=1;
return i;
}
/************************************************************************
函数名:
参数:
功能:写指令代码
返回值:
************************************************************************/
void lcdwc(uchar cmdcode){
if((Lcd_CurrentX)<61){
lcdwc1(cmdcode);
}
else{
lcdwc2(cmdcode);
}
}
/************************************************************************
函数名:
参数:
功能:写数据
返回值:
************************************************************************/
void lcdwd(uchar dispdata){
if(Lcd_CurrentX<61){
lcdwd1(dispdata);
}
else{
lcdwd2(dispdata);
}
}
/************************************************************************
函数名:
参数:
功能:内部数据地址指针定位
返回值:
************************************************************************/
void lcdpos(void){
if(Lcd_CurrentX<61){
lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f)); //设置地址列指针
}
else{
lcdwc(LCD_CMD_COL|((Lcd_CurrentX-61)&0x7f));
}
lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x3)); //设置地址页指针
}
/************************************************************************
函数名:
参数:
功能:读数据
返回值:
************************************************************************/
uchar lcdrd(void){
uchar i;
if(Lcd_CurrentX<61){
i=lcdrd1(); //读两次
i=lcdrd1();
}
else{
i=lcdrd2();
i=lcdrd2();
}
lcdpos();
return i;
}
/************************************************************************
函数名:
参数:
功能:当前坐标移动到下一个点
返回值:
************************************************************************/
void lcdcursornext(void){
Lcd_CurrentX++;
if(Lcd_CurrentX>LCD_RIGHT){
Lcd_CurrentX=LCD_LEFT;
Lcd_CurrentY+=8;
if(Lcd_CurrentY>LCD_BOTTOM){
Lcd_CurrentY=LCD_TOP;
}
}
}
/************************************************************************
函数名:
参数:
功能:
返回值:
************************************************************************/
void displaybyte(uchar dispdata){
lcdpos(); //内部数据地址指针定位
lcdwd(dispdata); //写数据
lcdcursornext(); //当前坐标移动到下一个点
}
/************************************************************************
函数名:
参数:
功能:整屏显示
返回值:
************************************************************************/
void lcdfill(uchar FillData){
for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;){
DogReset();
displaybyte(FillData);
if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP)){
break;
}
}
}
/************************************************************************
函数名:
参数:
功能:初始化
返回值:
************************************************************************/
void lcdreset(){
DogReset();
lcdwc1(0xe2); lcdwc2(0xe2); //复位
lcdwc1(0xc0); lcdwc2(0xc0); //设置显示初始行
lcdwc1(0xa0); lcdwc2(0xa0); //设置列序方向为正向
lcdwc1(0xa4); lcdwc2(0xa4); //设置显示模式为正常显示
lcdwc1(0xa9); lcdwc2(0xa9); //设置占空比为1/32
lcdwc1(0xaf); lcdwc2(0xaf); //开显示
}
/**************************************************************************
* 函数原型: void ChipInit(void);
* 功 能: 对CPU及外部的硬件资源进行初始化
**************************************************************************/
void ChipInit(void){
IE=0;
// 使用外部扩展RAM,允许ALE输出
#if STC89C58
AUXR=0x00; // 使用外部扩展RAM,允许ALE输出
#elif W77E58
CKCON=0xc1; // CKCON.2-0 = 100, MOVX指令用6个机器周期;CKCON.2-0 = 001, MOVX指令用3个机器周期
#endif
// 定时器控制字初始化
TMOD=0x21; // 定时器1为方式2,定时器0为方式1
TCON=0x05; // 设置外部中断类型
T2CON=0x0d; // 选择定时器1为波特率发生器,T2为捕获工作方式
ET2=0;
ET0=1; // 允许定时器0、定时器2中断
// 外部中断设置
EX0=0; // FFSK中断初始时关闭,有载波时再开启
EX1=0;
IT1=1; // 外部中断0、1均为下降沿触发
IT0=1;
// 启动定时器0
TH0=vT0HVal; // 启动定时器0
TL0=vT0LVal;
TR0=0;
// UART全双工串口的初始化
SCON = 0x50; // 串口模式1,8位UART,接收使能
PCON&=0x7f; // 串口通信速率倍数为1
TR1=0; // 启动波特率发生器
ES=0; // 允许串口中断
// 优先级设置
PT0 = 1;
PT2 = 0; // 解信令及接收FFSK为最高优先级,二者间不会引起冲突
EA=1;
// 系统看门狗设定
Dog_Init();
lcdreset();
}
/************************************************************************
函数名:
参数:
功能:
返回值:
************************************************************************/
void systeminitial(void){
lcdreset(); //初始化
ChipInit();
lcdfill(0xff); //整屏显示
delay_ms(100);
lcdfill(0); //清屏
delay_ms(100);
}
/************************************************************************
函数名:
参数:
功能:
返回值:
************************************************************************/
void main(void){
systeminitial();
put_str_xy(0,0,"长沙太阳人电子有限公司");
while(1){
DogReset();
}
}
/**************************************************************************
* 函数原型: void Trint0(void) interrupt 1 using 1;
* 功 能: 全局定时
**************************************************************************/
/*
void Trint0(void) interrupt 1 using 0{
// TR0=0; // 时基500uS
TH0=vT0HVal;
TL0=vT0LVal;
// TR0=1;
TF0=0;
CLPIN=!CLPIN;
}
/************************************************************************
END
************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -