?? 多功能數字鐘.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 + -