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

📄 多功能数字钟.c

📁 实现多功能时钟
💻 C
字号:
#include <reg52.h>
//*** 变量及I/O口定义 ***
#define uchar unsigned char 
#define uint unsigned int 

//****** HD7279A 指令 ******
#define CMD_RESET 0xa4          //; 复位命令
#define CMD_TEST 0xbf           //;测试命令
#define DECODE0 0x80            //;编码(译码)方式0
#define DECODE1 0xc8            //;编码(译码)方式1
#define CMD_READ 0x15           //;读键盘值命令 
#define UNDECODE 0x90           //;不译码命令
#define RTL_CYCLE 0xa3          //;向左循环移位命令
#define RTR_CYCLE 0xa2          // ;向右循环移位命令
#define RTL_UNCYL 0xa1          //;向左不循环移位命令
#define RTR_UNCYL 0xa0          //;向右不循环移位命令+
#define ACTCTL 0x98             //;消隐命令
#define SEGON 0xe0              //;段点亮命令   
#define SEGOFF 0xc0             // ;段关闭命令
#define BLINKCTL 0x88           //;闪烁命令

/*********************为了编程方便DS1302定义的位变量**********************/
sbit ACC0 = ACC ^ 0;
sbit ACC7 = ACC ^ 7;
#define second_address	0x80
#define minute_address	0x82
#define hour_address		0x84 
#define day_address	   0x86
#define month_address	0x88
#define week_address		0x8A
#define year_address		0x8C

/***************************DS7279管脚配置****************************/
sbit cs=P1^4;					// cs at P1.4
sbit clk=P1^2;					// clk 连接于 P1.5
sbit dat=P1^3;					// dat 连接于 P1.2
sbit key=P3^2;					// key 连接于 P1.3

/***************************DS1302管脚配置****************************/
sbit clock_sclk=P1^5;
sbit clock_io=P1^6;
sbit clock_rst=P1^7;

/***************************闹铃管脚配置****************************/
sbit BEEP = P3^6;
sbit A_light = P1^0;

/***************************白昼指示灯管脚配置****************************/
sbit B_light = P1^1;

unsigned char key_number;

/********************************************************************************************
* 函数名称:delay1ms()
* 功    能:软件延时
* 入口参数:time   延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
// ************************* 延时 count*1ms *************************
 
void delay(uint count)
{
  uchar  i;                

  while(--count != 0)        
 	  {
	    for(i = 0; i < 125; i++);                // ";" 表示空语句,CPU空转。
	  }   				                         // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
} 


/********************************************************************************************
* 函数名称:long_delay()
* 功    能:软件延时
* 入口参数: 
* 出口参数:无
*********************************************************************************************/
void long_delay(void)
{
	unsigned char i;
	for (i=0;i<0x30;i++);
}


/********************************************************************************************
* 函数名称:short_delay()
* 功    能:软件延时
* 入口参数:无 
* 出口参数:无
*********************************************************************************************/
void short_delay(void)
{
	unsigned char i;
	for (i=0;i<8;i++);
}
	


/********************************************************************************************
* 函数名称:send_byte()
* 功    能: 发送一个字节
* 入口参数: out-byte
* 出口参数: 无
*********************************************************************************************/
void send_byte(	unsigned char out_byte)
{
	unsigned char i;
	cs=0;
	long_delay();
	for (i=0;i<8;i++)
	{
		if (out_byte&0x80)
		{	
			dat=1;
		}
		else
		{
			dat=0;
		}
		clk=1;
		short_delay();
		clk=0;
		short_delay();
		out_byte=out_byte*2;
	}
	dat=0;
}


/********************************************************************************************
* 函数名称:receive_byte()
* 功    能:接收一个字节 
* 入口参数: 无
* 出口参数:in-byte
*********************************************************************************************/  
unsigned char receive_byte(void)
{
	unsigned char i, in_byte;
	dat=1;				// set to input mode
	long_delay();
	for (i=0;i<8;i++)
	{
		clk=1;
		short_delay();
		in_byte=in_byte*2;
		if (dat)
		{
			in_byte=in_byte|0x01;
		}
		clk=0;
		short_delay();
	}
	dat=0;
	return (in_byte);
}


/********************************************************************************************
* 函数名称

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -