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