亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 時鐘ds1302lcd.c

?? 時鐘DS1302(LCD)
?? C
字號:
/********************************************************************
* 文件名  : 時鐘DS1302LCD.c
* 描述    :  該文件實現用DS1302來實現日歷和時鐘功能,液晶1602上顯示出來。
* 創建人  : 東流,2009年4月10日
* 版本號  : 2.0
***********************************************************************/
#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;

sbit T_CLK = P1^6; /*實時時鐘時鐘線引腳 */
sbit T_IO = P3^5; /*實時時鐘數據線引腳 */
sbit T_RST = P1^7; /*實時時鐘復位線引腳 */

//這三個引腳參考資料
sbit E=P2^7;		//1602使能引腳
sbit RW=P2^6;		//1602讀寫引腳	
sbit RS=P2^5;		//1602數據/命令選擇引腳

/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間大概為140US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/

void delay()
{
	int i,j;
	for(i=0; i<=10; i++)
	for(j=0; j<=2; j++)
;
}

/********************************************************************
* 名稱 : Convert(uchar In_Date)
* 功能 : 因為電路設計時,P0.0--P0.7接法剛好了資料中的相反,所以設計該函數。
* 輸入 : 1602資料上的值
* 輸出 : 送到1602的值
***********************************************************************/
uchar Convert(uchar In_Date)
{
    uchar i, Out_Date = 0, temp = 0;
    for(i=0; i<8; i++)
    {
        temp = (In_Date >> i) & 0x01;
        Out_Date |= (temp << (7 - i));
    }
    return Out_Date;
}
/********************************************************************
* 名稱 : enable(uchar del)
* 功能 : 1602命令函數
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/

void enable(uchar del)
{
	P0 = Convert(del);
	RS = 0;
	RW = 0;
	E = 0;
	delay();
	E = 1;
	delay();
}

/********************************************************************
* 名稱 : write(uchar del)
* 功能 : 1602寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/

void write(uchar del)
{
	P0 = Convert(del);
	RS = 1;
	RW = 0;
	E = 0;
	delay();
	E = 1;
	delay();
}

/********************************************************************
* 名稱 : L1602_init()
* 功能 : 1602初始化,請參考1602的資料
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void L1602_init(void)
{
	enable(0x01);
	enable(0x38);
	enable(0x0c);
	enable(0x06);
	enable(0xd0);
}

/********************************************************************
* 名稱 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下
		 L1602_char(1,5,'b')
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
	uchar a;
	if(hang == 1) a = 0x80;
	if(hang == 2) a = 0xc0;
	a = a + lie - 1;
	enable(a);
	write(sign);
}

/********************************************************************
* 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
	 	 L1602_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
	uchar a;
	if(hang == 1) a = 0x80;
	if(hang == 2) a = 0xc0;
	a = a + lie - 1;
	enable(a);
	while(1)
	{
		if(*p == '\0') break;
		write(*p);
		p++;
	}
}

/********************************************************************
* 名稱 :  v_RTInputByte()
* 功能 :  往DS1302寫入1Byte數據
* 輸入 :  ucDa 寫入的數據
* 輸出 :  無
***********************************************************************/
void v_RTInputByte(uchar ucDa)
{
	uchar i;
	ACC = ucDa;
	T_RST = 1;
	for(i=8; i>0; i--)
	{
		T_IO = ACC0;
		T_CLK = 1;
		T_CLK = 0;
		ACC = ACC >> 1;
	}
}

/********************************************************************
* 名稱  :   uc_RTOutputByte()
* 功能  :   從DS1302讀取1Byte數據
* 輸入  :	無
* 返回值:   ACC
***********************************************************************/
uchar uc_RTOutputByte(void) 
{
	uchar i;
	T_RST = 1;
	for(i=8; i>0; i--)
	{
		ACC = ACC >>1;
		T_IO=1;
		ACC7 = T_IO;
		T_CLK = 1;
		T_CLK = 0;
	}
	return(ACC);
}

/********************************************************************
* 名稱   :   v_W1302(uchar ucAddr, uchar ucDa)
* 功能   :   往DS1302寫入數據
* 輸入   :   ucAddr: DS1302地址, ucDa: 要寫的數據
* 返回值 :   無
***********************************************************************/
void v_W1302(uchar ucAddr, uchar ucDa)
{
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(ucAddr);   // 寫地址 
	_nop_();
	_nop_();
	v_RTInputByte(ucDa);     // 寫1Byte數據
	T_CLK = 1;
	T_RST = 0;
}

/********************************************************************
* 名稱   :  uc_R1302(uchar ucAddr)
* 功能   :  讀取DS1302某地址的數據
* 輸入   :  ucAddr: DS1302地址
* 返回值 :  ucDa :讀取的數據
***********************************************************************/
uchar uc_R1302(uchar ucAddr)
{
	uchar ucDa;
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(ucAddr);    //寫地址,命令
	_nop_();
	_nop_();
	ucDa = uc_RTOutputByte(); //讀1Byte數據
	T_CLK = 1;
	T_RST = 0;
	return(ucDa);
}

/********************************************************************
* 名稱   :  v_BurstW1302T
* 功能   :  往DS1302寫入時鐘數據(多字節方式)
* 輸入   :  pSecDa: 時鐘數據地址 格式為: 秒 分 時 日 月 星期 年 控制
* 						   8Byte (BCD碼) 1B 1B 1B 1B 1B 1B  1B  1B
* 返回值 :  無
***********************************************************************/
void v_BurstW1302T(uchar *pSecDa)
{
	uchar i;
	v_W1302(0x8e, 0x00);          //控制命令,WP=0,寫操作
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(0xbe);          //0xbe:時鐘多字節寫命令
	for(i=8; i>0; i--)            //8Byte = 7Byte 時鐘數據 + 1Byte 控制
	{
		v_RTInputByte(*pSecDa);   //寫1Byte數據
		pSecDa++;
	}
	T_CLK = 1;
	T_RST = 0;
}

/********************************************************************
* 名稱   :  v_BurstR1302T(uchar *pSecDa)
* 功能   :  讀取DS1302時鐘數據
* 輸入   :  pSecDa: 時鐘數據地址 格式為: 秒 分 時 日 月 星期 年
* 					       7Byte (BCD碼) 1B 1B 1B 1B 1B 1B   1B
* 返回值 :  ucDa :讀取的數據
***********************************************************************/
void v_BurstR1302T(uchar *pSecDa)
{
	uchar i;
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(0xbf);               //0xbf:時鐘多字節讀命令
	for(i=8; i>0; i--)
	{
		*pSecDa = uc_RTOutputByte();   //讀1Byte數據
		pSecDa++;
	}
	T_CLK = 1;
	T_RST = 0;
}

/********************************************************************
* 名稱   :  v_BurstW1302R(uchar *pReDa)
* 功能   :  往DS1302寄存器數寫入數據(多字節方式)
* 輸入   :  pReDa: 寄存器數據地址
* 返回值 :  無
***********************************************************************/
void v_BurstW1302R(uchar *pReDa)
{
	uchar i;
	v_W1302(0x8e,0x00);         //控制命令,WP=0,寫操作
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(0xfe);       //0xbe:時鐘多字節寫命令
	for(i=31; i>0; i--)        //31Byte 寄存器數據
	{
		v_RTInputByte(*pReDa); //寫1Byte數據
		pReDa++;
	}
	T_CLK = 1;
	T_RST = 0;
}

/********************************************************************
* 名稱   :  v_BurstR1302R(uchar *pReDa)
* 功能   :  讀取DS1302寄存器數據
* 輸入   :  pReDa: 寄存器數據地址
* 返回值 :  無
***********************************************************************/
void v_BurstR1302R(uchar *pReDa)
{
	uchar i;
	T_RST = 0;
	T_CLK = 0;
	T_RST = 1;
	v_RTInputByte(0xff);            //0xbf:時鐘多字節讀命令
	for(i=31; i>0; i--)             //31Byte 寄存器數據
	{
		*pReDa = uc_RTOutputByte(); //讀1Byte數據
		pReDa++;
	}
	T_CLK = 1;
	T_RST = 0;
}

/********************************************************************
* 名稱  :  v_Set1302(uchar *pSecDa)
* 功能  :  設置初始時間
* 輸入  :  pSecDa: 初始時間地址。初始時間格式為: 秒 分 時 日 月 星期 年
* 								   7Byte (BCD碼) 1B 1B 1B 1B 1B 1B  1B
* 返回值: 無
***********************************************************************/
void v_Set1302(uchar *pSecDa)
{
	uchar i;
	uchar ucAddr = 0x80;
	v_W1302(0x8e, 0x00);            //控制命令,WP=0,寫操作
	for(i=7; i>0; i--)
	{
		v_W1302(ucAddr, *pSecDa);   // 秒 分 時 日 月 星期 年
		pSecDa++;
		ucAddr += 2;
	}
	v_W1302(0x8e, 0x80);            //控制命令,WP=1,寫保護
}

/********************************************************************
* 名稱   : v_Get1302(uchar ucCurtime[])
* 功能   : 讀取DS1302當前時間
* 輸入   : ucCurtime: 保存當前時間地址。當前時間格式為: 秒 分 時 日 月 星期 年
*                                         7Byte (BCD碼) 1B 1B 1B 1B 1B  1B  1B
* 返回值 : 無
***********************************************************************/
void v_Get1302(uchar ucCurtime[])
{
	uchar i;
	uchar ucAddr = 0x81;
	for(i=0; i<7; i++)
	{
		ucCurtime[i] = uc_R1302(ucAddr);    //格式為: 秒 分 時 日 月 星期 年
		ucAddr += 2;
	}
}

/********************************************************************
* 名稱 : dectobcd(uchar dec)
* 功能 : DEC碼轉換為BCD碼
* 輸入 : dec碼
* 輸出 : bcd碼
***********************************************************************/
uchar dectobcd(uchar dec)
{
	uchar bcd;
	bcd = 0;
	while(dec >= 10)
	{              
		dec -= 10;                         
		bcd++;
	} 
	bcd <<= 4;
	bcd |= dec;
	return bcd;
}

/********************************************************************
* 名稱 : bcdtodec(uchar bcd)
* 功能 : BCD碼轉換為DEC碼
* 輸入 : bcd碼
* 輸出 : dec碼
***********************************************************************/
uchar bcdtodec(uchar bcd)
{
	uchar data1;
	data1 = bcd & 0x0f;     //取BCD低4位
	bcd = bcd & 0x70;       //剔除BCD的最高位和低4位。
	data1 += bcd >> 1;
	data1 += bcd >> 3;      //用位移代替乘法運算
	return data1;
}

/********************************************************************
* 名稱 : Write_DS1302Init()
* 功能 : 往DS1302中寫入數據。最開始顯示的數據就是在這里設置的。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Write_DS1302Init(void)
{
	v_W1302(0x8e,0);
	v_W1302(0x80,0x50);	//寫入秒
	v_W1302(0x8e,0);
	v_W1302(0x82,0x59);	//寫入分
	v_W1302(0x8e,0);
	v_W1302(0x84,0x07);	//寫入小時
	v_W1302(0x8e,0);
	v_W1302(0x86,0x08);	//寫入日
	v_W1302(0x8e,0);
	v_W1302(0x88,0x08);	//寫入月
	v_W1302(0x8e,0);
	v_W1302(0x8a,0x05);	//寫入星期
	v_W1302(0x8e,0);
	v_W1302(0x8c,0x08);	//寫入年	
}

/********************************************************************
* 名稱 : Run_DS1302(void)
* 功能 : 讀出DS1302中的數據,并在液晶1602上進行顯示
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Run_DS1302(void)
{
	uchar sec, min, hour, day, month, year;
	while(1)
	{
		v_W1302(0x8f, 0);
		sec = bcdtodec(uc_R1302(0x81));	   //讀出DS1302中的秒
		v_W1302(0x8f, 0);
		min = bcdtodec(uc_R1302(0x83));	   //讀出DS1302中的分
		v_W1302(0x8f, 0);
		hour = bcdtodec(uc_R1302(0x85));   //讀出DS1302中的小時
		v_W1302(0x8f, 0);
		day = bcdtodec(uc_R1302(0x87));	   //讀出DS1302中的日
		v_W1302(0x8f, 0);
		month = bcdtodec(uc_R1302(0x89));  //讀出DS1302中的月
		v_W1302(0x8f, 0);
		year = bcdtodec(uc_R1302(0x8d));   //讀出DS1302中的年

		L1602_char(2, 6, hour / 10 % 10 + 48);
		L1602_char(2, 7, hour % 10 + 48);
		L1602_char(2, 8, '-');
		L1602_char(2, 9, min / 10 % 10 + 48);
		L1602_char(2, 10, min % 10 + 48);
		L1602_char(2, 11, '-');
		L1602_char(2, 12, sec / 10 % 10 + 48);
		L1602_char(2, 13, sec % 10 + 48);
		L1602_char(1, 8, year / 10 % 10 + 48);
		L1602_char(1, 9, year % 10 + 48);
		L1602_char(1, 10, '-');
		L1602_char(1, 11, month / 10 % 10 + 48);
		L1602_char(1, 12, month % 10 + 48);
		L1602_char(1, 13, '-');
		L1602_char(1, 14, day / 10 % 10 + 48);
		L1602_char(1, 15, day % 10 + 48);
	}

} 

/********************************************************************
* 名稱 : Main(void)
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/ 
void Main(void)
{
	L1602_init();
	L1602_string(1,1,"DAYS 20");
	L1602_string(2,1,"TIME");
	Write_DS1302Init();
	Run_DS1302();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲黄一区二区三区| 午夜精品免费在线| 国产乱妇无码大片在线观看| 亚洲国产精品av| 亚洲高清三级视频| 国产精品77777| 欧美国产精品一区二区三区| 国产成人亚洲精品青草天美| 欧美激情一区不卡| 91视频xxxx| 老司机午夜精品99久久| 欧美国产在线观看| hitomi一区二区三区精品| 综合精品久久久| 欧美日韩国产高清一区| 日本美女一区二区三区视频| 久久久精品天堂| 在线观看不卡一区| 精品在线观看免费| 一区二区三区在线观看欧美| 欧美人与禽zozo性伦| 国产精品一品二品| 亚洲成a人v欧美综合天堂| 久久综合视频网| 欧美日韩另类国产亚洲欧美一级| 天天av天天翘天天综合网| 国产乱人伦偷精品视频免下载| 国产精品国产三级国产专播品爱网| 99国产精品国产精品久久| 黄一区二区三区| 蜜桃久久精品一区二区| 亚洲欧美视频在线观看视频| 久久久国际精品| 欧美丝袜自拍制服另类| 在线看日韩精品电影| 91视视频在线观看入口直接观看www | 午夜久久久久久久久久一区二区| 日韩欧美在线网站| 欧美日本高清视频在线观看| 不卡欧美aaaaa| 99视频一区二区三区| www.久久久久久久久| 成人动漫一区二区在线| 波多野结衣一区二区三区| 成人午夜免费电影| 94-欧美-setu| 欧美精品久久天天躁| 色噜噜狠狠成人中文综合| 成人综合在线观看| 成人av午夜影院| 欧美性猛交xxxxxx富婆| 精品av久久707| 亚洲女人的天堂| 国产一区二区三区四区五区入口 | 国产亚洲欧美激情| 亚洲精品一二三| 国产精品一区免费视频| 91网站黄www| 久久久久97国产精华液好用吗| 中文文精品字幕一区二区| 亚洲精品乱码久久久久久| 久久黄色级2电影| 91丝袜美腿高跟国产极品老师| 日韩一级二级三级精品视频| 国产精品久久夜| 国产精品久久久久一区| 久久精品国产99久久6| 欧美日韩在线播放一区| 亚洲丝袜另类动漫二区| 狠狠色丁香婷婷综合| 宅男在线国产精品| 亚洲一级电影视频| av不卡在线播放| 久久婷婷国产综合精品青草| 国产成人免费视频一区| 蜜桃av一区二区| 不卡av在线免费观看| 国产目拍亚洲精品99久久精品| 日本不卡一区二区三区| 欧美精品v国产精品v日韩精品| 亚洲天堂2016| 欧美三级在线视频| 老司机精品视频一区二区三区| 欧美一区二区在线不卡| 亚洲第一在线综合网站| 欧美性一二三区| 久久99热这里只有精品| 欧美电视剧在线看免费| 国产精品中文有码| 亚洲另类在线一区| 色94色欧美sute亚洲线路一久| 国产精品毛片高清在线完整版| 国产成人av电影在线播放| 日韩欧美二区三区| 国产福利一区二区三区视频| 日韩成人午夜精品| 欧洲一区二区三区在线| 麻豆精品一区二区综合av| 欧美成人高清电影在线| 日韩黄色一级片| 蜜臀av在线播放一区二区三区| 中文字幕视频一区| 日本精品免费观看高清观看| 在线观看精品一区| 69堂国产成人免费视频| 久草精品在线观看| 激情小说亚洲一区| 亚洲风情在线资源站| 91行情网站电视在线观看高清版| 暴力调教一区二区三区| 成人午夜av影视| 欧美大片免费久久精品三p| 精品国产露脸精彩对白| 国产欧美日韩精品一区| 午夜精品久久久久久久久久| 国产欧美日韩另类视频免费观看| 亚洲图片另类小说| 午夜精品久久久久久久久| 国产在线精品国自产拍免费| 亚洲天堂av老司机| 日韩国产精品久久| 欧美日本一区二区| 亚洲视频一二三区| 欧美一区二区女人| 亚洲mv在线观看| 欧美日韩小视频| 99精品1区2区| 久久久久久久电影| 久草中文综合在线| 欧美喷潮久久久xxxxx| 男女性色大片免费观看一区二区 | 欧美日韩在线三级| 国产精品网站在线| 丰满白嫩尤物一区二区| 日韩写真欧美这视频| 在线播放日韩导航| 亚洲午夜激情av| 69av一区二区三区| 青娱乐精品在线视频| 三级久久三级久久| 日韩一区二区三区在线视频| 日韩国产成人精品| 久久久久久久av麻豆果冻| 国产精品国产精品国产专区不片 | 精品国产91久久久久久久妲己| 国产一区二区三区最好精华液| 亚洲国产高清不卡| 色哟哟一区二区| 青青草国产精品亚洲专区无| 欧美va亚洲va在线观看蝴蝶网| 7777精品伊人久久久大香线蕉最新版| 亚洲精品日日夜夜| 欧美xxx久久| 成人精品一区二区三区四区 | 午夜精品福利在线| 欧美电影精品一区二区| 国产麻豆精品在线| 日韩电影在线观看网站| 91免费精品国自产拍在线不卡| 蜜桃久久精品一区二区| 国产精品卡一卡二卡三| 欧美日韩精品欧美日韩精品一| 国产美女精品人人做人人爽| 亚洲乱码国产乱码精品精的特点 | 视频一区中文字幕| 欧美国产日韩a欧美在线观看| 91精品视频网| 色天使色偷偷av一区二区| 国产精品66部| 日韩综合小视频| 亚洲曰韩产成在线| 一区二区三区中文字幕精品精品 | 成人动漫精品一区二区| 老司机精品视频导航| 亚洲成人资源网| 午夜欧美在线一二页| 亚洲午夜久久久久久久久电影网 | 99视频一区二区| 成人美女在线观看| 成人综合婷婷国产精品久久免费| 裸体在线国模精品偷拍| 手机精品视频在线观看| 视频一区二区国产| 日韩成人精品在线观看| 免费人成网站在线观看欧美高清| 日韩精品一二三四| 麻豆精品久久精品色综合| 久久精品久久99精品久久| 激情综合网av| 国产91在线观看| 色久综合一二码| 欧美一区二区三区免费大片| 欧美精品18+| 中文字幕av一区二区三区免费看 | 日韩午夜激情电影| 亚洲国产成人在线| 丝袜国产日韩另类美女| 成人精品视频一区二区三区尤物| 一二三区精品福利视频| 午夜视频在线观看一区二区|