📄 main.c
字号:
//===========================================================
//
//
// COPY RIGHT
//
//
//===========================================================
// 文件名: Main.c
// 创建日期: 080303
// 创建: 神之吻
// 试验难度: 入门级试验
// 描述: 作用:
// ds1302芯片的使用
// 现象:
// 八段数码管分时显示当前的时间,显示顺序为
// 年月日->时分秒->星期
// 引脚连接关系:
//
//------------------------------------------------------------
//********************************************************
//* 头文件
//********************************************************
#include <reg52.h>
#include "main.h"
#include "ds1302.h"
//********************************************************
//* 全局变量声明
//********************************************************
// 与八段数码管有关的表定义
//---------------------------------------------------
uint8 code sled_table[] = { // 位编码
0x14, // 0
0xD7, // 1
0x4C, // 2
0x45, // 3
0x87, // 4
0x25, // 5
0x24, // 6
0x57, // 7
0x04, // 8
0x05, // 9
0x06, // A
0xA4, // B
0x3C, // C
0xC4, // D
0x2C, // E
0x2E // F
};
uint8 code bit_table[] = { // 位选
0xDF, // bit0
0xEF, // bit1
0xF7, // bit2
0xFB, // bit3
0xFD, // bit4
0xFE, // bit5
};
//与ds1302采样芯片有关的数据结构
//-----------------------------------------------------
//时间设置缓冲区(BCD码表示)
//设置时间为:08年3月13日,星期四,13时31分30秒
uint8 code SetTimeBuf[] = {
0xB0, //秒:这里设为30 注意Bit7(启动位)置为1,因为初始化过程中应当禁止时钟
0x31, //分:这里设为31
0x13, //时:这里设为13 注意Bit7(AM/PM模式选择位)置为0,选择PM模式(24小时制)
0x13, //日:这里设为13日
0x03, //月:这里设为3月
0x04, //星期:这里设为星期四
0x08 //年:这里设为08年
};
//用于存储从ds1302读取出的当前时间
uint8 code CurTime[7];
//********************************************************
//* 函数原型
//********************************************************
void delay_ms(uint32 ms);
void Display();
//********************************************************
//* main函数
//********************************************************
main()
{
//设置初始时间
SetTime(SetTimeBuf);
WriteReg(0x80,SetTimeBuf[0]&0xEF); //将秒寄存器的Bit7清0,记时开始
while(TRUE)
{
ReadTime(CurTime); //读取当前时间
Display(); //将读出的时间显示在八段数码管,由于学习板上只有六位八段数码管,因此分时显示
//显示顺序为 年月日->时分秒->星期
}
}
//*******************************************************
//* Display
//*
//*功能描述:将采样结果通过八段数码管显示出来,显示方式为
// 依次显示年月日->时分秒->星期,如此循环往复
//*输入参数:无
//*返回值:无
//*******************************************************
void Display()
{
uint16 i;
uint8 TimeTmp;
//显示当前年月日
for(i = 0;i < 200;i ++)
{
//显示当前年
TimeTmp = (SetTimeBuf[6] >> 4); //取出当前年的十位数字BCD码
BITCHOOSE = bit_table[0]; //第一个数码管显示当前年的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[6] & 0x0F); //取出当前年的个位数字BCD码
BITCHOOSE = bit_table[1]; //第二个数码管显示当前年的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
//显示当前月
TimeTmp = (SetTimeBuf[4] >> 4); //取出当前月的十位数字BCD码
BITCHOOSE = bit_table[2]; //第三个数码管显示当前月的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[4] & 0x0F); //取出当前月的个位数字BCD码
BITCHOOSE = bit_table[3]; //第四个数码管显示当前月的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
//显示当前日
TimeTmp = (SetTimeBuf[3] >> 4); //取出当前日的十位数字BCD码
BITCHOOSE = bit_table[4]; //第五个数码管显示当前日的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[3] & 0x0F); //取出当前日的个位数字BCD码
BITCHOOSE = bit_table[5]; //第六个数码管显示当前日的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
}
//显示当前时分秒
for(i = 0;i < 200;i ++)
{
//显示当前时
TimeTmp = (SetTimeBuf[2] >> 4); //取出当前时的十位数字BCD码
BITCHOOSE = bit_table[0]; //第一个数码管显示当前时的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[2] & 0x0F); //取出当前时的个位数字BCD码
BITCHOOSE = bit_table[1]; //第二个数码管显示当前时的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
//显示当前分
TimeTmp = (SetTimeBuf[1] >> 4); //取出当前分的十位数字BCD码
BITCHOOSE = bit_table[2]; //第三个数码管显示当前分的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[1] & 0x0F); //取出当前分的个位数字BCD码
BITCHOOSE = bit_table[3]; //第四个数码管显示当前分的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
//显示当前秒
TimeTmp = (SetTimeBuf[0] >> 4); //取出当前日秒的十位数字BCD码
BITCHOOSE = bit_table[4]; //第五个数码管显示当前秒的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[0] & 0x0F); //取出当前秒的个位数字BCD码
BITCHOOSE = bit_table[5]; //第六个数码管显示当前秒的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
}
//显示当前星期
for(i = 0;i < 200;i ++)
{
//显示当前时
TimeTmp = (SetTimeBuf[5] >> 4); //取出当前星期的十位数字BCD码
BITCHOOSE = bit_table[0]; //第一个数码管显示当前时的十位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
TimeTmp = (SetTimeBuf[5] & 0x0F); //取出当前星期的个位数字BCD码
BITCHOOSE = bit_table[1]; //第二个数码管显示当前时的个位数字
BITCODE = sled_table[TimeTmp]; //将选中的八段数码管赋予位编码
}
}
//*******************************************************
//* delay_ms
//*
//*功能描述:ms级延时函数
//*输入参数:
//*返回值:无
//*******************************************************
void delay_ms(uint32 ms)
{
uint32 i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 5000; j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -