⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.c

📁 DS1302显示时钟
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -