我用
proteus仿真的ds1302,用数码管显示,本身应该每60秒一清零,但是却变成了99秒一清零,分钟也不对,不只是哪里的问题,请大侠们帮小弟看看,在这里先谢过了。
#include <AT89X52.H>
#include "ds1302.h"
#define uchar unsigned char
#define uint unsigned int
uchar code duanma[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0~9段码,共阴极
sbit S1=P3^0; //小时调整按键
sbit S2=P3^1; //分钟调整按键
sbit S3=P3^2; //秒钟调整按键
uchar hour; //小时计数变量
uchar minute; //分钟计数变量
uchar second; //秒钟计数变量
uchar isr_
time; //50中断次数计数器
/************************************
初始化子函数
入口参数:无
出口参数:无
************************************/
void init(void)
{
//hour=12; //初始化时的时间是12点整
//minute=0;
//second=0;
P3=0xff;
P2=0x00;
//TMOD=0x01; //使用定时器0的模式1
//TH0=0x3c; //定时50ms
//TL0=0xb0;
//ET0=1;
//TR0=1;
//EA=1;
}
/************************************
5ms*x定时子函数
入口参数:无
出口参数:无
************************************/
void delay_5ms(uchar m)
{
uchar i,j,l;
for(j=m;j>0;j--)
{
for(i=10;i>0;i--)
{
for(l=247;l>0;l--)
;
}
}
}
/************************************
1ms*x定时子函数
入口参数:无
出口参数:无
************************************/
void delay_1ms(uchar m)
{
uchar i,j,l;
for(j=m;j>0;j--)
{
for(i=2;i>0;i--)
{
for(l=247;l>0;l--)
;
}
}
}
/************************************
显示小时子函数
入口参数:h
出口参数:无
************************************/
void display_xiaoshi(uchar h)
{
P2=0x00; //显示小时的十位
P0=duanma[h/10];
delay_1ms(1);
P2=0x01; //显示小时的个位
P0=duanma[h%10];
delay_1ms(1);
P2=0x02; //显示-
P0=0x40;
delay_1ms(1);
P2=0x0f; //关闭所有数码管
}
/************************************
显示分钟子函数
入口参数:m
出口参数:无
************************************/
void display_fenzhong(uchar m)
{
P2=0x03; //显示分钟的十位
P0=duanma[m/10];
delay_1ms(1);
P2=0x04; //显示个的个位
P0=duanma[m%10];
delay_1ms(1);
P2=0x05; //显示-
P0=0x40;
delay_1ms(1);
P2=0x0f; //关闭所有数码管
}
/************************************
显示秒钟子函数
入口参数:s
出口参数:无
************************************/
void display_miaozhong(uchar s)
{
P2=0x06; //显示秒钟的十位
P0=duanma[s/10];
delay_1ms(1);
P2=0x07; //显示秒的个位
P0=duanma[s%10];
delay_1ms(1);
P2=0x0f; //关闭所有数码管
}
void main(void)
{
init();
while(1)
{
second=DS1302Read( 0x81 );
minute=DS1302Read( 0x83 );
hour=DS1302Read( 0x85 );
second &= 0x7f;
minute &= 0x7f;
hour &=0x1f ;
display_xiaoshi( hour );
display_fenzhong(minute );
display_miaozhong(second );
}
}
-
一周热门 更多>