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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtc.c

?? 12864菜單
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************************
  文件:RTC.C
  環(huán)境:編譯為ICC AVR6.25A,仿真為AVR Studio4.10 
  硬件:ATMEGA16芯片
  日期:2006年12月10日 
  功能:驅(qū)動開發(fā)板上的DS1302時鐘芯片
  備注:參考《AVR系列單片機C語言編程與應(yīng)用實例》(清華大學(xué)出版社)
/******************************************/
//#include <iom16v.h>			//包含型號頭文件
//#include <macros.h>			//包含"位"操作頭文件
//#include <stdio.h>			//標準輸入輸出頭文件

//#include <AVR_PQ1A.h>		//包含自定義常量頭文件
//#include "YJ12864.C"
//#include "YJ1602.C"			//包含1602液晶函數(shù)文件
//#include "MKEY.C"			//包含矩陣鍵盤函數(shù)文件


/*******************************************
函數(shù)名稱: DS1302_init
功    能: 初始化DS1302的數(shù)據(jù)接口
參    數(shù): 無
返回值  : 無
/********************************************/
void DS1302_portinit(void)		  
{
 DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//將時鐘端(RTC_CLK)數(shù)據(jù)端(RTC_DATA)片選端(RTC_CS)設(shè)置為輸出
}
/*******************************************
函數(shù)名稱: DS1302_writeB
功    能: 向DS1302寫入一個字節(jié)數(shù)據(jù)(沒有RST操作)
參    數(shù): byte--要寫入的數(shù)據(jù)
返回值  : 無
/********************************************/
void DS1302_writeB(uchar byte)
{
 uchar i;
 for(i=0;i<8;i++)		 	  //8位數(shù)據(jù)計數(shù)
 {
  PORTB&=~BIT(RTC_CLK);		  //拉低時鐘端
  if(byte&0x01)				  //當前位是否是1
  {
   PORTB|=BIT(RTC_DATA);	  //當前位是1,拉高數(shù)據(jù)端
  }
  else						  
  {
   PORTB&=~BIT(RTC_DATA);	  //當前位是0,拉低數(shù)據(jù)端
  }  
  Delayus(10);				  //調(diào)整時鐘和脈沖寬度
  PORTB|=BIT(RTC_CLK);		  //時鐘上升沿(DS1302采樣數(shù)據(jù))
  byte>>=1;					  //數(shù)據(jù)右移1位,為送出新數(shù)據(jù)位做準備
 }
}
/*******************************************
函數(shù)名稱: DS1302_readB
功    能: 從DS1302讀出一個字節(jié)數(shù)據(jù)(沒有RST操作)
參    數(shù): 無
返回值  : byte--讀出的數(shù)據(jù)
/********************************************/
uchar DS1302_readB(void)
{
 uchar i,byte=0;
 DDRB&=~BIT(RTC_DATA);		 //將數(shù)據(jù)端口設(shè)置為輸入		  
 PORTB&=~BIT(RTC_DATA);		 //無上拉電阻
 for(i=0;i<8;i++)			 //8位數(shù)據(jù)計數(shù)
 {
  byte>>=1;  				 //保存讀入的數(shù)據(jù)位
  PORTB|=BIT(RTC_CLK);		 //時鐘上升沿
  Delayus(10);				 //延時,調(diào)整時鐘脈沖寬度
  PORTB&=~BIT(RTC_CLK);		 //時鐘下降沿,DS1302輸出數(shù)據(jù)位
  Delayus(10);				 //等待數(shù)據(jù)變化(MEGA16太快,必須等待DS1302的數(shù)據(jù)位輸出,否則不能正確讀出)
  if(PINB&BIT(RTC_DATA))	 //當前位是否是高電平
  {
   byte|=BIT(PB7);			 //是高電平就將返回數(shù)據(jù)的當前位置1
  }
  else
  {
   byte&=~BIT(PB7);			 //是低電平就將返回數(shù)據(jù)的當前位置0
  }
 }
 DDRB|=BIT(RTC_DATA);		 //最后將數(shù)據(jù)端口設(shè)置為輸出
 return byte;				 //返回讀出的數(shù)據(jù)
}
/*******************************************
函數(shù)名稱: DS1302_writeD
功    能: 向DS1302的某個地址寫入一個字節(jié)數(shù)據(jù)
參    數(shù): addr--地址值(寄存器或RAM)
	  	  data--要寫入的地址
返回值  : 無
/********************************************/
void DS1302_writeD(uchar addr,uchar data)
{
 PORTC&=~BIT(RTC_CS);	 //拉低片選端
 PORTB&=~BIT(RTC_CLK);	 //拉低時鐘端
 Delayus(10);
 PORTC|=BIT(RTC_CS);	 //拉高片選端
 Delayus(10); 			 //調(diào)整片選脈沖
 DS1302_writeB(addr);	 //寫入操作命令(地址)
 Delayus(10);
 PORTB&=~BIT(RTC_CLK);	 //拉低時鐘端
 Delayus(10);
 DS1302_writeB(data);	 //寫入數(shù)據(jù)
 PORTB&=~BIT(RTC_CLK);	 //拉低時鐘端
 Delayus(10);			 //調(diào)整片選脈沖
 PORTC&=~BIT(RTC_CS);	 //拉低片選端
}
/*******************************************
函數(shù)名稱: DS1302_readD
功    能: 從DS1302的某個地址讀出一個字節(jié)數(shù)據(jù)
參    數(shù): addr--地址值(寄存器或RAM)
返回值  : data--讀出的數(shù)據(jù)
/********************************************/
uchar DS1302_readD(uchar addr)
{
 uchar data;
 PORTC&=~BIT(RTC_CS);	 //拉低片選端
 PORTB&=~BIT(RTC_CLK);	 //拉低時鐘端
 Delayus(10);
 PORTC|=BIT(RTC_CS);	 //拉高片選端
 Delayus(10); 			 //調(diào)整片選脈沖
 DS1302_writeB(addr);	 //寫入操作命令(地址)
 Delayus(10);
 data=DS1302_readB();	 //讀出數(shù)據(jù)
 Delayus(10);
 PORTB&=~BIT(RTC_CLK);	 //拉低時鐘端
 PORTC&=~BIT(RTC_CS); 	 //拉低片選端
 return data;			 //返回讀出的數(shù)據(jù)
}
/*******************************************
函數(shù)名稱: DS1302_setT
功    能: 設(shè)置DS1302的時間
參    數(shù): ptTimeD--設(shè)置時間數(shù)組指針
返回值  : 無
/********************************************/
void DS1302_setT(uchar ptTimeD[])
{
    uchar i;
    uchar addr = 0x80; 			 	  //寫入地址從秒寄存器開始
    DS1302_writeD(C_WP|WR,UPROTECT); //控制命令,WP位為0,允許寫操作
	Delayms(5);
    for(i=0;i<7;i++)
    {
        DS1302_writeD(addr|WR,ptTimeD[i]);   // 秒 分 時 日 月 星期 年         
        addr+=2;
		Delayms(1);
    }
    DS1302_writeD(C_WP|WR,PROTECT); 		//控制命令,WP位為1,不允許寫操作
}
/*******************************************
函數(shù)名稱: DS1302_getT
功    能: 讀取DS1302的當前時間
參    數(shù): time[]--讀取的時間數(shù)組
返回值  : 無
/********************************************/
void DS1302_getT(uchar time[])
{
    uchar i;
    uchar addr = 0x80; 			 	  		  //讀取地址從秒寄存器開始 
    for(i=0;i<7;i++)
    {
        time[i]=DS1302_readD(addr|RD);    // 秒 分 時 日 月 星期 年        
        addr+=2;
    }
    PORTB&=~BIT(RTC_CLK);	 				  //拉低時鐘端(時鐘端在不操作時為低)
}
/*******************************************
函數(shù)名稱: DS1302_check
功    能: 檢測DS1302是否正常工作
參    數(shù): 無
返回值  : exist--為TRUE為檢測到DS1302,為FALSE為沒檢測到
/********************************************/
uchar DS1302_check(void)
{
	uchar exist;
    DS1302_writeD(C_WP|WR,UPROTECT);		  //寫入寫允許命令
    DS1302_writeD(C_RAMBASE|WR,0xA5);		  //RAM0寫入0xA5
    exist=DS1302_readD(C_RAMBASE|RD);		  //讀取RAM0
    if(exist==0xA5)	
	{
	 exist=TRUE;							  //如果讀取值與寫入值相等,返回TRUE
	}
    else 	
	{
	 exist=FALSE;							  //如果讀取值與寫入值不相等,返回FALSE
	}	
	return exist;
}
/*******************************************
函數(shù)名稱: DS1302_init
功    能: 初始化DS1302
參    數(shù): 無
返回值  : 無
/********************************************/
void DS1302_init(void)
{
 DS1302_writeD(C_WP|WR,UPROTECT);		  //寫入寫允許命令
 DS1302_writeD(C_SEC|WR,CLK_START);		//啟動振蕩器,DS1302開始工作
 DS1302_writeD(C_WP|WR,PROTECT); 		//控制命令,WP位為1,不允許寫操作	  
}
/*******************************************
函數(shù)名稱: BCD_ASCII
功    能: 將壓縮BCD碼轉(zhuǎn)換成ascii碼
參    數(shù): BCD--將要轉(zhuǎn)換的壓縮BCD碼
	  	  ptasc--轉(zhuǎn)換后的ASCII碼數(shù)組指針
返回值  : 無
/********************************************/
void BCD_ASCII(uchar BCD,uchar *ptasc)
{ 	
	*ptasc=BCD/16|0x30;		   //轉(zhuǎn)換十位
	*(ptasc+1)=BCD&0x0F|0x30;  //轉(zhuǎn)換個位
}
/*******************************************
函數(shù)名稱: Disp_time
功    能: 在1602液晶上顯示當前時間(第1行格式:年-月-日 星期;第2行格式:時-分-秒)
參    數(shù): time[]--時間數(shù)組
返回值  : 無
/********************************************/
void Disp_time(uchar time[])
{
 uchar i,asc[2];
 //uchar line1[11]={0,0,'-',0,0,'-',0,0,' ',0,'\0'};//顯示第1行的字符數(shù)組
// uchar line2[9]={0,0,':',0,0,':',0,0,'\0'};		  //顯示第2行的字符數(shù)組

 
  uchar linex1[5]={' ','0',' ','0','\0'};//顯示第1行的字符數(shù)組
  uchar linex1_1[5]={' ','0',' ','0','\0'};//顯示第1行的字符數(shù)組
  uchar linex2[5]={' ',0,' ',0,'\0'};//顯示第1行的字符數(shù)組
   uchar linex2_2[3]={' ','0','\0'};//顯示第1行的字符數(shù)組
  uchar linex3[17]={' ',0,' ',0,' ',':',' ','0',' ','0',' ',':',' ','0',' ','0','\0'};//顯示第1行的字符數(shù)組
 // uchar linex4[11]={'\0'};//顯示第1行的字符數(shù)組
  
 
/* 
 for(i=0;i<3;i++)								  //為第2行的字符數(shù)組賦值
  {
   BCD_ASCII(time[2-i],asc);
   line2[i*3]=asc[0]&0x7F;
   line2[i*3+1]=asc[1];
  } */
   
  BCD_ASCII(time[0],asc);   		//秒			  //為第1行的年賦值
  linex3[13]=asc[0];
  linex3[15]=asc[1];
 
   BCD_ASCII(time[1],asc);   		//分				  //為第1行的年賦值
  linex3[7]=asc[0];
  linex3[9]=asc[1];
 
   BCD_ASCII(time[2],asc);   		//時			  //為第1行的年賦值
  linex3[1]=asc[0];
  linex3[3]=asc[1];
 
 
   BCD_ASCII(time[6],asc);   		//年			  //為第1行的年賦值
 linex1[1]=asc[0];
 linex1[3]=asc[1];
 
   BCD_ASCII(time[4],asc);   		//月				  //為第1行的年賦值
 linex1_1[1]=asc[0];
 linex1_1[3]=asc[1];
 
   BCD_ASCII(time[3],asc);   		//日			  //為第1行的年賦值
 linex2[1]=asc[0];
 linex2[3]=asc[1];
 
 
 BCD_ASCII(time[5],asc);   		//星期			  //為第1行的年賦值
 linex2_2[1]=asc[1];
 
 
  while(LCD12864_readBF());
  LCD12864_gotoXY(1,0);	   					  //第1行,第1列顯示
 // Delayms(200); 
  LCD12864_sendstr(" 2 0");	
  LCD12864_sendstr(linex1);	
  LCD12864_sendstr("年");	
  LCD12864_sendstr(linex1_1);	
  LCD12864_sendstr("月");	 
  
  // while(LCD12864_readBF());
  LCD12864_gotoXY(2,0);		  			  	  //第2行,第3列顯示
  // Delayms(200);
  LCD12864_sendstr(linex2);	
  LCD12864_sendstr("號");
  LCD12864_sendstr("  星期");
  LCD12864_sendstr(linex2_2);
    // while(LCD12864_readBF());
  LCD12864_gotoXY(3,0);		  			  	  //第2行,第3列顯示
  // Delayms(200);
  LCD12864_sendstr(linex3);	
     while(LCD12864_readBF());
  LCD12864_gotoXY(4,2);		  			  	  //第2行,第3列顯示
  // Delayms(200);
  LCD12864_sendstr("4 取消");	
 
  
 /*
 BCD_ASCII(time[6],asc);   						  //為第1行的年賦值
 line1[0]=asc[0];
 line1[1]=asc[1];
 BCD_ASCII(time[4],asc);						  //為第1行的月賦值
 line1[3]=asc[0];
 line1[4]=asc[1];
 BCD_ASCII(time[3],asc);						  //為第1行的日賦值
 line1[6]=asc[0];
 line1[7]=asc[1];
 BCD_ASCII(time[5],asc);						  //為第1行的星期賦值
 line1[9]=asc[1];
 
 
 while(LCD12864_readBF());
  LCD12864_gotoXY(2,1);	   					  //第1行,第1列顯示
 // Delayms(200); 
  LCD12864_sendstr("20");	
  LCD12864_sendstr(line1);	 
   while(LCD12864_readBF());
  LCD12864_gotoXY(3,2);		  			  	  //第2行,第3列顯示
  // Delayms(200);
  LCD12864_sendstr(line2);	

    LCD12864_gotoXY(4,2);		  			  	  //第2行,第3列顯示
  // Delayms(200);
  LCD12864_sendstr("4 取消");	
  
 */ 
 /*
 
 while(LCD1602_readBF());
 LCD1602_gotoXY(1,2);	 						  //第1行從第3個位置開始顯示
 LCD1602_sendstr("20");							  //將07年顯示為2007的形式
 LCD1602_sendstr(line1); 						  //第1行顯示
 while(LCD1602_readBF());
 LCD1602_gotoXY(2,4); 	 						  //第2行從第5個位置開始顯示
 LCD1602_sendstr(line2);						  //第2行顯示
*/
}
/*******************************************
函數(shù)名稱: main

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av网站在线观看| 亚洲人午夜精品天堂一二香蕉| 亚洲3atv精品一区二区三区| 色婷婷av久久久久久久| 亚洲一区二区三区四区在线| 欧美精品在线观看一区二区| 日本不卡一区二区三区高清视频| 日韩你懂的在线观看| 国产一区二区三区国产| 中文字幕二三区不卡| 色综合夜色一区| 亚洲成a人v欧美综合天堂| 欧美一区二区三区不卡| 国产精品88av| 亚洲裸体xxx| 欧美一级二级三级乱码| 国产酒店精品激情| 国产精品国产三级国产有无不卡 | av一区二区三区四区| 亚洲欧美一区二区三区孕妇| 欧美久久久久久蜜桃| 国产精品18久久久久久久久| 国产精品嫩草99a| 欧美日韩国产高清一区二区三区| 免费成人av在线播放| 国产精品午夜电影| 欧美日本高清视频在线观看| 精品一区二区三区蜜桃| 18涩涩午夜精品.www| 欧美男男青年gay1069videost | 日韩国产一二三区| 中文字幕av一区 二区| 欧美午夜精品一区| 国内成+人亚洲+欧美+综合在线| 国产日韩成人精品| 欧美精品丝袜久久久中文字幕| 国产一区二区三区高清播放| 一区二区不卡在线视频 午夜欧美不卡在| 在线播放视频一区| hitomi一区二区三区精品| 日韩电影一区二区三区| 国产精品高潮呻吟久久| 欧美一区二区三区婷婷月色| av电影天堂一区二区在线| 美女尤物国产一区| 亚洲国产精品综合小说图片区| 国产色婷婷亚洲99精品小说| 欧美剧情片在线观看| 99久久综合国产精品| 国产美女精品一区二区三区| 爽好久久久欧美精品| 亚洲少妇30p| 国产色综合久久| www欧美成人18+| 91精品黄色片免费大全| 在线日韩av片| 不卡免费追剧大全电视剧网站| 久久成人18免费观看| 亚洲午夜av在线| 亚洲精品视频在线观看网站| 欧美国产一区二区| 久久久青草青青国产亚洲免观| 制服丝袜激情欧洲亚洲| 欧美午夜在线一二页| 日本精品一区二区三区高清| 成人精品小蝌蚪| 国产精品99久| 国产91综合一区在线观看| 国产一本一道久久香蕉| 久久精品999| 麻豆一区二区三区| 蜜桃视频一区二区三区在线观看 | 国产精品天天看| 精品国产凹凸成av人导航| 91精品国产综合久久久久| 欧美高清hd18日本| 欧美肥妇bbw| 日韩亚洲欧美高清| 欧美一级爆毛片| 337p日本欧洲亚洲大胆精品 | 亚洲国产aⅴ成人精品无吗| 亚洲精品视频一区二区| 亚洲网友自拍偷拍| 视频一区在线视频| 久久激情五月婷婷| 国产高清精品网站| 不卡的av电影在线观看| av一区二区不卡| 91黄色免费版| 欧美日韩1区2区| 日韩欧美黄色影院| 国产日韩欧美精品电影三级在线| 久久精品免视看| 亚洲人成网站在线| 亚洲国产va精品久久久不卡综合| 日韩精品成人一区二区在线| 免费高清视频精品| 国产盗摄一区二区| 色成年激情久久综合| 欧美日韩一级视频| 精品美女在线播放| 亚洲欧美一区二区在线观看| 亚洲一区二区三区自拍| 美女一区二区三区| 国产jizzjizz一区二区| 91福利精品第一导航| 91.麻豆视频| 国产日产欧美一区二区三区 | 亚洲一区免费在线观看| 蜜桃精品视频在线| 波多野结衣在线一区| 欧美无乱码久久久免费午夜一区| 日韩限制级电影在线观看| 中文字幕不卡的av| 亚洲国产精品久久艾草纯爱| 黄色日韩网站视频| 色婷婷综合久久久久中文| 91精品国产色综合久久| 久久日韩精品一区二区五区| 亚洲视频综合在线| 久久狠狠亚洲综合| 91九色02白丝porn| 精品国产百合女同互慰| 亚洲综合色成人| 国产精品一区二区你懂的| 欧美在线观看视频在线| 久久奇米777| 午夜久久久久久久久久一区二区| 国产福利一区二区三区| 欧美色爱综合网| 国产精品日韩精品欧美在线| 轻轻草成人在线| 在线观看免费亚洲| 欧美国产视频在线| 精品一区二区三区免费观看| 在线影视一区二区三区| 亚洲国产精品二十页| 免费一级片91| 欧美日韩一区三区| 中文字幕一区二区三区乱码在线| 久久精品国产久精国产| 欧美色成人综合| 亚洲另类色综合网站| 大白屁股一区二区视频| 日韩精品一区在线| 午夜久久久久久久久| 色吧成人激情小说| 成人欧美一区二区三区小说| 加勒比av一区二区| 日韩欧美中文一区二区| 亚洲午夜在线观看视频在线| 97精品久久久午夜一区二区三区 | 欧美日韩综合色| 日韩一区在线播放| 不卡的电视剧免费网站有什么| www激情久久| 国产一区二区三区免费观看| 日韩欧美国产成人一区二区| 天堂在线一区二区| 欧美日韩国产系列| 亚洲一区二区三区激情| 色欧美88888久久久久久影院| 国产精品家庭影院| fc2成人免费人成在线观看播放| 久久久777精品电影网影网| 蜜桃一区二区三区四区| 欧美一区二区在线播放| 美日韩一区二区三区| 日韩欧美精品三级| 国产综合成人久久大片91| 精品国产一区二区在线观看| 精久久久久久久久久久| 久久久亚洲国产美女国产盗摄| 国产福利一区二区三区视频在线| 国产亲近乱来精品视频| 成人短视频下载| 一区二区三区四区av| 欧美性极品少妇| 丝袜美腿亚洲综合| 精品国产123| 高清视频一区二区| 亚洲精品你懂的| 51精品国自产在线| 韩国av一区二区三区在线观看| 国产欧美精品一区aⅴ影院| 国产91富婆露脸刺激对白| 国产精品嫩草99a| 欧美无砖砖区免费| 久久精品国产免费看久久精品| 久久久天堂av| 91在线免费看| 日韩在线播放一区二区| 欧美mv和日韩mv国产网站| 成人午夜短视频| 亚洲一区二区在线播放相泽| 日韩亚洲欧美高清| 北条麻妃国产九九精品视频| 亚洲成人av资源| www成人在线观看| 日本乱人伦aⅴ精品|