📄 多功能数字钟.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 + -