这个实验的内容是:利用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];