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

📄 main.txt

📁 基于12887和80c52的时钟程序
💻 TXT
字号:
#include "include.h"
#include "ds12887.h"
#include "p8255.h"

#define close 0xff//关闭所有时间位
#define sec_ge_open 0xdf//显示秒个位
#define sec_shi_open 0xef//显示秒十位
#define min_ge_open 0xf7//显示分个位
#define min_shi_open 0xfb//显示分十位
#define ho_ge_open 0xfd//显示时个位
#define ho_shi_open 0xfe//显示时十位



uchar data bit_choose;//记录调时位选
uchar data bit_change;//记录调时设置值
uchar code d2q[]={0x7b,0X30,0Xea,0Xf8,0Xb1,0Xd9,0XDB,0X70,0Xfb,0Xf9};//十进制转换为七段码
uchar data sec;
uchar data min;
uchar data ho;
uchar data day;
uchar data date;
uchar data month;
uchar data year;
uchar data thl1;//定时器1初值

void delay(uchar data x);
void I0_timechange(void);//调时位选
void T1_sec_end(void);//定时50ms,中断响应读时间
void T0_timechange(void);//调时值设置
void display(); //显示时间
uchar BCD2BIN(uchar data BCD);
uchar BIN2BCD(uchar data BIN);



main()
{ P8255Con=0x80;//A口方式0输出,B口方式0输出
  P8255Con=0x80;
  

  TMOD=0X16;//0001 0110,定时器0采用外部计数方式2,定时器1采用定时方式1
 // TH0=0xfe;
 // TL0=0XFE;//定时初值,定时器0计1满
  thl1=15536;//定时器1定时50ms
  IT0=1;//INT0中断采用下降沿
  IT1=1;//INT1中断采用下降沿
  //EX0=1;//外部中断0允许
 // EX1=1;//外部中断1允许
 // ET0=1;//定时中断0允许
  ET1=1;//定时中断1允许
  EA=1;//总中断允许
 // PT0=0;
 // PT1=1;
 // PX0=0;
 // PX1=0;

  TR0=1;//开启定时器0
  TR1=1;


  while(1)
  { 
   display();//显示
  }

}
void I0_timechange(void) interrupt 0 using 1//调时位选
{
}
void T1_sec_end(void) interrupt 3 using 3//
{ thl1=15536;//重新赋初值
  sec=Getseconds();
  min=GetMinutes();
  ho=GetHours();
  day=GetDay();
  date=GetDate();
  month=GetMonth();
  year=GetYear();


  sec=BCD2BIN(sec);
  min= BCD2BIN(min);
  ho= BCD2BIN(ho);
  day= BCD2BIN(day);
}


void T0_timechange(void) interrupt 1 using 2//调时值设置
{
}


void display() //显示时间
{
 uchar data ho_shi,ho_ge,min_shi,min_ge,sec_shi,sec_ge;
 ho_shi=ho/10;
 ho_ge=ho%10;
 min_shi=min/10;
 min_ge=min%10;
 sec_shi=sec/10;
 sec_ge=sec%10;

 ho_shi=d2q[ho_shi];//十位转换为七段码
 ho_ge=d2q[ho_ge];//个位转换为七段码
 min_shi=d2q[min_shi];
 min_ge=d2q[min_ge];
 sec_shi=d2q[sec_shi];
 sec_ge=d2q[sec_ge];

 P8255B=close;
 P8255A=ho_shi;
 P8255B=ho_shi_open;
 delay(3);

 P8255B=close;
 P8255A=ho_ge;
 P8255B=ho_ge_open;
 delay(3);

/*P8255B=close;
 P8255A=min_shi;
 P8255B=min_shi_open;
 delay(3);

P8255B=close;
 P8255A=min_ge;
 P8255B=min_ge_open;
 delay(3);

P8255B=close;
 P8255A=sec_shi;
 P8255B=sec_shi_open;
 delay(3);

 P8255B=close;
 P8255A=sec_ge;
 P8255B=sec_ge_open;
 delay(3);
 
*/
}



void delay(uchar data x)/* x为要延迟的时间ms级*/
{
 uchar data j;
 while (x-->0)
 {
  for(j=0;j<125;j++)/* 延迟的时间1ms*/
   {;}
 }
}


uchar BCD2BIN(uchar data BCD)
{
	unsigned char data tem=0;
	tem=BCD&0x0f;
	BCD=BCD>>4;
	tem+=BCD*10;
	return tem;
}


uchar BIN2BCD(uchar data BIN)
{
 uchar data shi,ge,BCD;
 shi=BIN/10;
 ge=BIN%10;
 shi=shi<<4;
 BCD=shi|ge;
 return BCD;

   
}

⌨️ 快捷键说明

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