📄 红外控制ds1302.c
字号:
Time = read_clock(0x85);
Time_0 = Time;
Time = Time >> 4;
Time_0 &= 0x0f;
if(time_flag == 1)
{
if(Time_flag0 == 1)
{
if(flag <= 10)
P2_7 = 0;
else
P2_7 = 1;
P0 = SEG_TAB[ Time ];
Delay(1);
P2_7 = 1;
if(flag <= 10)
P2_6 = 0;
else
P2_6 = 1;
P0 = SEG_TAB[ Time_0 ];
Delay(1);
P2_6 = 1;
}
else
{
P2_7 = 0; //第一个数码管显示时的十位
P0 = SEG_TAB[ Time ];
Delay(1);
P2_7 = 1;
P2_6 = 0;//第2个数码管显示时的个位
P0 = SEG_TAB[ Time_0 ];
Delay(1);
P2_6 = 1;
}
P2_5 = 0;
P0=0xbf;
Delay(1);
P2_5 = 1;
if(Min_flag == 1)
{
if(flag <= 10)
P2_4 = 0;
else
P2_4 = 1;
P0 = SEG_TAB[ Min ];
Delay(1);
P2_4 = 1;
if(flag <= 10)
P2_3 = 0;
else
P2_3 = 1;
P0 = SEG_TAB[ Min_0 ];
Delay(1);
P2_3 = 1;
}
else
{
P2_4 = 0;//第4个数码管显示分的十位
P0 = SEG_TAB[ Min];
Delay(1);
P2_4 = 1;
P2_3 = 0;//第5个数码管显示分的个位
P0 =SEG_TAB[ Min_0 ];
Delay(1);
P2_3 = 1;
}
P2_2 = 0;
P0=0xbf;
Delay(1);
P2_2 = 1;
if(Sec_flag == 1)
{
if(flag <= 10)
P2_1 = 0;
else
P2_1 = 1;
P0 = SEG_TAB[ Sec ];
Delay(1);
P2_1 = 1;
if(flag <= 10)
P2_0 = 0;
else
P2_0 = 1;
P0 = SEG_TAB[ Sec_0 ];
Delay(1);
P2_0 = 1;
}
else
{
P2_1 = 0;//第7个数码管显示秒的十位
P0 = SEG_TAB[ Sec ];
Delay(1);
P2_1 = 1;
P2_0 = 0;//第8个数码管显示秒的各位。
P0 = SEG_TAB[ Sec_0 ];
Delay(1);
P2_0 = 1;
}
}
else
{
P2_7 = 0; //第一个数码管显示时的十位
P0 = SEG_TAB[ Time ];
Delay(1);
P2_7 = 1;
P2_6 = 0;//第2个数码管显示时的个位
P0 = SEG_TAB[ Time_0 ];
Delay(1);
P2_6 = 1;
P2_5 = 0;
P0 = 0xbf;
Delay(1);
P2_5 = 1;
P2_4 = 0;//第4个数码管显示分的十位
P0 = SEG_TAB[ Min];
Delay(1);
P2_4 = 1;
P2_3 = 0;//第5个数码管显示分的个位
P0 =SEG_TAB[ Min_0 ];
Delay(1);
P2_3 = 1;
P2_2 = 0;
P0=0xbf;
Delay(1);
P2_2 = 1;
P2_1 = 0;//第7个数码管显示秒的十位
P0 = SEG_TAB[ Sec ];
Delay(1);
P2_1 = 1;
P2_0 = 0;//第8个数码管显示秒的各位。
P0 = SEG_TAB[ Sec_0 ];
Delay(1);
P2_0 = 1;
}
}
/********************************************************************************************
* 函数名称:BCD_D
* 功 能:BCD转10进制
* 入口参数:BCD码
* 出口参数:10进制
*********************************************************************************************/
uchar BCD_D(uchar BCD)
{
uchar temp1,temp2;
temp1 = BCD >> 4;
temp2 = BCD & 0x0f;
return(temp1*10 + temp2);
}
/********************************************************************************************
* 函数名称:Key()
* 功 能:键盘控制程序
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Key(void)
{
uchar add_flag,sub_flag,Sec_1,Min_1,Time_1;
static uchar Count1;
if(Count0 != 0)
{
switch(Count0) //判断键值
{
case 0xab : Count1++;time_flag = 1;add_flag = 0;sub_flag = 0;
if(Count1 == 4)
Count1 = 0;
switch(Count1)
{
case 1 : Sec_flag = 1; Min_flag = 0; Time_flag0 = 0;break;
case 2 : Sec_flag = 0; Min_flag = 1; Time_flag0 = 0; break;
case 3 : Sec_flag = 0; Min_flag = 0; Time_flag0 = 1;break;
case 0 : time_flag = 0; Sec_flag = 0; Min_flag = 0; Time_flag0 = 0;break;
default : break;
}
break;
case 0xac : add_flag = 1;sub_flag = 0;break;
case 0xad : add_flag = 0;sub_flag = 1;break;
default : break;
}
if( add_flag == 1) //加运算
{
switch(Count1)
{
case 1: Sec_1 = read_clock(0x81);
Sec = BCD_D(Sec_1);
Sec++;
if(Sec == 60)
Sec =0;
write_clock(0x8e,0x00);write_clock(0x80,SEG_TBC[Sec]);write_clock(0x8e,0x80);
break;
case 2: Min_1 = read_clock(0x83);
Min = BCD_D(Min_1);
Min++;
if(Min == 60)
Min = 0;
write_clock(0x8e,0x00);write_clock(0x82,SEG_TBC[Min]);write_clock(0x8e,0x80);
break;
case 3: Time_1 = read_clock(0x85);
Time = BCD_D(Time_1);
Time++;
if(Time == 24)
Time = 0;
write_clock(0x8e,0x00);write_clock(0x84,SEG_TBC[Time]);write_clock(0x8e,0x80);
break;
default : break;
}
add_flag = 0;
Count0 = 0;
}
if( sub_flag == 1) //减运算
{
switch(Count1)
{
case 1: Sec_1 = read_clock(0x81);
Sec = BCD_D(Sec_1);
Sec--;
if(Sec+1 == 0)
Sec = 59;
write_clock(0x8e,0x00);write_clock(0x80,SEG_TBC[Sec]);write_clock(0x8e,0x80);
break;
case 2: Min_1 = read_clock(0x83);
Min = BCD_D(Min_1);
Min--;
if(Min == 0)
Min = 59;
write_clock(0x8e,0x00);write_clock(0x82,SEG_TBC[Min]);write_clock(0x8e,0x80);
break;
case 3: Time_1 = read_clock(0x85);
Time = BCD_D(Time_1);
Time--;
if(Time == 0)
Time = 23;
write_clock(0x8e,0x00);write_clock(0x84,SEG_TBC[Time]);write_clock(0x8e,0x80);
break;
default : break;
}
sub_flag = 0;
Count0 = 0;
}
Count0 = 0;
}
}
/********************************************************************************************
* 函数名称:main()
* 功 能:红外解码。将38KHz一体化红外接收头接收到的来自SAA-3010T遥控器的遥控编码在LED1~LED8
* 上显示(LED8为高位,LED1为低位,亮表示1,灭表示0)。
*********************************************************************************************/
void main (void)
{
TMOD = 0x11; // 定时器0,1方式1
EA = 1; // 允许CPU中断
IT0 = 1; // INT0下降沿有效
EX0 = 1; // 开INT0中断
Init_1302();
while(1)
{
Key();
Disp_Time();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -