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

📄 1302disp.c

📁 1302芯片c语言程序。ADS1.2下的工程文件。
💻 C
📖 第 1 页 / 共 2 页
字号:
//	if(disp_in_use)return -1;
	disp_in_use=1;
	if((alt!=0)&&(alt!=IE))
	{
		disp_in_use=0;
		return 0;
	}
	command(SCREEN_CONTROL1|NP|CM|DC|alt);
	disp_in_use=0;
	return 1;
}
/****************************************
	改变背景色
*****************************************/
int8 color_background(uint16 backcolor)
{
//	if(disp_in_use)return -1;
	disp_in_use=1;
	if(backcolor>7)
	{
		disp_in_use=0;
		return 0;
	}
	command(COLOR_CONTROL|RB|CC|BC|UC|backcolor);
	disp_in_use=0;
	return 1;
}
/********************************************
	设置子屏位置,输入X,Y坐标,输出:成功1,失败0
*********************************************/

uint8 set_sub_position(uint16 x,uint16 y)
{
	if((x>0x1ff)|(y>0xff))return 0;
	command(SUB_SCREEN_VERTICAL_POSITION_CONTROL|(y&0x007f)|((y<<1)&0x0100));
	command(SUB_SCREEN_HORIZONTAL_POSITION_CONTROL|(x&0x007f)|((x<<1)&0x0300));
	return 1;
}


/*uint8 set_sub_position(uint16 x,uint16 y)
{
	if((x>0x1ff)|(y>0xff))return 0;
	command(SUB_SCREEN_VERTICAL_POSITION_CONTROL|(y&0x007f)|((y<<1)&0x0100)|SGA);
	command(SUB_SCREEN_HORIZONTAL_POSITION_CONTROL|(x&0x007f)|((x<<1)&0x0300));
	return 1;
}*/
/*********************************************
	设置子屏的行数,字符颜色,字符背景颜色
	输出:成功1,失败0
**********************************************/
uint8 init_sub_screen(uint16 linenum,uint16 charcolor,uint16 backcolor)
{
	if((linenum>7)|(charcolor>7)|(backcolor>7))return 0;
	command(SUB_SCREEN_CONTROL|(linenum<<8)|0x0038|backcolor);
	return 1;
}


/*uint8 init_sub_screen(uint16 linenum,uint16 charcolor,uint16 backcolor)
{
	if((linenum>7)|(charcolor>7)|(backcolor>7))return 0;
	command(SUB_SCREEN_CONTROL|(linenum<<8)|(charcolor<<3)|backcolor);
	return 1;
}*/

/**************************************
	子屏显示字符行定位,输入X坐标,输出:成功1,失败0
***************************************/
int8 sub_gotoxy(uint16 x,uint16 y) 
{
	uint16 com;
	if((x>0x000f)|(y>0x001f))return 0;
	_X=x;_Y=y;
	com=VRAM_ADDR_SET|VSL;
	com|=((_X<<6)&0x0300);
	com|=((_X<<5)&0x0060);
	com|=_Y<<1;
	command(com);
	return 1;
}



/*uint8 sub_location(uint16 x)
{
	uint16 com;
	if(x>0x000f)return 0;
	com=VRAM_ADDR_SET|VSL;
	com|=((x<<6)&0x0300);
	com|=((x<<5)&0x0060);
	command(com);
	return 1;
}*/

/**************************************
	在子屏X行显示1个汉字
	输入:行X,列Y,汉字内码,字符颜色,字符背景颜色
***************************************/
int8 sub_display(char x,char y,uint16 gb,uint16 CharColor,uint16 BackColor)
{
	if(!sub_gotoxy(x,y))return 0;
	command(GbToAddress(gb).char_addr1|CharColor|BackColor|SUB_SCREEN_LINE_CONTROL1);
	command(GbToAddress(gb).char_addr2|SUB_SCREEN_LINE_CONTROL2);
	return 1;
}


/*uint8 sub_display(uint16 x,uint16 y,uint16 gb,uint16 CharColor,uint16 BackColor)
{
	if(!sub_location(x))return 0;
	command(GbToAddress(gb).char_addr1|CharColor|BackColor|SUB_SCREEN_LINE_CONTROL1);
	command(GbToAddress(gb).char_addr2|SUB_SCREEN_LINE_CONTROL2);
	return 1;
}*/


void disp1(void)
{
    time_1302_buf0 = (set_1302_buf[6]>>4)+48;
    time_1302_buf1 = (set_1302_buf[6]&0x0f)+48;
    time_1302_buf2 = (set_1302_buf[5]>>4)+48;
    time_1302_buf3 = (set_1302_buf[5]&0x0f)+48;
    time_1302_buf4 = (set_1302_buf[4]>>4)+48;
    time_1302_buf5 = (set_1302_buf[4]&0x0f)+48;
    time_1302_buf6 = (set_1302_buf[3]>>4)+48;
    time_1302_buf7 = (set_1302_buf[3]&0x0f)+48;
    time_1302_buf8 = (set_1302_buf[2]>>4)+48;
    time_1302_buf9 = (set_1302_buf[2]&0x0f)+48;
    time_1302_buf10 = (set_1302_buf[1]>>4)+48;
    time_1302_buf11 = (set_1302_buf[1]&0x0f)+48;
//    strncat(time_1302_buf0,time_1302_buf1,2);
//    strncat(time_1302_buf2,time_1302_buf3,2);
//    strncat(time_1302_buf4,time_1302_buf5,2);
//    strncat(time_1302_buf6,time_1302_buf7,2);
//    strncat(time_1302_buf8,time_1302_buf9,2);
//    strncat(time_1302_buf10,time_1302_buf11,1);
//    disp_1302_buf[6] = (set_1302_buf[6]>>4)*16+set_1302_buf[6]+48;
//    disp_1302_buf[5] = (set_1302_buf[5]>>4)*16+set_1302_buf[5]+48;
//	disp_1302_buf[4] = (set_1302_buf[4]>>4)*16+set_1302_buf[4]+48;
//	disp_1302_buf[3] = (set_1302_buf[3]>>4)*16+set_1302_buf[3]+48;
//	disp_1302_buf[2] = (set_1302_buf[2]>>4)*16+set_1302_buf[2]+48;
//	disp_1302_buf[1] = (set_1302_buf[1]>>4)*16+set_1302_buf[1]+48;
	sprintex(4,0,&time_1302_buf0,C_WHITE,B_WHITE);
	sprintex(4,1,&time_1302_buf1,C_WHITE,B_WHITE);
	sprintex(4,2,"年",C_WHITE,B_WHITE);
	sprintex(4,3,&time_1302_buf4,C_WHITE,B_WHITE);
	sprintex(4,4,&time_1302_buf5,C_WHITE,B_WHITE);
	sprintex(4,5,"月",C_WHITE,B_WHITE);
	sprintex(4,6,&time_1302_buf6,C_WHITE,B_WHITE);
	sprintex(4,7,&time_1302_buf7,C_WHITE,B_WHITE);
	sprintex(4,8,"日",C_WHITE,B_WHITE);
	sprintex(2,0,&time_1302_buf8,C_WHITE,B_WHITE);
	sprintex(2,1,&time_1302_buf9,C_WHITE,B_WHITE);
	sprintex(2,2,"时",C_WHITE,B_WHITE);
	sprintex(2,3,&time_1302_buf10,C_WHITE,B_WHITE);
	sprintex(2,4,&time_1302_buf11,C_WHITE,B_WHITE);
	sprintex(2,5,"分",C_WHITE,B_WHITE);
	sprintex(2,7,"周",C_WHITE,B_WHITE);
	sprintex(2,8,&time_1302_buf2,C_WHITE,B_WHITE);
	sprintex(2,9,&time_1302_buf3,C_WHITE,B_WHITE);
	//sprintex(0,9,"     ",C_WHITE,B_WHITE);
	//sprintex(2,9,"     ",C_WHITE,B_WHITE);	
//	sprintex(2,0,"收件箱:3封",C_WHITE,B_WHITE);   
//	sprintex(4,0,"胖小 LOVE 丫头",C_WHITE,B_WHITE); 
//    sprintex(7,5,"查看",C_WHITE,B_WHITE);

}
void disp2(void)
{
    sprintex(0,5,"第一封",C_WHITE,B_WHITE);  
	sprintex(4,0,"胖小 LOVE 丫头",C_WHITE,B_WHITE); 
    sprintex(7,8,"下一封",C_WHITE,B_WHITE);
    sprintex(7,0,"上一封",C_WHITE,B_WHITE);

}
void disp3(void)
{
    sprintex(0,5,"第二封",C_WHITE,B_WHITE);   
	sprintex(4,0,"胖小还是 LOVE 丫头",C_WHITE,B_WHITE); 
    sprintex(7,8,"下一封",C_WHITE,B_WHITE);
    sprintex(7,0,"上一封",C_WHITE,B_WHITE);

}


/***************************************/
/*void io0_set(uint8 data)
{
	IO0SET=0x00000001<<data;
}


void io0_clr(uint8 data)
{
	IO0CLR=0x00000001<<data;
}*/

void io1_set(uint8 data)
{
	IO1SET=0x00000001<<data;
}


void io1_clr(uint8 data)
{
	IO1CLR=0x00000001<<data;
}


void io3_set(uint8 data)
{
	IO3SET=0x00000001<<data;
}


void io3_clr(uint8 data)
{
	IO3CLR=0x00000001<<data;
}




void Hold(uint32  dly) 
{   uint32 i;
   for(; dly>0; dly--); 
     for(i=0; i<10; i++);
} 


void v_InitDS1302(void) 
{  
  IO1DIR = IO1DIR|T_OUTCON1; 
  IO3DIR = IO3DIR|T_OUTCON3;
} 
/********************************************************************  
* 
* 名称: v_RTInputByte 
* 说明:  
* 功能: 往DS1302写入1Byte数据 
* 调用: 
* 输入: ucDa 写入的数据  
* 返回值: 无 
***********************************************************************/ 

void v_RTInputByte(uint8 ucDa)  
{  
uint8 i; 

for(i=8; i>0; i--) 
{ 
if((ucDa&0x01) != 0) 
   io1_set(T_IO); 
else 
   io1_clr(T_IO); 
Hold(10); 
io3_set(T_CLK); 
Hold(20); 
io3_clr(T_CLK); 
Hold(10); 

ucDa >>= 1;  /*相当于汇编中的 RRC */ 
}  
} 
/********************************************************************  
* 
* 名称: uchar uc_RTOutputByte 
* 说明:  
* 功能: 从DS1302读取1Byte数据 
* 调用:  
* 输入:  
* 返回值: ucDa 
***********************************************************************/ 
uint8 uc_RTOutputByte(void)  
{  
uint8 i; 
uint8 ucDa=0; 
IO1DIR = IO1DIR&T_INCON; 
for(i=8; i>0; i--) 
{ 
Hold(10); 

ucDa >>= 1;  /*相当于汇编中的 RRC */ 
if((IO1PIN&T_IO_SET) !=0 )/////////////// 
    ucDa += 0x80; 

io3_set(T_CLK); 
Hold(20); 
io3_clr(T_CLK); 
Hold(10); 
}  
IO1DIR = IO1DIR |T_OUTCON1; 
return(ucDa);  
} 
/********************************************************************  
* 
* 名称: v_W1302 
* 说明: 先写地址,后写命令/数据 
* 功能: 往DS1302写入数据 
* 调用: v_RTInputByte()  
* 输入: ucAddr: DS1302地址, ucDa: 要写的数据 
* 返回值: 无 
***********************************************************************/ 
void v_W1302(uint8 ucAddr, uint8 ucDa) 
{ 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(ucAddr); /* 地址,命令 */ 
v_RTInputByte(ucDa); /* 写1Byte数据*/ 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 
}  
/********************************************************************  
* 
* 名称: uc_R1302 
* 说明: 先写地址,后读命令/数据 
* 功能: 读取DS1302某地址的数据 
* 调用: v_RTInputByte() , uc_RTOutputByte() 
* 输入: ucAddr: DS1302地址 
* 返回值: ucDa :读取的数据 
***********************************************************************/ 
uint8 uc_R1302(uint8 ucAddr) 
{ 
uint8 ucDa; 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(ucAddr); /* 地址,命令 */ 
ucDa = uc_RTOutputByte(); /* 读1Byte数据 */ 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 

return(ucDa); 
} 
/********************************************************************  
* 
* 名称: v_BurstW1302T 
* 说明: 先写地址,后写数据(时钟多字节方式) 
* 功能: 往DS1302写入时钟数据(多字节方式) 
* 调用: v_RTInputByte()  
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制 
* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B 
* 返回值: 无 
***********************************************************************/ 
void v_BurstW1302T(uint8 *pSecDa) 
{ 
uint8 i; 
v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */ 
for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/ 
{ 
v_RTInputByte(*pSecDa);/* 写1Byte数据*/ 
pSecDa++; 
} 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 
}  
/********************************************************************  
* 
* 名称: v_BurstR1302T 
* 说明: 先写地址,后读命令/数据(时钟多字节方式) 
* 功能: 读取DS1302时钟数据 
* 调用: v_RTInputByte() , uc_RTOutputByte() 
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年  
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 
* 返回值: ucDa :读取的数据 
***********************************************************************/ 
void v_BurstR1302T(uint8 *pSecDa) 
{ 
uint8 i; 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */ 
for (i=8; i>0; i--)  
{ 
*pSecDa = uc_RTOutputByte(); /* 读1Byte数据 */ 
pSecDa++; 
} 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 
} 
/********************************************************************  
* 
* 名称: v_BurstW1302R 
* 说明: 先写地址,后写数据(寄存器多字节方式) 
* 功能: 往DS1302寄存器数写入数据(多字节方式) 
* 调用: v_RTInputByte()  
* 输入: pReDa: 寄存器数据地址 
* 返回值: 无 
***********************************************************************/ 
void v_BurstW1302R(uint8 *pReDa) 
{ 
uint8 i; 
v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */ 
for (i=31;i>0;i--) /*31Byte 寄存器数据 */ 
{ 
v_RTInputByte(*pReDa); /* 写1Byte数据*/ 
pReDa++; 
} 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 
}  
/********************************************************************  
* 
* 名称: uc_BurstR1302R 
* 说明: 先写地址,后读命令/数据(寄存器多字节方式) 
* 功能: 读取DS1302寄存器数据 
* 调用: v_RTInputByte() , uc_RTOutputByte() 
* 输入: pReDa: 寄存器数据地址 
* 返回值: 无 
***********************************************************************/ 
void v_BurstR1302R(uint8 *pReDa) 
{ 
uint8 i; 
io3_clr(T_RST); /*T_RST = 0;*/ 
io3_clr(T_CLK); /*T_CLK = 0;*/ 
Hold(40); 
io3_set(T_RST); /*T_RST = 1;*/ 
v_RTInputByte(0xff); /* 0xbf:时钟多字节读命令 */ 
for (i=31; i>0; i--) /*31Byte 寄存器数据 */ 
{ 
*pReDa = uc_RTOutputByte(); /* 读1Byte数据 */ 
pReDa++; 
} 
io3_set(T_CLK); /*T_CLK = 1;*/ 
io3_clr(T_RST); /*T_RST = 0;*/ 
Hold(40); 
} 
/********************************************************************  
* 
* 名称: v_Set1302 
* 说明:  
* 功能: 设置初始时间 
* 调用: v_W1302()  
* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年  
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 
* 返回值: 无 
***********************************************************************/ 
void v_Set1302(uint8 *pSecDa)  
{ 
uint8 i; 
uint8 ucAddr = 0x80; 

v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/ 
for(i =0;i<7;i++) 
{  
v_W1302(ucAddr,((*pSecDa)*16)+*(pSecDa+1)); /*  分 时 日 月  年 */ 
pSecDa++;
pSecDa++; 
ucAddr +=2; 
/*if(i==4)
{
   ucAddr -=4;
}
else
{
ucAddr -=2; 
}*/
} 
v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/ 
} 
/********************************************************************  
* 
* 名称: v_Get1302 
* 说明:  
* 功能: 读取DS1302当前时间 
* 调用: uc_R1302()  
* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年  
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 
* 返回值: 无 
***********************************************************************/ 
void v_Get1302(uint8 ucCurtime[])  
{ 
uint8 i; 
uint8 ucAddr = 0x81; 
for (i=0;i<7;i++) 
{ 
ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */ 
ucAddr += 2; 
} 
}   


/*uint8 set_1302(void)
{
    if(Ds1302_Buf[2]==1&&Ds1302_Buf[3]>2)                         //判断是否大于12月
        return 1;
    else if(Ds1302_Buf[2]>1)                                      //判断是否月得十位大于1
        return 1;
    else if(Ds1302_Buf[4]>3)                                       //判断日十位是否大于3
        return 1;
    else if(Ds1302_Buf[4]>2&&Ds1302_Buf[3]==2)                     //2月不得有日十位大于2                                    //判断日十位是否大于3
        return 1;        
    else if(Ds1302_Buf[4]==3&&Ds1302_Buf[2]==0&&(Ds1302_Buf[3]==1||Ds1302_Buf[3]==3||Ds1302_Buf[3]==5||Ds1302_Buf[3]==7||Ds1302_Buf[3]==7)&&Ds1302_Buf[5]>1)   //判断大月份在10月内不得大于31天
        return 1;
    else if(Ds1302_Buf[4]==3&&Ds1302_Buf[2]==1&&(Ds1302_Buf[3]==0||Ds1302_Buf[3]==2)&&Ds1302_Buf[5]>1)             //判断大月份在10月外得天数不得大于31天
        return 1; 
    else if(Ds1302_Buf[4]==3&&Ds1302_Buf[2]==0&&(Ds1302_Buf[3]==4||Ds1302_Buf[3]==6||Ds1302_Buf[3]==9)&&Ds1302_Buf[5]>0)              //判断小月份在10月内得天数不得大于30天
        return 1;  
    else if(Ds1302_Buf[4]==3&&Ds1302_Buf[2]==1&&Ds1302_Buf[3]==1&&Ds1302_Buf[5]>0)                                 //判断小月份在10月外得不得大于30天
        return 1;  
    else if(Ds1302_Buf[4]==2&&Ds1302_Buf[2]==0&&Ds1302_Buf[3]==2&&(((Ds1302_Buf[0]*10+Ds1302_Buf[1])%4)==0)&&Ds1302_Buf[5]>9)          //判断闰年2月不得大于29天
        return 1;  
    else if(Ds1302_Buf[4]==2&&Ds1302_Buf[2]==0&&Ds1302_Buf[3]==2&&(((Ds1302_Buf[0]*10+Ds1302_Buf[1])%4)!=0)&&Ds1302_Buf[5]>8)          //判断平年2月不得大于28天
        return 1; 
    else if(Ds1302_Buf[6]>5)                        //小时十位不能大于5
        return 1;  
    else if(Ds1302_Buf[8]>5)                        //分钟十位不能大于5
        return 1;  
    v_Set1302(Ds1302_Buf);
        return 0;                                             
}*/

int  main(void)
{ 
   PINSEL2 = 0x00000034;

  IO0DIR =0x00400000;
  IO0CLR =0x00400000;
  IO1DIR =0x00100000;
  IO1CLR =0x00100000;
  IO2DIR =0xf0000000;
  IO2SET =0xf0000000;
   MB90092_REST();/*复位90092*/
	init_sub_screen(1,C_YELLOW,B_CYAN);
	set_sub_position(511,255);
	sub_display(0,0,*(int16 *)" ",C_YELLOW,B_CYAN);
	sub_display(1,0,*(int16 *)" ",C_YELLOW,B_CYAN);
	init_sub_screen(1,C_YELLOW,B_CYAN);
	
	ondisplay(/*config_table.backcolor&*/B_BLUE&0x0007,0);/*开显示*/
	set_main_position(0,27);/*设置主屏左上角位置(2,23)*/
	set_text();/*设置显示为文本方式*/
    cls();

   v_InitDS1302();
   time_1302_buf[0]=0;
   time_1302_buf[1]=1;
   time_1302_buf[2]=1;
   time_1302_buf[3]=6;
   time_1302_buf[4]=1;
   time_1302_buf[5]=5;
   time_1302_buf[6]=1;
   time_1302_buf[7]=1;
   time_1302_buf[8]=0;
   time_1302_buf[9]=2;
   time_1302_buf[10]=0;
   time_1302_buf[11]=7;
   time_1302_buf[12]=0;
   time_1302_buf[13]=7;
 //  v_Set1302(time_1302_buf);
 //  v_Get1302(set_1302_buf);
   while(1)
   {
   v_Get1302(set_1302_buf);
   cls();
   disp1();
   DelayNS(65000);
	}
	return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -