|
/***************************************************/
#include<reg51.h> //包含單片機寄存器的頭文件
#include<intrins.h> //包含_nop_()函數定義的頭文件
#define uchar unsigned char
#define uint unsigned int
uchar temp,count=0;
/***********************************************************************
以下是DS1302芯片的操作程序
************************************************************************/
uchar code digit[10]={"0123456789"}; //定義字符數組顯示數字
uchar *digit1[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"}; //周日,周一到周六
sbit DATA=P3^7; //位定義1302芯片的接口,數據輸出端定義在P1.1引腳
sbit RST=P3^5; //位定義1302芯片的接口,復位端口定義在P1.1引腳
sbit SCLK=P3^6; //位定義1302芯片的接口,時鐘輸出端口定義在P1.1引腳
sbit key1=P3^0; //停止按鈕
sbit key2=P3^1; //開始按鈕
sbit add=P2^4; //加值
sbit subtract=P2^5;//減值
sbit tiaoshi=P3^4; //定位
/*****************************************************
函數功能:延時若干微秒
入口參數:n
***************************************************/
void delaynus(uchar n)
{
uchar i;
for(i=0;i<n;i++)
;
}
/*****************************************************
函數功能:向1302寫一個字節數據
入口參數:x
***************************************************/
void Write1302(uchar dat)
{
uchar i;
SCLK=0; //拉低SCLK,為脈沖上升沿寫入數據做好準備
delaynus(2); //稍微等待,使硬件做好準備
for(i=0;i<8;i++) //連續寫8個二進制位數據
{
DATA=dat&0x01; //取出dat的第0位數據寫入1302
delaynus(2); //稍微等待,使硬件做好準備
SCLK=1; //上升沿寫入數據
delaynus(2); //稍微等待,使硬件做好準備
SCLK=0; //重新拉低SCLK,形成脈沖
dat>>=1; //將dat的各數據位右移1位,準備寫入下一個數據位
}
}
/*****************************************************
函數功能:根據命令字,向1302寫一個字節數據
入口參數:Cmd,儲存命令字;dat,儲存待寫的數據
***************************************************/
void WriteSet1302(uchar Cmd,uchar dat)
{
RST=0; //禁止數據傳遞
SCLK=0; //確保寫數居前SCLK被拉低
RST=1; //啟動數據傳輸
delaynus(2); //稍微等待,使硬件做好準備
Write1302(Cmd); //寫入命令字
Write1302(dat); //寫數據
SCLK=1; //將時鐘電平置于已知狀態
RST=0; //禁止數據傳遞
}
/*****************************************************
函數功能:從1302讀一個字節數據
入口參數:x
***************************************************/
uchar Read1302(void)
{
uchar i,dat;
delaynus(2); //稍微等待,使硬件做好準備
for(i=0;i<8;i++) //連續讀8個二進制位數據
{
dat>>=1; //將dat的各數據位右移1位,因為先讀出的是字節的最低位
if(DATA==1) //如果讀出的數據是1
dat|=0x80; //將1取出,寫在dat的最高位
SCLK=1; //將SCLK置于高電平,為下降沿讀出
delaynus(2); //稍微等待
SCLK=0; //拉低SCLK,形成脈沖下降沿
delaynus(2); //稍微等待
}
return dat; //將讀出的數據返回
} ....................................
|
-
-
LCD數字時鐘.zip
2016-4-27 14:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
79.77 KB, 下載次數: 10, 下載積分: 黑幣 -5
評分
-
查看全部評分
|