89C52单片机实现万年历

该博客介绍了一种使用89C52单片机结合DS1302芯片实现万年历的方法。通过读取DS1302的时间数据,在四位数码管上滚动显示时间,并且提供了Proteus仿真的实践过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个实验的内容是:利用DS1302芯片,实现万年历。从DS1302芯片读取的时间数值,以滚显的方式在四位数码管上显示,并使用Proteus仿真。

Proteus图:
在这里插入图片描述

具体实现方式请看下面的程序:

#include"main.h"

unsigned char DisplayData[20];  //显示时间年-周-月-日-时-分-秒
unsigned char digitvalue[4]={
   0xff,0xff,0xff,0xff};  //采用共阳数码管,让四个数码管初始的时候什么也不显示
unsigned char temp;
unsigned char t;
unsigned char i;
unsigned int s;

void delay(unsigned int i){
     //延时函数
	while(i--);
}
//数码管段码0~9
unsigned char code smgduan[10]={
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void datapros(unsigned char *TIME)  //将16进制数处理成10进制	 
{
   
	DisplayData[0] = smgduan[TIME[6]/16];				//年,年的十位
	DisplayData[1] = smgduan[TIME[6]&0x0f];			//年的个位,下面同理	 
	DisplayData[2] = ~(0x40);  //分隔符
	DisplayData[3] = smgduan[TIME[5]/16];				//周
	DisplayData[4] = smgduan[TIME[5]&0x0f];	
	DisplayData[5] = ~(0x40);
	DisplayData[6] = smgduan[TIME[4]/16];				//月
	DisplayData[7] = smgduan[TIME[4]&0x0f];
	DisplayData[8] = ~(0x40);
	DisplayData[9] = smgduan[TIME[3]/16];				
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值