📄 12887.c
字号:
#include <reg51.h>
#include"absacc.h"
#define VIEW_port 0xdfff
#define VIEW 0xefff
#define seconds 0x7f00 //DS12887秒所在的存储单元
#define minutes 0x7f02 //DS12887分所在的存储单元
#define hours 0x7f04 //DS12887时所在的存储单元
void main() //主函数
{unsigned char i,j,k;
init_serial();
EA=1; //开中断
while(1)
{ IT0=1;
EX0=1;
i=XBYTE[seconds]; //读取DS12887的秒时间
xianshi(i); //送数码管上显示
j=XBYTE[minutes];
xianshi1(j);
k=XBYTE[hours];
xianshi2(k);
if(P1_0==1){count=1;send();} //查询的方式判断多路信号
if(P1_1==1){count=2;send();}
if(P1_2==1){count=3;send();}
if(P1_3==1){count=4;send();}
}
}
void xianshi(unsigned char a) //显示子模块
{ unsigned char g,s;
unsigned char code dis_code[14]={0x3f,0x06,0x5b,0x4f,0x66, //0,1,2,3,4
0x6d,0x7d,0x07,0x7f,0x6f,0x7c,0x63,0x39}; //5,6,7,8,9,b,o,c
s=a/16;
g=a%16;
XBYTE[VIEW_port]=0x7f;
XBYTE[VIEW]=dis_code[g];
delay(2);
XBYTE[VIEW_port]=0xbf;
XBYTE[VIEW]=dis_code[s];
delay(2);
}
void xianshi1(unsigned char m) //显示子模块
{ unsigned char g,s;
unsigned char code dis_code[14]={0x3f,0x06,0x5b,0x4f,0x66, //0,1,2,3,4
0x6d,0x7d,0x07,0x7f,0x6f,0x7c,0x63,0x39}; //5,6,7,8,9,b,o,c
s=m/16;
g=m%16;
XBYTE[VIEW_port]=0xdf;
XBYTE[VIEW]=0x40;
delay(2);
XBYTE[VIEW_port]=0xef;
XBYTE[VIEW]=dis_code[g];
delay(2);
XBYTE[VIEW_port]=0xf7;
XBYTE[VIEW]=dis_code[s];
delay(2);
}
void xianshi2(unsigned char h) //显示子模块
{ unsigned char g,s;
unsigned char code dis_code[14]={0x3f,0x06,0x5b,0x4f,0x66, //0,1,2,3,4
0x6d,0x7d,0x07,0x7f,0x6f,0x7c,0x63,0x39}; //5,6,7,8,9,b,o,c
g=h%16;
XBYTE[VIEW_port]=0xfb;
XBYTE[VIEW]=0x40;
delay(2);
XBYTE[VIEW_port]=0xfd;
XBYTE[VIEW]=dis_code[g];
delay(2);
XBYTE[VIEW_port]=0xfe;
XBYTE[VIEW]=dis_code[s];
delay(2);
}
void init_serial() //初始化串口
{ TMOD = 0x20; //定时器T1使用工作方式2
TH1 = 0xfd; // 设置初值
TL1 = 0xfd;
PCON = 0x00; // SMOD = 1
SCON = 0x50; //工作方式1,波特率9600bps,允衹
TR1 = 0x01; // 开始计时
}
void delay(unsigned char i) //延时程序
{
unsigned char j;
while((i--)!=0)
{
for(j=123;j>0;j--);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -