📄 试验.c
字号:
/***********DS1302数码管时钟****************/
#include <AT89X51.H>
#include"ds1302.h"
/*********宏定义***************/
#define uint unsigned int
#define uchar unsigned char
/**************全局变量*******************/
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//"0~9"代码
uchar bitcode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选
uchar l_1[8]={16,16,16,16,16,18,13,19};//"LOC"显示代码
uchar l_2[8]={16,16,16,21,20,18,13,19};//"UNLOC"显示代码
uchar c[8];//中间变量
uchar cnt , cnt1 , mode1 ; //键盘扫描方式mode1
bit mode_lock;//键盘锁定,1为锁定,0为解锁
bit add_OR_dec_flag; //加减标志位,0为加,1为减
/**************************************************/
/***********z*1ms延时**************/
void delay(uint z)
{
uint x , y ;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}
/*******中断,显示初始化************/
void init()
{
TMOD=0x11;
TH0=-1000/256;
TL0=-1000%256;
TR0=1;
ET0=1;
EA=1;
mode1=0;
mode_lock=0;
}
/********定时器0中断子程序****************/
/******功能:用于动态扫描数码管************/
void t0() interrupt 1
{
TH0=-1000/256;
TL0=-1000%256;
cnt++;
if(cnt>7)cnt=0;
switch(cnt)
{
case 0 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 1 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 2 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 3 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 4 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 5 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 6 : P0=led[c[cnt]];P1=bitcode[cnt];break;
case 7 : P0=led[c[cnt]];P1=bitcode[cnt];break;
default:break;
}
}
/********时间显示****************/
void display_time()
{
c[0]=hour_h;
c[1]=hour_l;
c[2]=17;
c[3]=min_h;
c[4]=min_l;
c[5]=17;
c[6]=sec_h;
c[7]=sec_l;
}
/**********时间调整************************/
/******功能:按键P2_0:秒减******************/
/****** 按键P2_1:秒加******************/
/****** 按键P2_2:分减******************/
/****** 按键P2_3:分加******************/
void sjtz()
{
if(P2_0==0) //秒减
{
delay(10);
if(P2_0==0)
{
add_OR_dec_flag=1;
Set(7,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
while(P2_0==0);
}
}
if(P2_1==0)//秒加
{
delay(10);
if(P2_1==0)
{
add_OR_dec_flag=0;
Set(7,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
while(P2_1==0);
}
}
if(P2_2==0) //分减
{
delay(10);
if(P2_2==0)
{
add_OR_dec_flag=1;
Set(6,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
while(P2_2==0);
}
}
if(P2_3==0)//分加
{
delay(10);
if(P2_3==0)
{
add_OR_dec_flag=0;
Set(6,add_OR_dec_flag);//调用时间调整子程序,此程序在DS1302.H文件中
while(P2_3==0);
}
}
}
/*********主函数*************/
void main()
{
uchar i ;
init();
while(1)
{
RTC_display();
display_time();
sjtz();//显示时间
}
display_time();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -