⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此程序是单片机进行模数转换的程序
💻 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 + -